Come posso impostare il mio box Linux come router per inoltrare pacchetti ip?


25

Sto facendo un esperimento di rete sull'inoltro di pacchetti ip, ma non so perché funzioni.

Ho una macchina linux con due interfacce di rete, eth0 ed eth1 entrambe con indirizzo IP statico (eth0: 192.168.100.1, eth1: 192.168.101.2).

Il mio obiettivo è semplice, voglio solo inoltrare i pacchetti ip da eth1 con destinazione nella sottorete 192.168.100.0/24 a eth0 e inoltrare i pacchetti ip da eth0 con destinazione nella sottorete 192.168.101.0/24 a eth1.

Ho attivato l'inoltro IP con:

sysctl -w net.ipv4.ip_forward=1

la mia tabella di routing è così:

# route -n
Kernel IP routing table
Destination     Gateway     Genmask        Flags Metric Ref   Use  Iface
192.168.100.0   0.0.0.0     255.255.255.0  U     0      0       0  eth0
192.168.101.0   0.0.0.0     255.255.255.0  U     0      0       0  eth1

Ma, quando provo a eseguire il ping da 192.168.100.25 a 192.168.101.47, non funziona.

Risposte:


23

Devi aggiungere una regola di inoltro usando il iptablescomando, qualcosa del genere:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

vedere man iptablesper maggiori dettagli o cercare articoli howto su Internet, ad esempio Come configurare un router NAT su un computer basato su Linux

Ecco Linux IP Masquerade HOWTO che discute l'argomento in dettaglio.

Dovresti anche assicurarti di non avere altre regole (ad esempio nella FORWARDcatena) che hanno la precedenza sulla ACCEPTregola sopra . Se ci sono, probabilmente li vuoi eliminare.


Non so perché, ma ancora non funziona. Ho aggiunto entrambi iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTe iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTai miei tavoli. E la mia politica INPUT, OUTPUT e FORWARD è tutto ACCEPT.
Yishu Fang il

Ci sono molte cose che possono essere configurate in modo errato. Ad esempio, l'IP dell'host deve essere specificato come "IP gateway" sugli host nella rete "interna", in modo che sappiano che se un IP non rientra nell'intervallo della loro rete "locale", i pacchetti devono essere inviati al tuo macchina gateway. Questo è simile alla solita configurazione in cui il router ADSL è registrato come gateway per gli host nella LAN
Sergey

Quando uso traceroutesul mio host, mostra che il pacchetto va al "router" (192.168.100.1), ma non va oltre.
Yishu Fang,

1
@UniMouS: Sembra che mi sia dimenticato della cosa di MASQUERADE: ho modificato la mia risposta e aggiunto nuovi collegamenti agli articoli.
Sergey,

2

Devi aggiungere un percorso a 192.168.100.25 e 192.168.101.47.

Se il server di inoltro dispone degli IP 192.168.100.1 e 192.168.101.1, aggiungere nel client 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

e nel client 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Funziona solo con l'inoltro abilitato, senza iptables).

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.