GNU/Linux >> Linux Esercitazione >  >> Linux

È possibile avere più gateway predefiniti per le connessioni in uscita?

Risolto da solo. Sembra che ci siano pochissime informazioni sulle cose di rete che puoi fare con Linux, quindi ho deciso di documentare e spiegare la mia soluzione in dettaglio. Questa è la mia configurazione finale:

  • 3 NIC:eth0 (wire), wlan0 (wifi integrato, debole), wlan1 (adattatore wifi usb, segnale più forte di wlan0)
  • Tutti su una singola sottorete, ognuno con il proprio indirizzo IP.
  • eth0 deve essere utilizzato per impostazione predefinita sia per il traffico in entrata che per quello in uscita.
  • Se eth0 fallisce, dovrebbe essere usato wlan1.
  • Se wlan1 fallisce, dovrebbe essere usato wlan0.

Primo passo :Crea una nuova tabella di instradamento per ogni interfaccia in /etc/iproute2/rt_tables . Chiamiamole rt1, rt2 e rt3

#
# reserved values
#
255 local
254 main
253 default
0 unspec
#
# local
#
#1  inr.ruhep
1 rt1
2 rt2
3 rt3

Secondo passaggio :configurazione di rete in /etc/network/interfaces . Questa è la parte principale e cercherò di spiegare il più possibile:

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

Se digiti ip rule show dovresti vedere quanto segue:

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 

Questo ci dice che il traffico in entrata o in uscita dall'indirizzo IP "192.168.178.99" utilizzerà la tabella di instradamento rt1. Fin qui tutto bene. Ma il traffico generato localmente (ad esempio, vuoi eseguire il ping o ssh dalla macchina a un'altra destinazione) necessita di un trattamento speciale (vedi la citazione grande nella domanda).

Le prime quattro righe post-up in /etc/network/interfaces sono semplici e le spiegazioni possono essere trovate su Internet, la quinta e ultima riga post-up è quella che fa accadere la magia:

post-up ip r add default via 192.168.178.1 metric 100 dev eth0

Nota come non abbiamo specificato una tabella di instradamento per questa riga di post-up. Se non specifichi una tabella di instradamento, le informazioni verranno salvate nel main tabella di route che abbiamo visto in ip rule show . Questa riga post-up inserisce una route predefinita nella tabella di route "principale" utilizzata per il traffico generato localmente che non è una risposta al traffico in entrata. (Ad esempio un MTA sul tuo server che tenta di inviare un'e-mail.)

Le tre interfacce inseriscono tutte una route predefinita nella tabella di route principale, anche se con metriche diverse. Diamo un'occhiata al main tabella di instradamento con 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

Possiamo vedere che la tabella di instradamento principale ha tre instradamenti predefiniti, anche se con metriche diverse. La priorità più alta è eth0, quindi wlan1 e quindi wlan0 perché i numeri di metrica più bassi indicano una priorità più alta. Dal eth0 ha la metrica più bassa questo è il percorso predefinito che verrà utilizzato fino a eth0 è su. Se eth0 scende, il traffico in uscita passerà a wlan1 .

Con questa configurazione possiamo digitare ping 8.8.8.8 in un terminale e ifdown eth0 in un altro. ping dovrebbe ancora funzionare perché perché ifdown eth0 rimuoverà il percorso predefinito relativo a eth0 , il traffico in uscita passerà a wlan1 .

Le righe post-down assicurano che le relative tabelle di instradamento vengano eliminate dal database delle politiche di instradamento (ip rule show ) quando l'interfaccia non funziona, per mantenere tutto in ordine.

Il problema che rimane è che quando stacchi la spina da eth0 il percorso predefinito per eth0 è ancora presente e il traffico in uscita non riesce. Abbiamo bisogno di qualcosa per monitorare le nostre interfacce ed eseguire ifdown eth0 se c'è un problema con l'interfaccia (ad es. errore NIC o qualcuno che stacca la spina).

Ultimo passaggio :inserisci ifplugd . Questo è un demone che controlla le interfacce ed esegue ifup/ifdown se stacchi la spina o se c'è un problema con la connessione wifi /etc/default/ifplugd :

INTERFACES="eth0 wlan0 wlan1"
HOTPLUG_INTERFACES=""
ARGS="-q -f -u0 -d10 -w -I"
SUSPEND_ACTION="stop"

Ora puoi staccare la spina da eth0 , il traffico in uscita passerà a wlan1 e se reinserisci la spina, il traffico in uscita tornerà a eth0 . Il tuo server rimarrà online finché una delle tre interfacce funzionerà. Per connetterti al tuo server puoi utilizzare l'indirizzo IP di eth0 e, se fallisce, l'indirizzo IP di wlan1 o wlan0.


Linux fornisce una soluzione migliore rispetto alla tua soluzione alternativa con script:l'associazione del backup attivo.

In questo modo la tua macchina ne avrà solo una indirizzo ip (e un indirizzo mac) e cambia automaticamente e in modo trasparente le interfacce se un'interfaccia non è più disponibile. Nessuna interruzione di alcuna connessione TCP (né alla tua LAN interna né a Internet).

Sto usando questa configurazione per eseguire automaticamente il failover da eth0 a wlan0 sul mio laptop debian quando disconnetto il mio laptop dalla docking station.

Le mie /etc/network/interfaces:

# The primary network interface
allow-hotplug eth0
iface eth0 inet manual
        bond-master bond0
        bond-primary eth0

# The secondary network interface
allow-hotplug wlan0
iface wlan0 inet manual
        pre-up sleep 5
        wpa-conf /etc/wpa_supplicant.conf
        bond-master bond0
        bond-primary eth0

# The bonding interface
allow-hotplug bond0
iface bond0 inet dhcp
        bond-slaves eth0 wlan0
        bond-primary eth0
        bond-mode active-backup
        bond-miimon 10
        bond_downdelay 10
        bond_updelay 4000

Puoi facilmente estendere questa configurazione per includere più dispositivi WLAN. Impostazione del primary_reselect opzione a better (seleziona automaticamente il collegamento più veloce) dovrebbe essere d'aiuto.

Per maggiori informazioni vedere https://wiki.linuxfoundation.org/networking/bonding e https://wiki.debian.org/Bonding

E (ovviamente) la documentazione del kernel Linux su https://www.kernel.org/doc/Documentation/networking/bonding.txt


Linux
  1. Attendere il completamento del download di più file?

  2. Inserisci nella whitelist un IP in CSF per connessioni MySQL remote

  3. Separatore di campo predefinito per awk

  4. Come posso impostare un nick predefinito per le nuove connessioni irssi?

  5. È possibile avere una cronologia bash consapevole della directory

Come Grep per più stringhe, pattern o parole

Risolvere l'indirizzo Mac dall'indirizzo IP in Linux?

Wrapper TCP tranne l'opzione

Specifica dell'indirizzo IP per le connessioni in uscita su un host IP multiplo

Clusterssh alternativa per la gestione di più server SSH

È possibile per la VPN L2TP eseguire la configurazione automatica del percorso per il client durante la connessione?