我在 Windows 机器上工作,并使用 netsh portproxy 将流量从端口 4000 转发到在端口 4002 上运行的应用程序。当我尝试从本地主机或 LAN 访问我的应用程序时,它工作正常,如下所示
127.0.0.1:4000
192.168.1.21:4000
但是,当我在 LAN 外部进行连接时,端口转发似乎不起作用,应用程序看不到目标请求my.public.ip.address:4000
。这种行为的原因是什么?请注意,当我删除端口代理并在端口 4000 上运行我的应用程序时,目标请求可以my.public.ip.address:4000
毫无问题地到达我的应用程序。这是我当前的 netsh portproxy 配置:
netsh interface portproxy show all
Listen on ipv4: Connect to ipv4:
Address Port Address Port
--------------- ---------- --------------- ----------
0.0.0.0 4000 127.0.0.1 4002
答案1
显然它无法工作是因为 Windows 防火墙,这个帮我解决了这个问题netsh advfirewall firewall add rule name="Open Port 4000" dir=in action=allow protocol=TCP localport=4000
答案2
对于 WSL2 端口转发,您需要编写一个基本上netsh interface portproxy add v4tov4 listenport=$port listenaddress=$addr connectport=$port connectaddress=$remoteport
使用正确参数调用的小脚本。
看: