把 Windows 主机的端口转发到 WSL 里的服务
23

把 Windows 主机的端口转发到 WSL 里的服务上。

如何有效设置 Windows 到 WSL 的端口转发

记住,所有这些操蛋的命令都得在 管理员权限的命令提示符 (CMD) 下运行,否则你连屁都改不了。

步骤 1:找出你 WSL 的“内网”IP 地址

你得知道你 WSL 虚拟机现在用的是哪个 IP 地址。在你的 WSL 终端里输入:

ip a

找到 eth0 网卡下面的 inet 地址,那个就是你 WSL 的 IP。通常看起来像 172.xx.xx.xx。 比如你之前给老子的就是 172.21.111.236。记下这个 IP,后面要用。

步骤 2:删除所有可能碍事的旧转发规则(可选但推荐)

如果之前设置过一些可能冲突的转发规则,或者你不确定有没有,最好先给老子清干净。

如果你知道具体要删除的规则: 比如你要删除把 Windows 192.168.2.4:2343 转发到 127.0.0.1:2343 的规则,就像这样:

netsh interface portproxy delete v4tov4 listenport=2343 listenaddress=192.168.2.4

如果你想彻底清空所有旧的转发规则(慎用,会清空所有转发):

netsh interface portproxy reset

步骤 3:添加你想要的转发规则

现在,把 Windows 上指定端口的流量转发到你 WSL 里的目标 IP 和端口。

命令格式:

netsh interface portproxy add v4tov4 listenport=<Windows_监听端口> listenaddress=<Windows_监听IP> connectport=<WSL_目标端口> connectaddress=<WSL_IP地址>

解释一下这几个参数:

  • <Windows_监听端口>:你希望在 Windows 主机上暴露出来的端口。比如 2343
  • <Windows_监听IP>:Windows 主机监听的 IP 地址。
    • 0.0.0.0:表示监听所有可用的网络接口。推荐使用这个,这样从外部网络也能访问。
    • 127.0.0.1:只监听本地环回地址,只能在 Windows 本机上访问。
    • 你自己的某个具体 IP:比如 192.168.2.4,只监听这个 IP 地址。
  • <WSL_目标端口>:WSL 里面你服务实际监听的端口。通常和 Windows 监听端口一样,比如 2343
  • <WSL_IP地址>:你 WSL 的 IP 地址,就是你在步骤 1 查到的那个,比如 172.21.111.236

举个例子: 把 Windows 所有接口的 2343 端口流量转发到 WSL 的 172.21.111.236:2343

netsh interface portproxy add v4tov4 listenport=2343 listenaddress=0.0.0.0 connectport=2343 connectaddress=172.21.111.236

步骤 4:验证你的转发规则是否生效

添加完规则后,赶紧检查一下,看看有没有生效。

netsh interface portproxy show all

你应该能在输出里看到你刚刚添加的那条规则。

转发规则的持久性(这是重点!)

你用 netsh interface portproxy 设置的这些规则,他妈的都是 持久化 的。也就是说,你的 Windows 电脑就算重启一百遍,这些规则也还在,不需要你再重新设置。

搞定这些,你小子就能把 Windows 上的流量好好地转发到 WSL 里去了。别忘了在 WSL 里面把你的服务启动起来,并且监听在正确的端口上!

把 Windows 主机的端口转发到 WSL 里的服务
https://www.quietphoenix.top/archives/wei-ming-ming-wen-zhang-VzTNJ91A
作者
QuietPhoenix
发布于
更新于
许可