Dua antarmuka, dua alamat, dua gateway?

15

Saya memiliki sistem yang memiliki dua antarmuka jaringan dengan alamat IP yang berbeda, keduanya berada dalam jangkauan alamat publik (meskipun melalui NAT dalam kasus yang pertama) dan keduanya memiliki gateway yang berbeda. (Panjang cerita, ini untuk tujuan pengujian)

Masalahnya adalah saat ini, jika saya mencoba untuk melakukan ping alamat pada antarmuka kedua, rute default menunjukkan melalui antarmuka pertama - dan tidak pernah tiba dengan benar.

Apakah mungkin untuk memastikan bahwa tanggapan selalu keluar melalui antarmuka jaringan yang sama (dan dengan IP sumber yang sama) ketika mereka masuk? Dan jika demikian, bagaimana?

Shadur
sumber
1
Mungkin ada beberapa varian dalam hal ini: unix.stackexchange.com/questions/4420/…
Shawn J. Goff

Jawaban:

17

Anda salah paham masalah. Tidak setiap paket merupakan respons dan tidak setiap paket dapat dicocokkan dengan beberapa paket lain sehingga "antarmuka jaringan yang sama dengan saat mereka masuk" masuk akal. Yang ingin Anda lakukan adalah memilih gateway untuk sebuah paket berdasarkan alamat IP sumbernya.

Ini disebut routing berbasis sumber atau routing kebijakan. Anda bisa melakukannya dengan aturan sederhanaiptables , tetapi cara terbaik adalah mengatur dua tabel routing, satu untuk setiap alamat sumber publik:

Pertama, buat dua tabel (Ganti <NAME1> dan <NAME2> dengan nama yang masuk akal untuk dua penyedia Anda, sama dengan IP1, DEV1, dan sebagainya):

echo 200 <NAME1> >> /etc/iproute2/rt_tables
echo 201 <NAME2> >> /etc/iproute2/rt_tables

Tambahkan gateway ke setiap tabel routing (jika perlu):

ip route add <NET1> dev <DEV1> src <SRC1> table <NAME1>
ip route add <NET2> dev <DEV2> src <SRC2> table <NAME2>

Kemudian rute default:

ip route add default via <IP1> table <NAME1>
ip route add default via <IP2> table <NAME2>

Kemudian aturan untuk memilih tabel rute berdasarkan alamat sumber:

ip rule add from <IP1> table <NAME1>
ip rule add from <IP2> table <NAME2>

Lihat Routing untuk beberapa uplink / penyedia untuk lebih jelasnya.

David Schwartz
sumber
Anda menulis: 'Tidak setiap paket merupakan respons dan tidak setiap paket dapat dicocokkan dengan beberapa paket lain sehingga "antarmuka jaringan yang sama dengan ketika mereka masuk" masuk akal. 'Bisakah Anda menjelaskan ini lebih lanjut? Saya mengerti, bahwa tidak setiap paket merupakan respons dan tidak setiap paket dapat dicocokkan dengan paket "sumber" lainnya. Jika kita mengecualikan paket-paket ini dari pertimbangan, karena mereka tidak menyebabkan masalah dan karenanya tidak menjadi perhatian kita, mengapa paket-paket yang tersisa tidak dapat dialihkan ke "antarmuka jaringan yang sama dengan ketika mereka masuk"?
Andrew Savinykh
@AndrewSavinykh Itu tidak akan menyelesaikan semua masalah. Secara khusus, itu akan rusak setiap kali paket keluar berasal secara lokal (seperti permintaan ping keluar) keluar antarmuka yang salah untuk alamat IP sumbernya dan dijatuhkan oleh gateway. Masalahnya adalah, seperti yang saya jelaskan, sebenarnya tentang memastikan bahwa paket keluar gateway sesuai dengan alamat IP sumber mereka.
David Schwartz
David, saya ingin mencapai hal yang sama seperti OP tetapi saya tidak bisa. Saya telah mengirim pertanyaan di sini: serverfault.com/questions/992624/... , akan lebih baik jika Anda bisa melihatnya
Housemd
6

Jawaban David Schwartz sangat bagus, tetapi Anda dapat menyederhanakan aturan routing sedikit dengan hanya memiliki satu tabel tambahan, dan menggunakan rute default Anda untuk yang lain. Saya memiliki server yang berada di belakang dua gateway NAT, dan saya baru-baru ini melalui proses menciptakan skenario di antara sekelompok VM. /etc/network/interfacesPenampilan saya seperti ini:

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
    address 192.168.13.13
    netmask 255.255.255.0
    up ip route add table optus default via 192.168.13.10
    up ip rule add from 192.168.13.213 table optus
    up ip route add default via 192.168.13.11

auto eth0:0
iface eth0:0 inet static
    address 192.168.13.213
    netmask 255.255.255.0

(ini untuk pengaturan di mana dua ISP adalah Optus dan iiNet, maka nama tabel dari 'optus')

Ini, ditambah garis dalam /etc/iproute2/rt_tablesmembuat tabel, harus menjadi semua yang Anda butuhkan. Anda akan memiliki dua alamat IP; lalu lintas dari 192.168.13.13 akan keluar melalui 192.168.13.11, dan lalu lintas dari 192.168.13.213 akan keluar melalui 192.168.13.10. Konfigurasikan kedua gateway tersebut untuk melakukan penerusan porta secara tepat (192.168.13.11 meneruskan barang ke 192.168.13.13, dan 192.168.13.10 meneruskan barang ke 192.168.13.213), dan sisanya harus mengurus sendiri.

Anda mungkin perlu mengubah sedikit hal untuk situasi Anda, karena Anda menggunakan IP publik secara langsung, tetapi sesuatu seperti ini masih bisa berfungsi. Juga, jauh lebih mudah untuk melakukan hal-hal ini di /etc/network/interfacesdan kemudian git-mengelola file itu, daripada mencoba mengingat bagaimana Anda mengaturnya, dua tahun kemudian ketika sistem harus di-boot ulang!

rosuav
sumber
1

Contoh jaringan ganda

Contoh ini menunjukkan bagaimana tambahan eth1dengan 10.130.0.2netmask 255.255.255.255dan gateway 10.130.0.1dapat dibuat tersedia untuk layanan yang mengikatnyaping -I eth1 8.8.8.8

Secara teknis kami adalah:

  • Menambahkan gateway lain dengan metrik yang lebih besar
  • Menambahkan / menggunakan tabel 100 dan mengaturnya
  • Menambahkan aturan untuk merutekan lalu lintas ke / dari eth1 melaluinya
ip addr add 10.130.0.2/32 broadcast 10.130.0.2 dev eth1
ip link set eth1 up
ip route add 10.130.0.1 src 10.130.0.2 dev eth1
ip route add 10.130.0.1 src 10.130.0.2 dev eth1 table 100
ip route add default via 10.130.0.1 dev eth1 metric 10
ip route add default via 10.130.0.1 dev eth1 table 100
ip rule add from 10.130.0.2/32 table 100
ip rule add to 10.130.0.2/32 table 100
curl --interface eth1 ifconfig.co
curl --interface eth0 ifconfig.co
ping -I eth1 8.8.8.8
intika
sumber