В Windows мне нужно сопоставить весь трафик одного IP-адреса (например, 10.255.255.255) с другим (например, 127.0.0.1).
Я наткнулся на netsh interface portproxy и попробовал его.
netsh interface portproxy add v4tov4 listenaddress=10.255.255.255 listenport=7073 connectaddress=127.0.0.1 connectport=7071
Цель состоит в том, что если пользователь отправляет какой-либо пакет, 10.255.255.255:7073
это как если бы он отправлял пакеты127.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
Я также добавил правило брандмауэра для порта 7073.
netsh advfirewall firewall add rule name="7073 port" protocol=TCP dir=in localport=7073 action=allow
Это в Windows 11.
Результаты netstat -na|find "7073" пусты, а тот же результат для 7071 выглядит следующим образом:
netstat -na|find "7071"
TCP 0.0.0.0:7071 0.0.0.0:0 LISTENING
В моем приложении я сначала попытался из postman отправить запрос на 10.255.255.255:7073 и у меня возник таймаут. Тот же запрос можно успешно отправить на 127.0.0.1:7071.
Если я подключаюсь к 7073 через telnet, он не может к нему подключиться.
telnet 10.255.255.255 7073
Connecting To 10.255.255.255...Could not open connection to the host, on port 7073: Connect failed
Я проверил, IP Helper
служба также работает.
Мое намерение заключается в том, что если пользователи уже могли отправлять запросы на 127.0.0.1:7071
, после переадресации портов они могут отправлять запросы на 10.255.255.255:7073
и видеть то же самое поведение. Мое приложение на самом деле отправляет HTTP-запросы.
Обратите внимание, что НИКАКАЯ служба на самом деле не прослушивает 7073
входящий трафик. Но в этом и суть, я хочу, чтобы любой, кто отправляет что-либо на этот порт (даже если его никто не прослушивает), отправлял трафик 7071
(на который кто-то прослушивает).
Правилен ли мой подход относительно сопоставления IP:порта с другим для пересылки всего сетевого трафика туда и обратно с исходного IP на целевой IP?
Если да, то что здесь может быть не так?
Спасибо
решение1
Проблема с netsh
командой возникает при указании параметров listenaddress
и connectaddress
, которые предназначены для
один конкретный IP-адрес, а не для диапазона адресов.
Таким образом, использованный вами синтаксис 10.255.255.255
указывает именно этот IP-адрес, а не весь диапазон 10.*
адресов.
Документация для Команды netsh interface portproxy - добавьте v4tov4 говорит следующее:
connectaddress
УказываетIPv4-адреск которому подключаться. Допустимые значения: IP-адрес, NetBIOS-имя компьютера или DNS-имя компьютера. Если адрес не указан, по умолчанию используется локальный компьютер.
прослушиватьадрес
УказываетIPv4-адресдля которого нужно прослушивать. Допустимые значения: IP-адрес, NetBIOS-имя компьютера или DNS-имя компьютера. Если адрес не указан, по умолчанию используется локальный компьютер.
Если вы хотите заново создать portproxy, вам сначала нужно будет удалить тот, который вы создали с помощью удалить v4tov4.