Networking con più schede di rete


16

Ho un server Ubuntu 12.04 con 4 adattatori di rete. Devo usare ciascuna scheda di rete per una funzione separata. Ecco una descrizione della mia configurazione:

etho = 10.234.0.2 netmask = 255.255.255.252 gw = 10.234.0.1 This is on vlan 234
eth1 = 10.235.0.2 netmask = 255.255.255.252 gw = 10.235.0.1 This is on vlan 235
eth2 = 10.236.0.2 netmask = 255.255.255.252 gw = 10.236.0.1 This is on vlan 236
eth3 = 10.237.0.2 netmask = 255.255.255.252 gw = 10.237.0.1 This is on vlan 237

Devo essere in grado di indirizzare il traffico da e verso i singoli indirizzi IP per servizi Web separati. ovvero 10.235.0.2 è un sito Web, 10.236.0.2 è un sito diverso e 10.237.0.2 è un terzo sito. Il 1o IP è per la gestione del server.

Penso che il problema sia un problema di routing, ma sono abbastanza nuovo per Linux da non avere una piena comprensione dei dettagli delle funzionalità di routing.

Ecco cosa c'è nel mio /etc/network/interfacesfile:

auto lo
iface lo inet loopback

# WWW Management
auto eth0
iface eth0 inet static
address 10.234.0.2
netmask 255.255.255.252
gateway 10.234.0.1
nameseervers 10.230.1.103, 10.230.70.70

# WWW
auto eth1
iface eth1 inet static
address 10.235.0.2
netmask 255.255.255.252
gateway 10.235.0.1

# WTB
#auto eth2
#iface eth2 inet static
#address 10.236.0.2
#netmask 255.255.255.252
#gateway 10.236.0.1

# Moodle
#auto eth3
#iface eth3 inet static
#address 10.237.0.2
#netmask 255.255.255.252
#gateway 10.237.0.1

Ho disabilitato le ultime due reti solo per facilitare la confusione.

Grazie in anticipo per tutto l'aiuto, i commenti e i suggerimenti.

Risposte:


15

Dopo aver eseguito una normale configurazione di solo eth0, sono tornato indietro e ho aggiunto config per eth1. Con solo eth0 up, la tabella di route era:

# 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

Ma una volta ho sollevato eth1, l'ordine delle istruzioni di route predefinite ha determinato quale interfaccia è stata sempre utilizzata. Come mostrato sotto, capita di scegliere la rotta eth1 verso il 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

una sola istruzione gateway

Il primo problema può essere la route predefinita extra "via 192.168.1.65". Appare lì se la definizione di eth1 in / etc / network / interfaces ha un'istruzione "gateway 192.168.1.65". Quindi rimuovere qualsiasi istruzione gateway aggiuntiva e rimbalzare l'interfaccia:

# 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

imposta una nuova tabella di routing

Creare una nuova tabella di routing separata contenente una route predefinita appropriata per tutto il traffico proveniente da eth1. Il numero di tabella qui non è importante; 101 non è semplicemente la tabella di routing principale. Fallo con un comando 'post-up' sulla configurazione di eth1 in / etc / network / interfaces. Aggiungi un solo post-up su eth1; Non aggiungerlo a nessuna delle interfacce secondarie eth1 :.

post-up ip route add default via 192.168.1.65 dev eth1 table 101

Bounce eth1. La tabella di routing principale è invariata e la tabella 101 conterrà la route predefinita via 192.168.1.65 se eth1 è attivo.

# 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

nuova regola di routing

Aggiungere una regola di routing per utilizzare la tabella 101 per selezionare una route predefinita per i pacchetti che dovrebbero uscire 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

Aggiungi la regola anche al /etc/network/interfacesfile:

post-up ip rule add from 192.168.1.64/27 lookup 101

Ora assicurati di aggiungere cleanup per rimuovere il percorso e la regola quando l'interfaccia non funziona:

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 for ubuntu 16.04+] Come indicato qui e dal test che ho fatto da questo aiuto, ip route2 ha cambiato la sua struttura di comandi. Per fare il lavoro dovrai adattarti un po 'per fare nell'ordine in cui i man ip punti .

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

Oppure finirai dopo un comando ifdown - ifup con un messaggio di errore @ifdown command (messaggio standard per dire che le periferiche non sono configurate correttamente) e @ifup l'assenza di una route nella tabella 101.


Bello, ma non mi piace usare rc.local .. alla ricerca di un passaggio finale più elegante ..
drAlberT

È stato modificato suppongo :) ..
drAlberT

Esiste effettivamente un file / etc / interfaces o è un errore di battitura?
user100464,

@ /etc/network/interfaces
user100464

C'è un riferimento al primo nella risposta. Non posso modificarlo.
user100464,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.