OpenVPN горе маршрутизации между сайтами

Я борюсь с настройкой openVPN для соединения двух сайтов. Вот как выглядит сценарий

Офис 1 (сервер):

  • локальная сеть: 192.168.178.0/24
  • Сервер openvpn публичный IP: 192.168.178.2 на BR0
  • Сервер openvpn внутренний IP: 192.168.0.1 на tun0

Офис 2 (клиент):

  • локальная сеть: 192.168.177.0/24
  • общедоступный клиент openvpn ip: 192.168.177.2 на p2p1
  • Внутренний IP-адрес клиента openvpn: 192.168.0.6 на tun0

  • openvpn внутренняя сеть: 192.168.0.0/24

И клиент, и сервер находятся за маршрутизаторами NAT с динамически назначаемыми IP-адресами.

По сути, задействованные машины в любом из офисов должны "видеть" друг друга. После настройки туннеля и правильной настройки таблиц маршрутизации на обоих сайтах обычные хосты в обеих сетях могут пропинговать все в этих двух сетях. Хорошо до сих пор.

Однако конечные точки могут видеть только друг друга, но ни один из хостов в соответствующей сети на дальнем конце. Например, если сделать

ping 192.168.178.2

из конечной точки VPN 192.168.177.2 он работает просто отлично, любой другой адрес не будет работать; хозяева не ответят.

Теперь посмотрим на вывод команды tcpdump, когда я пингую другой адрес, например, 192.168.178.3.

11: 11: 28.104640 IP 192.168.0.6> 192.168.178.3: эхо-запрос ICMP, id 2130, seq 1, длина 64

Исходный IP кажется не совсем правильным. Он принадлежит внутренней сети OpenVPN, и я не получаю ответ ICMP.

Все начинает работать, когда я явно инструктирую ping использовать правильный IP-адрес источника:

ping 192.168.178.3 -I 192.168.177.2

Теперь вывод tcpdump тоже в порядке:

11: 20: 08.266271 IP 192.168.177.2> 192.168.178.3: эхо-запрос ICMP, id 7883, seq 17, длина 64 11:20:08.316037 IP 192.168.178.3 > 192.168.177.2: эхо-ответ ICMP, id 7883, seq 17, длина 64

Глядя на критическую запись в таблице маршрутизации клиента, становится очевидным, что адрес источника находится во внутренней сети:

default via 192.168.177.1 dev p2p1 
192.168.0.1 via 192.168.0.5 dev tun0 
192.168.0.5 dev tun0  proto kernel  scope link  src 192.168.0.6 
192.168.177.0/24 dev p2p1  proto kernel  scope link  src 192.168.177.2 
192.168.178.0/24 via 192.168.0.5 dev tun0

Есть ли возможность заставить OpenVPN создать эту запись с соответствующим src??

Вот мои файлы конфигурации openVPN. Я пропущу части TLS, поскольку сам туннель работает как положено.

Сервер в офисе 1:

local 192.168.178.2
server 192.168.0.0 255.255.255.0
proto tcp-server
port 1194
dev tun
mssfix
user nobody
group nogroup

keepalive 20 120
ping-timer-rem
persist-tun
persist-key
float
comp-lzo
push "comp-lzo"

push "route 192.168.178.0 255.255.255.0"
route 192.168.177.0 255.255.255.0
client-config-dir client-configs

Существует одна клиентская конфигурация, которая выглядит так:

iroute  192.168.177.0 255.255.255.0
push    "route 192.168.178.0 255.255.255.0 vpn_gateway"

Клиент в офисе 2:

client
dev tun0
remote <server address>
proto tcp-client
port 1194
connect-retry 15


comp-lzo
user nobody
group nogroup

persist-tun
persist-key

Я действительно в растерянности... ваша помощь очень ценится.

1 ответ

Решение

Поведение, которое вы видите, является дизайном. Узел в сети по умолчанию будет использовать IP-адрес интерфейса, через который происходит выход трафика, в качестве исходного IP-адреса.

Клиентский компьютер в одной из локальных сетей будет использовать, например, 192.168.178.10 в качестве исходного IP-адреса, поскольку он не является многосетевым. Затем шлюз направит пакет в ваш ящик OpenVPN и без проблем пройдет через туннель.

Однако, если вы идете из самого окна OpenVPN, он будет использовать IP-адрес интерфейса OpenVPN, поскольку именно там пакет должен выйти.

Что хорошо. Доходит до удаленного сайта. Но затем удаленный сайт хочет отправить пакеты для ответа на эхо-запрос на 192.168.0.6. Ответ отправляется на шлюз, но поскольку у шлюза (я полагаю, поскольку вы не разместили таблицы маршрутизации шлюза в сети) нет маршрута для этой сети, он не знает, как продолжить.

Самый простой способ решить эту проблему - просто добавить маршрут для 192.168.0.0/24 (ваша сеть OpenVPN) к шлюзам обеих сетей.

Другой вариант, если ваша операционная система поддерживает его (вы не указали, на какой ОС вы используете OpenVPN), было бы посмотреть, можете ли вы использовать параметр "src" маршрута, чтобы переопределить это поведение по умолчанию при выборе IP-адреса. выходного интерфейса. Пожалуйста, обратитесь к вопросу под названием Как установить собственный источник маршрута в openvpn для получения дополнительной информации.

Другие вопросы по тегам