Rute OpenBSD melalui gateway yang berbeda yang memiliki IP yang sama tetapi pada antarmuka yang berbeda

9

Saya memiliki beberapa koneksi VPN yang menggunakan IP gateway yang sama (saya tidak memiliki kemampuan untuk mengubahnya karena ini di luar kendali saya). Semua VPN ini menyediakan akses ke jaringan yang berbeda, dan jaringan setidaknya satu atau dua hop di hulu, sehingga IP gateway diperlukan dalam semua kasus. Dengan Linux, untuk merutekan ke jaringan, saya cukup melakukan:

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

dll.

Linux kemudian akan menempatkan lalu lintas untuk setiap jaringan tujuan ke antarmuka yang benar, menuju gateway yang benar, sehingga tidak masalah bahwa IP gateway sama untuk setiap antarmuka.

Pertanyaan saya adalah, bagaimana saya bisa mencapai ini di OpenBSD? Saya sudah mencoba dan gagal. Temuan saya adalah bahwa untuk tujuan tertentu, saya dapat:

  • tentukan antarmuka (jika tujuan secara langsung dapat dijangkau pada tautan itu - yang tidak ada dalam kasus saya)
  • tentukan IP gateway karena tujuannya tidak langsung pada tautan

Tapi saya tidak tahu bagaimana menentukan keduanya.

bao7uo
sumber
Apakah Anda yakin diperlukan gateway? Jika tautannya adalah Ethernet dan targetnya lebih dari satu hop maka diperlukan gateway. Tetapi VPN sering berperilaku sebagai antarmuka point-to-point yang tidak membutuhkan gateway.
kasperd
Ya, itu pasti diperlukan karena meskipun antar muka bersifat point-to-point, jaringan tujuan semuanya lebih dari satu hop dan ada ip forwarding dan NAT yang terlibat
bao7uo
Tautan point-to-point tidak peduli dengan gateway.
kasperd
ok, tapi bagaimana saya bisa membuatnya bekerja?
bao7uo
Bagaimana dengan menggunakan -Topsi untuk routedan mendefinisikan tabel routing untuk setiap tujuan? Saya pikir ini memberikan "isolasi" yang lebih baik untuk aturan antarmuka.
gmelis

Jawaban:

1

Gunakan pengubah -ifp untuk rute . Dari halaman manual :

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.

Jadi sesuatu seperti ini berfungsi:

# 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

Jika rute tujuan Anda tumpang tindih maka Anda dapat menggunakan pf dan label rute untuk mencocokkan, atau merutekan domain .

quadruplebucky
sumber
Terima kasih untuk ini. Saya sudah mencobanya dan tidak berhasil. Saya tidak berpikir -ifaceberlaku karena alamat gateway adalah untuk router hulu (hop berikutnya), bukan IP antarmuka pada kotak openbsd itu sendiri. Ketika saya menghapus -iface itu berhasil, tetapi hanya untuk antarmuka VPN pertama. Jadi saya bisa melakukannya -ifp tap0dan berfungsi, tetapi jika saya -ifp tap1gagal dengan no route to hostketika saya mencoba menambahkan rute.
bao7uo
Meskipun itu tidak menyelesaikan masalah, saya telah memberi Anda hadiah karena saya bersyukur Anda mencoba membantu.
bao7uo
Jujur saya bingung dengan apa yang dilakukan linux di bawah tenda di sana ... BSD melakukan hal yang "benar" dengan mengeluh tentang gw yang tidak lokal. Sudahkah Anda mencoba -link -llinfobendera ke perintah rute? Juga, saya pikir -ifaceitu berlaku (Anda mendapatkan kesalahan tanpa tabel routing / domian, seperti yang Anda catat, karena konflik rute jaringan dan tidak dapat ditambahkan lagi). OpenVPN / ketuk? Ingin tahu apa yang menyediakan akhir "lain", jika itu adalah ptp palsu.
quadruplebucky