Saya ingin memiliki beberapa NIC (eth0 dan wlan0) di subnet yang sama dan berfungsi sebagai cadangan untuk aplikasi pada host jika salah satu NIC gagal. Untuk alasan ini saya telah membuat tabel routing tambahan. Begini /etc/network/interfaces
tampilannya:
iface eth0 inet static
address 192.168.178.2
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev eth0 src 192.168.178.2
post-up ip route add default via 192.168.178.1 dev eth0
post-up ip rule add from 192.168.178.2/32
post-up ip rule add to 192.168.178.2/32
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.3
netmask 255.255.255.0
dns-nameserver 8.8.8.8 8.8.4.4
post-up ip route add 192.168.178.0/24 dev wlan0 src 192.168.178.3 table rt2
post-up ip route add default via 192.168.178.1 dev wlan0 table rt2
post-up ip rule add from 192.168.178.3/32 table rt2
post-up ip rule add to 192.168.178.3/32 table rt2
Itu berfungsi untuk menghubungkan ke host: Saya masih bisa SSH ke dalamnya jika salah satu antarmuka gagal. Namun, aplikasi pada host tidak dapat menginisialisasi koneksi ke dunia luar jika eth0
sedang down. Itu masalah saya.
Saya telah meneliti topik itu dan menemukan informasi menarik berikut:
Ketika suatu program memulai koneksi keluar, normal baginya untuk menggunakan alamat sumber wildcard (0.0.0.0), menunjukkan tidak ada preferensi untuk antarmuka yang digunakan asalkan alamat tujuan yang relevan dapat dijangkau. Ini tidak digantikan oleh alamat sumber tertentu sampai setelah keputusan routing dibuat. Lalu lintas yang terkait dengan koneksi seperti itu tidak akan cocok dengan salah satu aturan kebijakan di atas, dan tidak akan diarahkan ke salah satu dari tabel routing yang baru ditambahkan. Dengan asumsi konfigurasi normal, itu akan jatuh ke tabel routing utama. http://www.microhowto.info/howto/ensure_symmetric_routing_on_a_server_with_multiple_default_gateways.html
Apa yang saya inginkan adalah tabel rute utama memiliki lebih dari satu gateway default (satu eth0
dan satu wlan0
) dan untuk pergi ke gateway default melalui eth0
secara default dan melalui wlan0
jika eth0
turun.
Apakah itu mungkin? Apa yang harus saya lakukan untuk mencapai fungsi seperti itu?
Jawaban:
Memecahkannya sendiri. Tampaknya ada sedikit informasi tentang hal-hal jaringan yang dapat Anda lakukan dengan Linux, jadi saya telah memutuskan untuk mendokumentasikan dan menjelaskan solusi saya secara rinci. Ini adalah pengaturan terakhir saya:
Langkah pertama : Buat tabel rute baru untuk setiap antarmuka di
/etc/iproute2/rt_tables
. Sebut saja rt1, rt2 dan rt3Langkah kedua : Konfigurasi jaringan di
/etc/network/interfaces
. Ini adalah bagian utama dan saya akan mencoba menjelaskan sebanyak yang saya bisa:Jika Anda mengetik,
ip rule show
Anda akan melihat yang berikut ini:Ini memberitahu kita bahwa lalu lintas masuk atau keluar dari alamat IP "192.168.178.99" akan menggunakan tabel rute rt1. Sejauh ini baik. Tetapi lalu lintas yang dihasilkan secara lokal (misalnya Anda ingin melakukan ping atau ssh dari mesin ke tempat lain) perlu perlakuan khusus (lihat kutipan besar dalam pertanyaan).
Empat baris post-up pertama
/etc/network/interfaces
secara langsung dan penjelasan dapat ditemukan di internet, baris post-up kelima dan terakhir adalah yang membuat keajaiban terjadi:Perhatikan bagaimana kami belum menentukan tabel rute untuk garis post-up ini. Jika Anda tidak menentukan tabel rute, informasi tersebut akan disimpan dalam
main
tabel rute yang kami lihatip rule show
. Baris post-up ini menempatkan rute default di tabel rute "utama" yang digunakan untuk lalu lintas yang dihasilkan secara lokal yang bukan merupakan respons terhadap lalu lintas yang masuk. (Misalnya MTA di server Anda mencoba mengirim email.)Ketiga antarmuka semuanya meletakkan rute default di tabel rute utama, meskipun dengan metrik yang berbeda. Mari kita lihat
main
tabel rute denganip route show
:Kita dapat melihat bahwa tabel rute utama memiliki tiga rute default, meskipun dengan metrik yang berbeda. Prioritas tertinggi adalah eth0, lalu wlan1 dan kemudian wlan0 karena angka metrik yang lebih rendah menunjukkan prioritas yang lebih tinggi. Karena
eth0
memiliki metrik terendah, ini adalah rute default yang akan digunakan selamaeth0
terserah. Jikaeth0
turun, lalu lintas keluar akan beralih kewlan1
.Dengan pengaturan ini kita dapat mengetik
ping 8.8.8.8
di satu terminal danifdown eth0
di terminal lainnya.ping
harus tetap berfungsi karena karenaifdown eth0
akan menghapus rute default yang terkaiteth0
, lalu lintas keluar akan beralih kewlan1
.Baris post-down memastikan bahwa tabel rute terkait dihapus dari basis data kebijakan perutean (
ip rule show
) ketika antarmuka turun, untuk menjaga semuanya rapi.Masalah yang tersisa adalah ketika Anda menarik steker dari
eth0
rute default untuketh0
masih ada dan lalu lintas keluar gagal. Kita perlu sesuatu untuk memantau antarmuka kita dan mengeksekusiifdown eth0
jika ada masalah dengan antarmuka (yaitu kegagalan NIC atau seseorang menarik steker).Langkah terakhir : masuk
ifplugd
. Itu adalah daemon yang menonton antarmuka dan mengeksekusiifup/ifdown
jika Anda menarik steker atau jika ada masalah dengan koneksi wifi/etc/default/ifplugd
:Anda sekarang dapat menarik steker
eth0
, lalu lintas keluar akan beralih kewlan1
dan jika Anda memasukkan kembali, lalu lintas keluar akan beralih kembali keeth0
. Server Anda akan tetap online selama salah satu dari ketiga antarmuka itu berfungsi. Untuk menghubungkan ke server Anda, Anda dapat menggunakan alamat ip eth0 dan jika itu gagal, alamat ip wlan1 atau wlan0.sumber
scp
sesi akan patah karena alamat IP berubah. Anda dapat mencoba menggunakanwithsctp
untuk menjaga koneksi tetap hidup dalam kasus seperti itu atau menggunakanrsync
alih-alihscp
untuk membatasi transfer dari titik di mana ia berhenti.withsctp
juga akan berfungsi hanya untuk satu rute default.Linux menyediakan solusi yang lebih baik daripada solusi skrip Anda: ikatan cadangan aktif.
Dengan cara ini mesin Anda hanya akan memilikinya satu alamat ip (dan satu alamat mac) dan secara otomatis dan transparan beralih antarmuka jika satu antarmuka menjadi tidak tersedia. Tidak ada gangguan koneksi TCP (baik ke internal lan Anda maupun ke internet).
Saya menggunakan pengaturan ini sendiri untuk secara otomatis failover dari eth0 ke wlan0 di laptop debian saya ketika saya melepas laptop saya dari stasiun dok.
/ Etc / network / interfaces saya:
Anda dapat dengan mudah memperluas pengaturan ini untuk memasukkan beberapa perangkat wlan. Pengaturan
primary_reselect
opsi untukbetter
(secara otomatis memilih tautan tercepat) akan membantu di sini.Untuk informasi lebih lanjut, lihat https://wiki.linuxfoundation.org/networking/bonding dan https://wiki.debian.org/Bonding
Dan (tentu saja) dokumentasi kernel linux di https://www.kernel.org/doc/Documentation/networking/bonding.txt
sumber