Server-Ersatz. Internet-Server emulieren

Server-Ersatz. Internet-Server emulieren

Ich habe zwei Netzwerke, aufeinanderfolgende Netzwerke, beide versteckt unter eigenem NAT 192.168.31.0/24-> 192.168.33.0/24-> Internet

Ich habe einen TCP-Server eingeschaltet 192.168.33.35und einen Client192.168.31.32

Ein Client sendet eine TCP-Anfrage an einen Server im Internet 66.66.66.66, beispielsweise unter . Ich möchte stattdessen das letzte Gateway, 192.168.33.1an das die Anfrage gesendet wird, 192.168.33.35und den Client austricksen.

Das Machbarste, was ich versucht habe, ist:

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

Der Server hat das Syn-Paket empfangen und geantwortet. Aber die Quell-IP der Serverantwort scheint 192.168.33.35nach dem Passieren des Gateways bestehen zu bleiben. Und das vom 192.168.31.1Gateway empfangene Paket geht verloren.

Es sieht so aus, als ob der SNAT-Teil nicht funktioniert.

Was kann ich tun, um den Server mit Standard-OpenWrt-Tools zu emulieren/vorzutäuschen?

Antwort1

Das ist, was passiert:

  1. Ihr 192.168.33.35Server sieht das SYN-Paket von 192.168.33.Z(er kennt das 192.168.31.0/24Netzwerk nicht und sieht die „WAN“-Adresse des 192.168.31.1Gateways, ich weiß nicht, was das Zist) und antwortet an diese Adresse.
  2. Laut der Routing-Tabelle gehört diese Adresse zum lokalen Netzwerk, sodass die Antwort an die MAC-Adresse von gerichtet ist 192.168.33.Z.
  3. Auch wenn die Antwort physisch durch die 192.168.33.1Maschine läuft, wird sie vom Gateway nicht beschädigt, da sie an die MAC-Adresse einer anderen Maschine gerichtet ist.
  4. 192.168.33.Zsieht die Antwort von 192.168.33.35. Es erwartet eine von 66.66.66.66und weiß nicht, was es tun soll.

Beachten Sie, dass es keine Rolle spielt, ob 192.168.33.ZNAT ausgeführt wird ( 192.168.31.1auf der LAN-Seite). Der Mechanismus des Versagens ist sehr ähnlich dem, bei demNAT-Loopback (Hairpin-NAT) ist nur teilweise eingerichtet.

Sie müssen Ihren 192.168.33.35Server veranlassen, Antworten an die MAC-Adresse Ihres 192.168.33.1Gateways zu senden.

  • Legen Sie entweder eine Routing-Regel für 192.168.33.Z(denken Sie daran: Ich weiß es nicht Z, Sie wissen es; ersetzen Sie die tatsächliche Nummer) oder sogar für das gesamte 192.168.33.0/24Netzwerk fest:

    # do this on the 192.168.33.35 machine
    route add -host 192.168.33.Z gw 192.168.33.1
    

    192.168.33.35Beachten Sie, dass dies die gesamte Kommunikation von nach beeinflusst 192.168.33.Z. In Fällen, in denen es 192.168.33.35so sein sollte, 192.168.33.35werden Pakete unnötigerweise weitergeleitet; es sollte jedoch nichts kaputt machen.

  • Oder lassen Sie das 192.168.33.1Gateway nicht nur DNAT, sondern auch SNAT ausführen. Diese Lösung ist im Grunde dieselbe wie die für NAT-Loopback in der bereits verlinkten Antwort:

    # do this on the 192.168.33.1 gateway
    # you already have this line
    iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35
    # this line is new
    iptables -t nat -I POSTROUTING -d 192.168.33.35 -j SNAT --to-source 192.168.33.1
    

Dieses Fragment trifft auf Ihre Situation zu:

Beachten Sie, dass die NAT-Tabelle iptablesnur für das erste Paket einer Verbindung verwendet wird. Spätere Pakete im Zusammenhang mit der Verbindung werden mithilfe der internen Zuordnungstabellen verarbeitet, die bei der Übersetzung des ersten Pakets erstellt wurden.

Das bedeutet, dass die zweite Zeile ( iptables … -j SNAT --to-source 66.66.66.66) irrelevant ist, wenn Sie eine Verbindung von einem Client aus initiieren. Spätere Pakete werden ordnungsgemäß SNAT- und DNAT-getestet, da dies beim ersten Paket der Fall war.


Ich denke, wenn Ihre erste Zeile

iptables -t nat -I PREROUTING -d 66.66.66.66 -j DNAT --to-destination 192.168.33.35

Wenn Sie auf das Gateway eingewirkt haben , würde es ohne zusätzliche Tricks 192.168.31.1das gewünschte Ergebnis für die anderen Clients erzielen .192.168.31.0/24


Diese zweite Zeile von dir

iptables -t nat -I POSTROUTING -s 192.168.33.35 -j SNAT --to-source 66.66.66.66

gilt, wenn Sie eine Verbindung herstellenaus 192.168.33.35. Internet-Server tun dies selten, daher benötigen Sie diese Regel möglicherweise gar nicht. Falls Sie sie benötigen, beachten Sie Folgendes:

  • die Regel funktioniert nur, wenn die Pakete durch das 192.168.33.1Gateway geleitet werden, auf das diese Regel wirkt. Um Ihre lokalen Computer zu erreichen und ihnen die Pakete zu präsentieren, 66.66.66.66müssen Sie daher die Routing-Tabelle auf dem 192.168.33.35Computer ähnlich wie oben beschrieben anpassen.
  • Sie können 66.66.66.66mit externen Hosts (außerhalb Ihres Netzwerks) nicht als kommunizieren, denn selbst wenn es Ihnen gelänge, sie als zu erreichen 66.66.66.66, würde ihre Antwort den echten erreichen 66.66.66.66und nicht Sie.

Antwort2

Habe es mit Routing gemacht. Leider ist es weniger flexibel, um auf den echten Server zuzugreifen, aber immerhin funktioniert es. So etwas wie das hier:

[email protected]# route add -host 66.66.66.66 gw 192.168.33.35 dev br-lan

und auf dem Server:

[email protected]# ip link add name s666 type dummy
[email protected]# ifconfig s666 66.66.66.66
[email protected]# ifconfig s666 up

verwandte Informationen