Маршрут 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-адрес шлюза, поскольку адресат не находится непосредственно на линии связи

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

bao7uo
источник
Вы уверены, что требуется шлюз? Если соединение является 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 и метки маршрутов для соответствия или маршрутизации доменов .

quadruplebucky
источник
Спасибо за это. Я попробовал это и не мог заставить это работать. Я не думаю, что это -ifaceприменимо, потому что адрес шлюза предназначен для восходящего маршрутизатора (следующий переход), а не IP-адреса интерфейса на самой коробке openbsd. Когда я удалил -iface, он работал, но только для первого интерфейса VPN. Так что я могу сделать, -ifp tap0и это работает, но если я это сделаю, -ifp tap1то не получится, no route to hostкогда я попытаюсь добавить маршрут.
bao7uo
Несмотря на то, что это не решило проблему, я наградил вас за вознаграждение, потому что я благодарен, что вы пытались помочь.
bao7uo
Я, честно говоря, озадачен тем, что Linux делает там под капотом ... BSD делает "правильные" вещи, жалуясь на то, что gw не является локальным. Вы пробовали -link -llinfoфлаги для команды маршрута? Кроме того, я думаю, что -ifaceэто применимо (вы получаете ошибку без маршрутизации таблиц / домианов, как вы заметили, потому что сетевой маршрут конфликтует и не может быть добавлен снова). OpenVPN / нажмите? Хотите знать, что обеспечивает «другой» конец, если это поддельный ptp.
quadruplebucky