Ubuntu Linux: più schede di rete, stessa LAN ... Le risposte ARP escono sempre in una singola scheda di rete


16

Abbiamo il servizio Internet AT-T U-Verse, che ha un gateway DSL estremamente ossuto.

Abbiamo 5 IP (netmask 248), ma il gateway non è in grado di fare qualcosa di diverso da un singolo IP -> singolo mapping dell'indirizzo MAC.

Disponiamo di un unico firewall e reindirizziamo diverse combo IP / porta verso luoghi diversi all'interno di una DMZ.

La nostra soluzione finora è quella di avere una macchina virtuale VMWare sul firewall con 4 NIC aggiuntive, per ottenere gli altri 4 indirizzi IP ... comunque abbiamo un problema.

Il gateway sta fondamentalmente eseguendo un ping ARP per vedere se l'IP sta rispondendo sul MAC previsto. Con 4 schede NIC tutte sulla stessa LAN, Linux risponde alle richieste ARP per TUTTI gli IP utilizzando un'unica interfaccia. Non è quello che si aspetta il gateway, e sta facendo confusione con le altre 3 NIC. Il gateway si rifiuta di instradare il traffico in entrata per gli IP in cui i risultati del ping ARP non sono il MAC previsto.

Come possiamo ottenere le risposte ARP per l'IP di eth0 per uscire da eth0, l'IP di eth1 per uscire da eth1, ecc.?

MODIFICARE

La risposta di Christopher Cashell non funziona in questa situazione. Avevo grandi speranze di leggerlo, ma ... no.

MODIFICA 2

Risolto! Vedi la mia risposta qui sotto.


PS: nessun commento 'drop uverse' ... U-Verse è 18 Mbps, contro i 3 Mbps di tutto il resto o 10 Mbps via cavo inaffidabile
darron

@dblack: hai dimenticato di aggiungere la tua risposta :)
Mihai Limbăşan,

Il sito api.recaptcha.net è rimasto inattivo per un po '. La risposta è adesso.
darron,

Risposte:


13

La soluzione prescelta funziona, ma ci sono alternative che non implicano arptabili. (Christopher Cashell era sulla buona strada, in origine, ma era fuori di testa per un fumo.)

In breve, si desidera impostare questi parametri:

net.ipv4.conf.all.arp_ignore=1
net.ipv4.conf.all.arp_announce=2

Questi dovrebbero essere disponibili quando si esegue un kernel Linux moderno della serie 2.6. Controlla e assicurati che '/ proc / sys / net / ipv4 / conf / / arp_announce' e / proc / sys / net / ipv4 / conf / / arp_ignore 'esistano sul tuo sistema.

Il parametro 'arp_filter' funziona solo quando i tuoi vari indirizzi IP condividono un segmento LAN ma usano una sottorete IP diversa. Se condividono anche la sottorete IP, è necessario utilizzare 'arp_ignore' e 'arp_announce', come sopra.

(Credo che potrebbe essere necessario anche impostare 'arp_filter' su '0'.)


Che cosa è successo a arp_filter? Era una prima soluzione (2003?) Al problema ARP, ma non sembra funzionare come descritto, almeno su Centos 5. arp_ignore e arp_announce sembrano essere buoni.
pcapademic,

Questa soluzione, così com'è, sembra funzionare solo a livello di ARP. Senza impostazioni di instradamento aggiuntive, il firewall potrebbe comunque scegliere la scheda in uscita (e MAC) errata per il proprio traffico IP in uscita, ma riceverà (ancora) sempre il traffico IP in entrata sulla scheda giusta, portando a considerazioni sul percorso asimmetrico e rp_filter.
AB

8

Ok, ecco la soluzione. Innanzitutto, un riepilogo:

Ecco il mio piano di rete di base:

 eth0 10.10.10.2 netmask 255.255.255.248
 eth1 10.10.10.3 netmask 255.255.255.248
 eth2 10.10.10.4 netmask 255.255.255.248
 eth3 10.10.10.5 netmask 255.255.255.248

