У меня есть несколько VPN-подключений, которые используют один и тот же IP-адрес шлюза (у меня нет возможности изменить это, так как это вне моего контроля). Все эти виртуальные частные сети предоставляют доступ к разным сетям, и сети являются как минимум одним или двумя восходящими переходами, поэтому 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? Я пробовал и потерпел неудачу. Я пришел к выводу, что для конкретного пункта назначения я могу:
Но я не могу понять, как указать оба.
Использовать -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 и метки маршрута для соответствия, или домены маршрутизации.