
OK, also führe ich bei einer Standardinstallation von Ubuntu 14.04.2 die folgenden Befehle aus:
sudo bash -c 'echo 1 > "/proc/sys/net/ipv4/ip_forward"'
sudo iptables -t nat -A PREROUTING -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230
sudo tcpdump -i wlan0 icmp and icmp[icmptype]=icmp-echo -n
Dann pinge ich 192.168.100.1
von einem anderen Terminal aus. Aber ich sehe tcpdump
Folgendes:
01:46:37.536354 IP 10.196.100.76 > 192.168.100.1: ICMP echo request, id 6635, seq 1, length 64
Wenn ich jedoch die NAT-Tabelle leere und ausführedieser Befehlstattdessen:
sudo iptables -t nat -A OUTPUT -d 192.168.100.1 -j DNAT --to-destination 10.196.106.230
Dann tcpdump
ergibt sich folgendes:
01:46:53.168639 IP 10.196.100.76 > 10.196.106.230: ICMP echo request, id 6638, seq 1, length 64
(Der Ping ist erfolgreich und von der anderen Maschine kommt ein Pong zurück.)
Von demzahlreiche Tutorialsonline würde ich erwarten, dass die Ziel-IP auch in der PREROUTING-Kette geändert wird, oder? Oder übersehe ich etwas?
Antwort1
Die PREROUTING-Kette wird bei Paketen, die von lokalen Prozessen generiert werden, nicht ausgewertet.
Ihre erste Regel funktioniert bei Paketen, die über eine Netzwerkschnittstelle eingehen (versuchen Sie, von einem anderen Computer aus einen Ping auszuführen).
Vielleicht kann dieses Bild verdeutlichen, wie der Paketfluss untersucht wird: