Comment puis-je configurer ma box Linux comme routeur pour transférer des paquets IP?

25

Je fais une expérience réseau sur le transfert de paquets IP, mais je ne sais pas pourquoi cela fonctionne.

J'ai une machine Linux avec deux interfaces réseau, eth0 et eth1 avec une adresse IP statique (eth0: 192.168.100.1, eth1: 192.168.101.2).

Mon objectif est simple, je veux simplement transférer des paquets ip de eth1 avec destination dans le sous-réseau 192.168.100.0/24 vers eth0, et transférer des paquets ip de eth0 avec destination dans le sous-réseau 192.168.101.0/24 vers eth1.

J'ai activé le transfert IP avec:

sysctl -w net.ipv4.ip_forward=1

ma table de routage est comme ceci:

# 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

Mais, lorsque j'essaie d'envoyer une requête ping de 192.168.100.25 à 192.168.101.47, cela ne fonctionne pas.

Yishu Fang
la source

Réponses:

23

Vous devez ajouter une règle de transfert à l' aide de la iptablescommande, quelque chose comme ceci:

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

voir man iptablespour plus de détails, ou rechercher des articles sur Internet, par exemple Comment configurer un routeur NAT sur un ordinateur Linux

Voici le Linux IP Masquerade HOWTO qui traite du sujet en détail.

Vous devez également vous assurer que vous n'avez pas d'autres règles (par exemple dans la FORWARDchaîne) qui remplacent la ACCEPTrègle ci-dessus . S'il y en a, vous voudrez probablement les supprimer.

Sergey
la source
Je ne sais pas pourquoi, mais ça ne marche toujours pas. J'ai ajouté les deux iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTet iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTà mes tables. Et ma politique INPUT, OUTPUT et FORWARD sont toutes ACCEPT.
Yishu Fang
Il y a beaucoup de choses qui peuvent être mal configurées. Par exemple, l'IP de votre hôte doit être spécifié comme "IP de passerelle" sur les hôtes du réseau "interne", afin qu'ils sachent que si une IP n'est pas dans la plage de leur réseau "local", les paquets doivent être envoyés à votre machine de passerelle. Ceci est similaire à la configuration habituelle où le routeur ADSL est enregistré en tant que passerelle pour les hôtes du LAN
Sergey
Lorsque j'utilise traceroutesur mon hôte, cela montre que le paquet va au "routeur" (192.168.100.1), mais il ne va pas plus loin.
Yishu Fang
1
@UniMouS: On dirait que j'ai oublié le truc MASQUERADE - j'ai édité ma réponse et ajouté de nouveaux liens vers des articles.
Sergey
3

Vous devez ajouter un itinéraire vers 192.168.100.25 et 192.168.101.47.

Si votre serveur de transfert possède les adresses IP 192.168.100.1 et 192.168.101.1, vous devez ajouter le client 192.168.100.25

ip route 192.168.101.0/24 via 192.1268.100.1

et dans le client 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Cela fonctionne avec seulement le transfert activé, pas d'iptables).

V. Campos
la source