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:
- 3 NIC: eth0 (kawat), wlan0 (built-in wifi, lemah), wlan1 (usb wifi adapter, sinyal lebih kuat dari wlan0)
- Semuanya pada satu subnet, masing-masing dengan alamat IP mereka sendiri.
- eth0 harus digunakan untuk lalu lintas masuk dan keluar secara default.
- Jika eth0 gagal maka wlan1 harus digunakan.
- Jika wlan1 gagal maka wlan0 harus digunakan.
Langkah pertama : Buat tabel rute baru untuk setiap antarmuka di /etc/iproute2/rt_tables
. Sebut saja rt1, rt2 dan rt3
#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1 inr.ruhep
1 rt1
2 rt2
3 rt3
Langkah kedua : Konfigurasi jaringan di /etc/network/interfaces
. Ini adalah bagian utama dan saya akan mencoba menjelaskan sebanyak yang saya bisa:
auto eth0 wlan0
allow-hotplug wlan1
iface lo inet loopback
iface eth0 inet static
address 192.168.178.99
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.99 table rt1
post-up ip route add default via 192.168.178.1 dev eth0 table rt1
post-up ip rule add from 192.168.178.99/32 table rt1
post-up ip rule add to 192.168.178.99/32 table rt1
post-up ip route add default via 192.168.178.1 metric 100 dev eth0
post-down ip rule del from 0/0 to 0/0 table rt1
post-down ip rule del from 0/0 to 0/0 table rt1
iface wlan0 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.97
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.97 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.97/32 table rt2
post-up ip rule add to 192.168.178.97/32 table rt2
post-up ip route add default via 192.168.178.1 metric 102 dev wlan0
post-down ip rule del from 0/0 to 0/0 table rt2
post-down ip rule del from 0/0 to 0/0 table rt2
iface wlan1 inet static
wpa-conf /etc/wpa_supplicant.conf
wireless-essid xyz
address 192.168.178.98
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 wlan1 src 192.168.178.98 table rt3
post-up ip route add default via 192.168.178.1 dev wlan1 table rt3
post-up ip rule add from 192.168.178.98/32 table rt3
post-up ip rule add to 192.168.178.98/32 table rt3
post-up ip route add default via 192.168.178.1 metric 101 dev wlan1
post-down ip rule del from 0/0 to 0/0 table rt3
post-down ip rule del from 0/0 to 0/0 table rt3
Jika Anda mengetik, ip rule show
Anda akan melihat yang berikut ini:
0: from all lookup local
32756: from all to 192.168.178.98 lookup rt3
32757: from 192.168.178.98 lookup rt3
32758: from all to 192.168.178.99 lookup rt1
32759: from 192.168.178.99 lookup rt1
32762: from all to 192.168.178.97 lookup rt2
32763: from 192.168.178.97 lookup rt2
32766: from all lookup main
32767: from all lookup default
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:
post-up ip r add default via 192.168.178.1 metric 100 dev eth0
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 lihat ip 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 dengan ip route show
:
default via 192.168.178.1 dev eth0 metric 100
default via 192.168.178.1 dev wlan1 metric 101
default via 192.168.178.1 dev wlan0 metric 102
192.168.178.0/24 dev wlan0 proto kernel scope link src 192.168.178.97
192.168.178.0/24 dev eth0 proto kernel scope link src 192.168.178.99
192.168.178.0/24 dev wlan1 proto kernel scope link src 192.168.178.98
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 selama eth0
terserah. Jika eth0
turun, lalu lintas keluar akan beralih ke wlan1
.
Dengan pengaturan ini kita dapat mengetik ping 8.8.8.8
di satu terminal dan ifdown eth0
di terminal lainnya. ping
harus tetap berfungsi karena karena ifdown eth0
akan menghapus rute default yang terkait eth0
, lalu lintas keluar akan beralih ke wlan1
.
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 untuk eth0
masih ada dan lalu lintas keluar gagal. Kita perlu sesuatu untuk memantau antarmuka kita dan mengeksekusi ifdown eth0
jika ada masalah dengan antarmuka (yaitu kegagalan NIC atau seseorang menarik steker).
Langkah terakhir : masuk ifplugd
. Itu adalah daemon yang menonton antarmuka dan mengeksekusi ifup/ifdown
jika Anda menarik steker atau jika ada masalah dengan koneksi wifi /etc/default/ifplugd
:
INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"
Anda sekarang dapat menarik steker eth0
, lalu lintas keluar akan beralih ke wlan1
dan jika Anda memasukkan kembali, lalu lintas keluar akan beralih kembali ke eth0
. 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.