Unter Windows muss ich den gesamten Datenverkehr einer IP-Adresse (z. B. 10.255.255.255) einer anderen (z. B. 127.0.0.1) zuordnen.
Ich bin auf die Netsh-Schnittstelle Portproxy gestoßen und habe es ausprobiert.
netsh interface portproxy add v4tov4 listenaddress=10.255.255.255 listenport=7073 connectaddress=127.0.0.1 connectport=7071
Das Ziel ist, wenn ein Benutzer ein Paket an sendet, 10.255.255.255:7073
ist es so, als ob er die Pakete an sendet127.0.0.1:7071
netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
10.255.255.255 7073 127.0.0.1 7071
Ich habe auch die Firewall-Regel für den Port 7073 hinzugefügt.
netsh advfirewall firewall add rule name="7073 port" protocol=TCP dir=in localport=7073 action=allow
Dies ist unter Windows 11.
Die Ergebnisse von netstat -na|find "7073" sind leer und das gleiche Ergebnis für 7071 lautet wie folgt
netstat -na|find "7071"
TCP 0.0.0.0:7071 0.0.0.0:0 LISTENING
In meiner Anwendung habe ich zuerst versucht, die Anfrage per Postman an 10.255.255.255:7073 zu senden, und es kam zu einem Timeout. Die gleiche Anfrage kann erfolgreich an 127.0.0.1:7071 gesendet werden.
Wenn ich per Telnet eine Verbindung zur 7073 herstelle, kann keine Verbindung hergestellt werden.
telnet 10.255.255.255 7073
Connecting To 10.255.255.255...Could not open connection to the host, on port 7073: Connect failed
Ich habe überprüft, IP Helper
ob der Dienst auch läuft.
Meine Absicht ist, dass Benutzer, die bereits Anfragen an senden konnten 127.0.0.1:7071
, nach der Portweiterleitung Anfragen an senden können 10.255.255.255:7073
und dasselbe Verhalten sehen. Meine Anwendung sendet tatsächlich HTTP-Anfragen.
Beachten Sie, dass KEIN Dienst tatsächlich den eingehenden Datenverkehr abhört 7073
. Aber darum geht es ja: Ich möchte, dass jeder, der etwas an diesen Port sendet (auch wenn niemand darauf lauscht), den Datenverkehr dorthin schickt 7071
(an den jemand darauf lauscht).
Ist mein Ansatz hinsichtlich der Zuordnung einer IP:Port zu einer anderen, um den gesamten Netzwerkverkehr hin und her von der Quell-IP zur Ziel-IP weiterzuleiten, richtig?
Wenn ja, was könnte hier falsch sein?
Danke
Antwort1
Das Problem mit dem netsh
Befehl besteht darin, die Parameter von listenaddress
und anzugeben connectaddress
, die für
eine bestimmte IP-Adresse, nicht für einen Adressbereich.
10.255.255.255
Die von Ihnen verwendete Syntax gibt daher genau diese IP-Adresse und nicht den gesamten Adressbereich an 10.*
.
Die Dokumentation für Netsh-Schnittstellen-Portproxy-Befehle – v4tov4 hinzufügen sagt dies:
Verbindungsadresse
Gibt dieIPv4-Adressemit dem eine Verbindung hergestellt werden soll. Gültige Werte sind IP-Adresse, NetBIOS-Name des Computers oder DNS-Name des Computers. Wenn keine Adresse angegeben ist, ist die Standardadresse der lokale Computer.
Listenadresse
Gibt dieIPv4-Adresseauf die gewartet werden soll. Gültige Werte sind IP-Adresse, NetBIOS-Name des Computers oder DNS-Name des Computers. Wenn keine Adresse angegeben ist, ist die Standardadresse der lokale Computer.
Wenn Sie den Portproxy neu erstellen möchten, müssen Sie zuerst den von Ihnen erstellten Portproxy löschen mit v4tov4 löschen.