Ich habe meine ursprüngliche Antwort gelöscht, weil ich nicht ganz sicher war, dass sie korrekt war. Ich hatte seitdem einige Zeit, ein kleines virtuelles Netzwerk von VMs einzurichten, um das betreffende Netzwerk zu simulieren. Die folgenden Firewall-Regeln haben bei mir funktioniert ( nur iptables-save
für die nat
Tabelle im Format ):
-A PREROUTING -d 89.179.245.232/32 -p tcp -m multiport --dports 22,25,80,443 -j DNAT --to-destination 192.168.2.10
-A POSTROUTING -s 192.168.2.0/24 -o ppp0 -j MASQUERADE
-A POSTROUTING -s 192.168.2.0/24 -d 192.168.2.10/32 -p tcp -m multiport --dports 22,25,80,443 -j MASQUERADE
Die erste POSTROUTING
Regel ist eine einfache Möglichkeit, die Internetverbindung mit dem LAN zu teilen. Der Vollständigkeit halber habe ich es dort gelassen.
Die PREROUTING
Regel und die zweite POSTROUTING
Regel bilden zusammen die entsprechenden NATs, so dass Verbindungen zum Server über die externe IP-Adresse hergestellt werden können, unabhängig davon, ob die Verbindungen von außerhalb oder von innerhalb des LANs stammen. Wenn Clients im LAN über die externe IP-Adresse eine Verbindung zum Server herstellen, erkennt der Server, dass die Verbindungen von der internen IP-Adresse des Routers (192.168.2.1) stammen.
Interessanterweise stellt sich heraus, dass es einige Variationen der zweiten POSTROUTING-Regel gibt, die ebenfalls funktionieren. Wenn das Ziel in geändert wird, -j SNAT --to-source 192.168.2.1
ist der Effekt (nicht überraschend) derselbe wie der folgende MASQUERADE
: Der Server erkennt, dass Verbindungen von lokalen LAN-Clients von der internen IP-Adresse des Routers stammen . Wenn das Ziel dagegen in geändert wird -j SNAT --to-source 89.179.245.232
, funktionieren die NATs weiterhin. Diesmal erkennt der Server jedoch, dass Verbindungen von lokalen LAN-Clients von der externen IP-Adresse des Routers stammen (89.179.245.232).
Beachten Sie schließlich, dass Ihr Original PREROUTING
/ Ihre DNAT
Regel mit -i ppp0
nicht funktioniert, da die Regel niemals mit Paketen von LAN-Clients übereinstimmt (da diese nicht über die ppp0
Schnittstelle in den Router gelangen ). Es wäre möglich, dies durch Hinzufügen einer zweiten PREROUTING
Regel nur für die internen LAN-Clients zu bewerkstelligen, sie wäre jedoch unelegant (IMO) und müsste weiterhin explizit auf die externe IP-Adresse verweisen.
Selbst nachdem ich eine "Haarnadel-NAT" -Lösung (oder "NAT-Loopback" - oder "NAT-Reflection" - oder wie auch immer man es nennt) ausführlich ausgearbeitet habe, glaube ich immer noch, dass eine Split-Horizon-DNS-Lösung - Bei externen Clients, die auf die externe IP aufgelöst werden, und bei internen Clients, die auf die interne IP aufgelöst werden, ist dies der ratsamere Weg. Warum? Weil mehr Menschen verstehen, wie DNS funktioniert, als wie NAT funktioniert, und ein großer Teil des Aufbaus guter Systeme darauf abzielt, Teile zu verwenden, die gewartet werden können. Es ist wahrscheinlicher, dass ein DNS-Setup verstanden und somit korrekt verwaltet wird als ein geheimes NAT-Setup (IMO natürlich).