Wie kann ich meine Linux-Box als Router einrichten, um IP-Pakete weiterzuleiten?

25

Ich mache ein Netzwerkexperiment über die Weiterleitung von IP-Paketen, aber ich weiß nicht, warum es funktioniert.

Ich habe einen Linux-Rechner mit zwei Netzwerkschnittstellen, eth0 und eth1, beide mit statischer IP-Adresse (eth0: 192.168.100.1, eth1: 192.168.101.2).

Mein Ziel ist einfach: Ich möchte nur IP-Pakete von eth1 mit dem Ziel im Subnetz 192.168.100.0/24 an eth0 und IP-Pakete von eth0 mit dem Ziel im Subnetz 192.168.101.0/24 an eth1 weiterleiten.

Ich habe die IP-Weiterleitung aktiviert mit:

sysctl -w net.ipv4.ip_forward=1

meine routing tabelle sieht so aus:

# 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

Aber wenn ich versuche, von 192.168.100.25 zu 192.168.101.47 zu pingen, funktioniert es nicht.

Yishu Fang
quelle

Antworten:

23

Sie müssen mit dem Befehl eine Weiterleitungsregeliptables wie folgt hinzufügen :

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

siehe man iptablesfür weitere Einzelheiten oder suchen Sie Internet howto Artikel, zum Beispiel wie ein NAT - Router auf einem Linux-basierten Computer einrichten

Hier ist das Linux IP Masquerade-HOWTO, in dem das Thema ausführlich behandelt wird.

Sie sollten auch sicherstellen, dass Sie keine anderen Regeln (z. B. in der FORWARDKette) haben, die die obige ACCEPTRegel überschreiben . Wenn ja, möchten Sie diese wahrscheinlich löschen.

Sergey
quelle
Ich weiß nicht warum, aber es funktioniert immer noch nicht. Ich habe beides iptables -A FORWARD -i eth0 -o eth1 -j ACCEPTund iptables -A FORWARD -i eth1 -o eth0 -j ACCEPTzu meinen Tabellen hinzugefügt . Und meine INPUT-, OUTPUT- und FORWARD-Richtlinien sind alle ACCEPT.
Yishu Fang
Es gibt viele Dinge, die falsch konfiguriert werden können. Beispielsweise sollte die IP Ihres Hosts als "Gateway-IP" auf den Hosts im "internen" Netzwerk angegeben werden, damit diese wissen, dass die Pakete an Ihre Hosts gesendet werden müssen, wenn sich eine IP nicht im Bereich ihres "lokalen" Netzwerks befindet Gateway-Maschine. Dies ähnelt dem üblichen Setup, bei dem der ADSL-Router als Gateway für Hosts im LAN registriert ist
Sergey,
Wenn ich tracerouteauf meinem Host verwende, wird angezeigt, dass das Paket an den "Router" (192.168.100.1) gesendet wird, aber nicht weiter.
Yishu Fang
1
@UniMouS: Scheint, dass ich MASQUERADE vergessen habe - ich habe meine Antwort bearbeitet und neue Links zu Artikeln hinzugefügt.
Sergey
2

Sie müssen eine Route zu 192.168.100.25 und 192.168.101.47 hinzufügen.

Wenn Ihr Weiterleitungsserver die IP-Adressen 192.168.100.1 und 192.168.101.1 hat, fügen Sie dies im Client 192.168.100.25 hinzu

ip route 192.168.101.0/24 via 192.1268.100.1

und im Client 192.168.101.47

ip route 192.168.100.0/24 via 192.168.101.1

(Dies funktioniert nur mit aktivierter Weiterleitung, keine Iptables).

V. Campos
quelle