Wie kann ich die Quell-IP eines eingehenden Pakets ändern, bevor es den laufenden Dienst erreicht?
Ich habe zwei Geräte, einen Manager und einen Server, die über VPN verbunden sind und zwischen denen NAT besteht.
Manager-Schnittstellen-IP: A Server-Schnittstellen-IP: B
Der Manager stellt über NAT IP Y eine Verbindung zum Server her und der Server sieht IP X, wenn der Manager eine Verbindung herstellt
Wie richte ich iptables auf dem Server so ein, dass ein Paket mit der Quell-IP X in eine IP geändert wird?
Ich weiß, dass dies bei einem gut konzipierten Netzwerk und Produkt kein Problem sein sollte, aber wir benötigen vorerst eine Problemumgehung, bis das Problem auf der Softwareseite behoben ist.
Bisher haben die folgenden iptables-Regeln nicht geholfen:
iptables -t nat -A POSTROUTING -s <X> -o eth0 -j SNAT --to <A>
Jede Hilfe ist willkommen.
Antwort1
NAT hängt von den Diensten ab, die "angefordert" werden voniptablesund bereitgestellt durch dieKontaktSubsystem. SNAT wird nicht verfügbar gemacht, bevor die Routing-Entscheidung getroffen wird, ist aber immer noch verfügbar, sobald das Paket für das Routing an den Host ausgewählt wurde: in der selten verwendetennat/EINGABEKette, wie dokumentiert in dermanpage:
SNAT
Dieses Ziel ist nur in der NAT-Tabelle gültig, in der
POSTROUTING
undINPUT
Ketten und benutzerdefinierte Ketten, die nur von diesen Ketten aufgerufen werden. [...]
Solange der Server den Datenverkehr empfängt (und ihn nicht weiterleitet), wird beim Empfang eines Pakets von der IP-Quelladresse <X> an die IP-Zieladresse <B> des Servers über die Schnittstelleeth0, es kann mit SNAT so geändert werden, dass es stattdessen als Quelladresse <A> erscheint (was die ursprüngliche IP-Quelladresse war, aber diese Information geht verloren), und zwar folgendermaßen:
iptables -t nat -A INPUT -s <X> -d <B> -i eth0 -j SNAT --to <A>
Oder mit einer einfacheren Version:
iptables -t nat -A INPUT -s <X> -j SNAT --to <A>
Sie könnten weitere Einschränkungen hinzufügen, wie -p tcp --dport XXXX
(XXXX für den tatsächlich erreichten Dienst), und das sollten Sie wahrscheinlich auch tun: Wenn Sie auf das unten beschriebene Problem stoßen, können Sie sich möglicherweise selbst den Zugriff auf das System über das VPN verwehren. Halten Sie eine Backup-Zugriffsmethode bereit oder führen Sie den Zugriff nicht remote aus, es sei denn, Sie sind sich sicher.
Die obige Regel reicht möglicherweise nicht aus, da sie das Routing beeinflusst. Wenn die IP-Adresse <A> nicht in einer bekannten Route zum Server liegt (dies würde nur passieren, wenn der Server keineStandardRoute). Obwohl das System niemals ein Paket (IP oder sogar ARP) an dieses Ziel zurücksendet (Antworten werden nicht SNATed), ist dennoch eine Route dorthin erforderlich, damit der Routing-Stack, der nicht weiß, dass SNAT stattgefunden hat, eine korrekte Verarbeitung durchführen kann.
Wenn also dieiptablesWenn die obige Regel nicht ausreicht (wahrscheinlich, wenn der Server keine Standardroute hat), können Sie Folgendes hinzufügen:
ip route add <A>/32 dev eth0