Trasa OpenBSD przez różne bramy, które mają ten sam adres IP, ale na różnych interfejsach

9

Mam wiele połączeń VPN, które używają tego samego adresu IP bramy (nie mam możliwości zmiany tego, ponieważ jest poza moją kontrolą). Wszystkie te sieci VPN zapewniają dostęp do różnych sieci, a sieci mają co najmniej jeden lub dwa przeskoki w górę, więc we wszystkich przypadkach wymagany jest adres IP bramy. W systemie Linux, aby kierować do sieci, mogę po prostu zrobić:

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

itp.

Linux umieści następnie ruch dla każdej sieci docelowej na właściwych interfejsach, kierując się do właściwej bramy, więc nie ma znaczenia, że ​​adres IP bramy jest taki sam dla każdego interfejsu.

Moje pytanie brzmi: jak mogę to osiągnąć w OpenBSD? Próbowałem i nie udało mi się. Moje ustalenia są takie, że dla konkretnego miejsca docelowego mogę:

  • określić interfejs (jeśli miejsce docelowe jest osiągalne bezpośrednio na tym łączu - czego w moim przypadku nie ma)
  • określ adres IP bramy, ponieważ miejsce docelowe nie znajduje się bezpośrednio na łączu

Ale nie mogę wymyślić, jak określić oba.

bao7uo
źródło
Czy na pewno wymagana jest brama? Jeśli łączem jest Ethernet, a celem jest więcej niż jeden przeskok, wymagana jest brama. Ale sieci VPN często zachowują się jak interfejsy typu punkt-punkt, które nie potrzebują bramy.
kasperd
Tak, jest to zdecydowanie wymagane, ponieważ chociaż interfejsy są punkt-punkt, wszystkie sieci docelowe znajdują się w odległości większej niż jeden przeskok, a przesyłanie adresów IP i translacja NAT są zaangażowane
bao7uo
Połączenia punkt-punkt nie dbają o bramy.
kasperd
ok, ale jak mogę to zrobić?
bao7uo
Co powiesz na skorzystanie z -Topcji routei zdefiniowanie tabeli routingu dla każdego miejsca docelowego? Myślę, że zapewnia lepszą „izolację” dla reguł poszczególnych interfejsów.
gmelis,

Odpowiedzi:

1

Do zmiany trasy użyj modyfikatora -ifp . Od strony man :

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.

Więc coś takiego działa:

# 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

Jeśli trasy docelowe się pokrywają, możesz użyć etykiet pf i tras do dopasowania lub trasowania domen .

quadruplebucky
źródło
Dzięki za to. Próbowałem i nie udało mi się uruchomić. Nie sądzę, żeby miało to -ifacezastosowanie, ponieważ adres bramy dotyczy routera wysyłającego (następnego przeskoku), a nie adresu IP interfejsu na samym pudełku openbsd. Kiedy usunąłem -iface, zadziałało, ale tylko dla pierwszego interfejsu VPN. Mogę to zrobić -ifp tap0i działa, ale jeśli to zrobię, -ifp tap1nie powiedzie się, no route to hostgdy spróbuję dodać trasę.
bao7uo
Chociaż nie rozwiązało to problemu, przyznałem ci nagrodę, ponieważ jestem wdzięczny, że próbowałeś pomóc.
bao7uo
Jestem szczerze zdziwiony tym, co Linux robi pod maską ... BSD robi to, co właściwe, narzekając, że gw nie jest lokalny. Czy próbowałeś -link -llinfoflagi do polecenia trasy? Myślę też, że -ifacema to zastosowanie (jak zauważyłeś, błąd pojawia się bez routingu tabel / domianów, ponieważ trasa sieci powoduje konflikt i nie można go dodać ponownie). OpenVPN / dotknij? Zastanawiasz się, co zapewnia „drugi” koniec, jeśli jest to fałszywy ptp.
quadruplebucky