1

Сейчас я провел довольно много исследований по этой теме и пока не смог найти жизнеспособного решения. Было много вопросов, большинство из которых не совсем соответствовали моей проблеме, и только несколько ответов. Итак, я надеюсь получить некоторую помощь здесь. Вот настройки:

Моя локальная сеть использует диапазон адресов 10.1.0.0/24, где 10.1.0.1 - маршрутизатор, а 10.1.0.2 - машина, к которой я пытаюсь получить доступ из-за пределов сети.

Маршрутизатор работает с микропрограммой dd-wrt и настроен как сервер OpenVPN с диапазоном адресов vpn 10.2.0.0/24. В конфигурации серверов я пытаюсь протолкнуть маршрут к моей локальной сети через:

push "route 10.1.0.0 255.255.255.0"

Я могу установить работающее соединение OpenVPN от моего клиента на работе, и маршрут получен правильно:

$ route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         ds9-ds10.gate.u 0.0.0.0         UG    302    0        0 wlan0
10.1.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun0
10.2.0.0        *               255.255.255.0   U     0      0        0 tun0
10.20.4.0       *               255.255.254.0   U     0      0        0 wlan0
10.20.4.0       *               255.255.254.0   U     302    0        0 wlan0

Я также могу подключиться к маршрутизатору через ssh или использовать его веб-интерфейс, используя либо обычный ip 10.1.0.1 (который возможен только при проталкивании маршрута), либо vpn ip 10.2.0.1.

Переадресация IP включена на маршрутизаторе:

# cat /proc/sys/net/ipv4/ip_forward 
1

Я подумал, что теперь я должен быть в состоянии ssh к другой машине (которая настроена на прием соединений от 10.1.0.0/24 и 10.2.0.0./24 адресов), используя его LAN ip 10.1.0.2, как все соединения с 10.1.0.0/24 теперь должен маршрутизироваться через 10.2.0.1, но я не могу подключиться.

Я не вижу пропущенный бит в моей настройке, возможно, где-то в маршрутизаторе. Почему мой запрос на подключение к 10.1.0.1 (диапазон локальных адресов) работает, но запрос на 10.1.0.2 не достигает компьютера, подключенного к маршрутизатору?

РЕДАКТИРОВАТЬ:

Я не знал о проблеме, на которую указал @MariusMatutiae. Я пару раз читал о необходимости статического маршрута, но никогда не было ясно, куда и что добавить, я должен признать, что мои знания о мельчайших деталях весьма ограничены. Однако разъяснение в его ответе имеет смысл. Следуя его советам, я изменил таблицу маршрутизации на маршрутизаторе, чтобы теперь включить

10.2.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun2

приводя к следующей таблице:

root@DD-WRT:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         188-193-191-254 0.0.0.0         UG    0      0        0 vlan2
10.1.0.0        *               255.255.255.0   U     0      0        0 br0
10.2.0.0        10.2.0.1        255.255.255.0   UG    0      0        0 tun2
10.2.0.0        *               255.255.255.0   U     0      0        0 tun2
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
169.254.0.0     *               255.255.0.0     U     0      0        0 br0
188.193.184.0   *               255.255.248.0   U     0      0        0 vlan2

В цепочку FORWARD iptables входят строки

pkts bytes target     prot opt in     out     source               destination  
   0     0 ACCEPT     0    --  tun2   *       0.0.0.0/0            0.0.0.0/0
   0     0 ACCEPT     0    --  *      tun2    0.0.0.0/0            0.0.0.0/0

выше любых DROPs или REJECTs с tun2, являющимся устройством tun сервера OpenVPN. Думаю, все должно быть в порядке.

Проблема, однако, все еще остается нерешенной. В чем дело?

1 ответ1

2

Вы думаете, что заявление

 push "route 10.1.0.0 255.255.255.0"

это конец истории, насколько маршрутизация идет, но это не так. Все, что делает этот элемент, - это информирует клиента о существовании частной локальной сети 10.1.0.0/24 позади VPN-сервера. Однако сам сервер VPN не знает о существовании сети VPN 10.2.0.0/24, поскольку никто не дал ему указание добавить подходящий маршрут в свою таблицу. Это является причиной ваших проблем: на самом деле ваш клиент может подключиться к членам локальной сети, но он никогда не получает ответ, потому что маршрутизатор не знает, как перенаправить свои ответы VPN-клиенту.

Выходом из этого является либо добавление этой команды в маршрутизатор,

 route add -net 10.2.0.0/24 gw 10.2.0.1

или же

 route add -net 10.2.0.0/24 dev tun0 

или (после проверки, что это единственная проблема, которая у вас есть), чтобы добавить эту инструкцию в ваш файл server.conf:

 route 10.2.0.0 255.255.255.0

Вам нужно это заявление, а также заявление

 push "route 10.1.0.0 255.255.255.0"

Вы можете быть удивлены тем, что маршрутизатор не знает маршрут обратно к VPN-клиенту, потому что вы думаете, что маршрутизатор и VPN-сервер - это одна и та же машина, но именно это объясняет, почему маршрутизатор не знает, что делает сервер: общий случай - тот, где два размещены на двух разных машинах. В этом случае вы не хотите изменять таблицу маршрутизации VPN-сервера, поскольку это будет означать, что другие устройства в локальной сети не будут знать, как связаться с VPN-клиентом, и вам придется решить эту проблему, изменив все таблицы маршрутизации всех ПК, чтобы сообщить им, что шлюзом для VPN является VPN-сервер, а не маршрутизатор. Вместо этого, что вы действительно хотите сделать в этом случае, это не изменять таблицу маршрутизации VPN-сервера, а вместо этого изменять таблицу маршрутизации маршрутизатора, чтобы вы делали это только один раз.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .