Setelah melakukan konfigurasi normal hanya dengan eth0, saya kembali dan menambahkan config untuk eth1. Dengan hanya eth0 ke atas, tabel rute adalah:
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
Tapi begitu saya membuka eth1, urutan pernyataan rute default menentukan antarmuka mana yang selalu digunakan. Seperti yang ditunjukkan di bawah ini, kebetulan memilih rute eth1 ke gateway 192.168.1.65.
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.1.65 dev eth1 metric 100
default via 192.168.0.97 dev eth0 metric 100
hanya satu pernyataan gateway
Masalah pertama adalah ekstra 'via 192.168.1.65' rute default. Muncul di sana jika definisi eth1 di / etc / network / interfaces memiliki pernyataan "gateway 192.168.1.65". Jadi hapus semua pernyataan gerbang tambahan, dan pantulkan antarmuka:
# ifdown eth1
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
mengatur tabel routing baru
Buat tabel routing baru dan terpisah yang berisi rute default yang sesuai untuk semua lalu lintas yang keluar dari eth1. Nomor tabel di sini tidak penting; 101 bukan tabel routing utama. Lakukan ini dengan perintah 'post-up' pada konfigurasi eth1 di / etc / network / interfaces. Tambahkan hanya satu post-up di eth1; Jangan menambahkannya ke sub-antarmuka eth1:
post-up ip route add default via 192.168.1.65 dev eth1 table 101
Bounce eth1. Tabel routing utama tidak berubah, dan tabel 101 akan berisi rute default via 192.168.1.65 jika eth1 naik.
# ifdown eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101 (ie, table is empty, no output)
# ifup eth1
# ip route show
192.168.0.96/27 dev eth0 proto kernel scope link src 192.168.0.126
192.168.1.64/27 dev eth1 proto kernel scope link src 192.168.1.93
default via 192.168.0.97 dev eth0 metric 100
# ip route show table 101
default via 192.168.1.65 dev eth1
aturan perutean baru
Tambahkan aturan routing untuk menggunakan tabel 101 untuk memilih rute default untuk paket yang harus keluar eth1.
# ip rule add from 192.168.1.64/27 lookup 101
# ip rule show
0: from all lookup local
32765: from 192.168.1.64/27 lookup 101
32766: from all lookup main
32767: from all lookup default
Tambahkan aturan ke /etc/network/interfaces
file juga:
post-up ip rule add from 192.168.1.64/27 lookup 101
Sekarang pastikan untuk menambahkan pembersihan untuk menghapus rute dan aturan ketika antarmuka turun:
post-down ip rule del from 192.168.1.64/27
post-down ip route del default via 192.168.1.65 table 101
[EDIT untuk ubuntu 16.04+] Seperti ditunjukkan di sini dan dari tes yang saya buat dari bantuan ini, ip route2 telah mengubah struktur perintahnya. Untuk membuat pekerjaan Anda harus menyesuaikan sedikit yang harus dilakukan dalam urutan bagaimana man ip
poinnya .
up ip route add default table 101 dev eth1 via 192.168.1.65
up ip rule add from 192.168.1.64/27 lookup 101
down ip rule del from 192.168.1.64/27
down ip route del default table 101 via 192.168.1.65
Atau Anda akan berakhir setelah perintah ifdown - ifup dengan pesan kesalahan @ perintah turun (pesan standar untuk mengatakan bahwa periferal tidak dikonfigurasi dengan benar), dan @ jika tidak ada rute pada tabel 101.