Ich habe einen Router, auf dem ich ein Linux-System installiert habe.
Ich möchte, dass mein Router NAT-Hairpinning unterstützt
Gibt es eine solche Funktion im Linux-Kernel? Wenn ja, wie kann ich sie aktivieren? Gibt es einen Patch, um sie auf meinen Kernel anzuwenden und Hairpinning zu unterstützen?
Erklärung zum Hairpinning aus Wikipedia:
Let us consider a private network with the following:
Gateway address: 192.168.0.1
Host 1: 192.168.0.5
Host 2: 192.168.0.7
The gateway has an external IP : 192.0.2.1
Host 1 runs a P2P application P1 on its port 12345 which is externally mapped to 4444.
Host 2 runs a P2P application P2 on its port 12345 which is externally mapped to 5555.
If the NAT device supports hairpinning, then P1 application can connect to the P2 application using the external endpoint 192.0.2.1:5555.
If not, the communication will not work.
Antwort1
Dies funktioniert iptables
problemlos mit einem "neuen" Kernel (alles seit2.4, das älter als 10 Jahre ist).
Der Trick besteht darin, ein „Reverse-NATTing“ durchzuführen: Ordnen Sie die IP-Adresse jedes Hosts in Ihrem lokalen Netz, der auf die beiden NAT-Server zugreift, der öffentlichen IP Ihres Gateways zu.
Etwa wie folgt (das istnurdass NATting regiert, keine Firewall):
iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.0.0/24 -d 192.168.0.5 --dport 4444 -j DNAT --to-destination :12345
iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp -s 192.168.0.0/24 --dport 12345 -j SNAT --to-source 192.10.2.1
iptables -t nat -A PREROUTING -p tcp -m tcp -s 192.168.0.0/24 -d 192.168.0.7 --dport 5555 -j DNAT --to-destination :12345
iptables -t nat -A POSTROUTING -o eth1 -p tcp -m tcp -s 192.168.0.0/24 --dport 12345 -j SNAT --to-source 192.10.2.1
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.1 --dport 4444 -j DNAT --to-destination 192.168.0.5:12345
iptables -t nat -A PREROUTING -p tcp -m tcp -d 192.168.0.1 --dport 5555 -j DNAT --to-destination 192.168.0.7:12345
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 192.168.0.1
Wenn Sie mit der geheimnisvollen Kunst des Schreibens von Firewall-Regeln nicht vertraut sind, empfehle ich die Verwendung eines GUI-Frontends wieAbonnieren.