Tutte le interfacce si sovrappongono. Questo è tecnicamente sbagliato e la fonte di tutti i miei guai ... ma devo farlo a causa di questo stupido gateway residenziale.

Innanzitutto, le richieste di trasmissione ARP vanno a tutte queste. Poiché tutti e 4 gli IP sono indirizzi locali validi, tutte e 4 le interfacce proveranno a rispondere.

1) installa arptables . Aggiungi questo da qualche parte durante l'avvio ( /etc/rc.local qui):

arptables -F INPUT
arptables -A INPUT -i eth0 --destination-ip ! 10.10.10.2 -j DROP
arptables -A INPUT -i eth1 --destination-ip ! 10.10.10.3 -j DROP
arptables -A INPUT -i eth2 --destination-ip ! 10.10.10.4 -j DROP
arptables -A INPUT -i eth3 --destination-ip ! 10.10.10.5 -j DROP

Ciò impedirà alle trasmissioni di entrare nell'interfaccia sbagliata. Quindi, l'interfaccia corretta ora sarà l'unica risposta.

Questo da solo non è abbastanza. Il prossimo bit è un problema di tabella ARP. Il PC richiedente probabilmente ha già una voce nella tabella ARP, e quindi Linux utilizzerà l'interfaccia associata. Fino alla scadenza della voce della tabella ARP, tenterà di inviare risposte ARP utilizzando l'interfaccia di quella voce, non quella associata alla richiesta ARP.

L'opzione sysctl rp_filter sembra rifiutare i pacchetti di risposta ARP in uscita se si trovano nell'interfaccia sbagliata. Così...

2) Disabilita rp_filter .

Su Debian / Ubuntu, questo significa commentare le due righe di rp_filter in /etc/sysctl.d/10-network-security.conf .

Questa opzione è stata abilitata per un motivo ... vale a dire per aiutare a prevenire attacchi di spoofing su più interfacce. Ho letto che verifica che il pacchetto sia legale per l'interfaccia in cui entra o esce (scambiando MAC e IP e vedendo se continua a instradare sulla stessa interfaccia). Quindi, normalmente sarebbe una cattiva idea spegnerlo. Nel mio caso, tutte le interfacce sono sulla stessa rete ... quindi il controllo non ha alcuna importanza.

Se aggiungo un'altra interfaccia e ho bisogno della protezione da spoofing, forse posso creare alcune voci arptables / iptables per fare la stessa cosa.


5

Ciò ha a che fare con il modo in cui Linux gestisce IP e NIC. Fondamentalmente, tratta un indirizzo IP come se appartenesse alla scatola e non solo alla scheda di rete specifica. Il risultato è che puoi ottenere risposte ARP dagli indirizzi IP su interfacce che non ti aspetti.

La soluzione è un'opzione sysctl. Come ricordo, quello che stai cercando è:

net.ipv4.conf.default.arp_filter=1
net.ipv4.conf.all.arp_filter=1

Ciò risolverà il problema per te. Basta aggiungerli a /etc/sysctl.conf ed eseguire ' sysctl -p' (oppure eseguire ogni riga come argomento su ' sysctl -w'.

Ciò farà sì che Linux risponda solo alle richieste ARP sull'interfaccia a cui è effettivamente assegnato un indirizzo IP.


hmm ... purtroppo non sembra funzionare. L'ho incollato in sysctl.conf, ho eseguito sysctl, anche riavviato, nessuna modifica. Posso catalogare le opzioni in / proc e vedere che sono impostate, ma se eseguo il pull da un'altra casella, tutte le risposte provengono dallo stesso MAC. Le interfacce sono tutte sulla stessa rete (stessa trasmissione, ecc.) ...
darron,

1
Questa è la soluzione corretta se le interfacce si trovano sulla stessa rete, ma hanno indirizzi in sottoreti diverse. Lavoro confermato.
Alastair Irvine,


0

Riesci a colmare il gateway e fare in modo che il firewall gestisca gli IP?


per quanto ne capisco, no ... ma qualcuno, per favore, correggimi se sbaglio.
darron,
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.