Маршрут OpenBSD через разные шлюзы, которые имеют один и тот же IP, но через разные интерфейсы


9

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

ip route add $destination_1 via $gateway_ip dev $interface_1
ip route add $destination_2 via $gateway_ip dev $interface_2
ip route add $destination_3 via $gateway_ip dev $interface_3

и т.п.

Затем Linux поместит трафик для каждой сети назначения на правильные интерфейсы, направляясь к правильному шлюзу, поэтому не имеет значения, что IP-адрес шлюза одинаков для каждого интерфейса.

У меня вопрос, как я могу добиться этого в OpenBSD? Я пытался и потерпел неудачу. Мои выводы заключаются в том, что для определенного места назначения я могу либо:

  • указать интерфейс (если пункт назначения напрямую доступен по этой ссылке - чего нет в моем случае)
  • укажите IP-адрес шлюза, поскольку адресат не находится непосредственно на линии связи

Но я не могу понять, как определить оба.


Вы уверены, что требуется шлюз? Если соединение является Ethernet, а целью является более одного перехода, требуется шлюз. Но VPN часто ведут себя как двухточечные интерфейсы, которым не нужен шлюз.
— Касперд

Да, это определенно необходимо, так как, хотя интерфейсы являются двухточечными, все сети назначения находятся на расстоянии более одного
— шага,

Связи точка-точка не заботятся о шлюзах.
— Касперд

хорошо, но как я могу заставить его работать тогда?
— bao7uo

Как насчет использования -Tопции routeи определения таблицы маршрутизации для каждого пункта назначения? Я думаю, что это обеспечивает лучшую "изоляцию" для правил интерфейса.
— Гмелис

Ответы:


1

Используйте модификатор -ifp для маршрутизации . Со страницы руководства :

In a change or add command where the destination and gateway are not
sufficient to specify the route, the -ifp or -ifa modifiers may be 
used to determine the interface name or interface address.

Так что-то вроде этого работает:

# for  arg in tun0 tun1 tun2; do ifconfig $arg  192.168.11.1/24; done
# route add 10/8 -iface 192.168.11.1 -ifp tun0
add net 10/8: gateway 192.168.11.1
# route add 172.16/12 -iface 192.168.11.1 -ifp tun1
add net 172.16/12: gateway 192.168.11.1
# route add 192.168.254/24 -iface 192.168.11.1 -ifp tun2
add net 192.168.254/24: gateway 192.168.11.1
# route show -inet
Routing tables

Internet:
Destination        Gateway            Flags   Refs      Use   Mtu  Prio 
Iface
10/8               192.168.11.1       GS         0        0     -     8 tun0
localhost          localhost          UHl        0       22 32768     1 lo0
172.16/12          192.168.11.1       S          0        0     -     8 tun1
192.168.11.1       192.168.11.1       UHhl       1        4     -     1 tun0
[...my real routes omitted...]
192.168.254/24     192.168.11.1       S          0        0     -     8 tun2

Если ваши маршруты назначения пересекаются, вы можете использовать pf и метки маршрутов для соответствия или маршрутизации доменов .


Спасибо за это. Я попробовал это и не мог заставить это работать. Я не думаю, что это -ifaceприменимо, потому что адрес шлюза предназначен для восходящего маршрутизатора (следующий переход), а не IP-адреса интерфейса на самой коробке openbsd. Когда я удалил -iface, он работал, но только для первого интерфейса VPN. Так что я могу сделать, -ifp tap0и это работает, но если я это сделаю, -ifp tap1то не получится, no route to hostкогда я попытаюсь добавить маршрут.
— bao7uo

Несмотря на то, что это не решило проблему, я наградил вас за вознаграждение, потому что я благодарен, что вы пытались помочь.
— bao7uo

Я, честно говоря, озадачен тем, что Linux делает там под капотом ... BSD делает "правильные" вещи, жалуясь на то, что gw не является локальным. Вы пробовали -link -llinfoфлаги для команды маршрута? Кроме того, я думаю, что -ifaceэто применимо (вы получаете ошибку без маршрутизации таблиц / домианов, как вы заметили, потому что сетевой маршрут конфликтует и не может быть добавлен снова). OpenVPN / нажмите? Хотите знать, что обеспечивает «другой» конец, если это поддельный ptp.
— quadruplebucky
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.