将wsl里启动的服务暴露给局域网访问

一、基础网络配置

0x01 获取wsl实例地址

powershell里执行
wsl hostname -I
或者在wsl里执行
hostname -I

获得类似172.30.186.128 172.17.0.1的输出,取第一个ip即可

0x02 配置windows端口转发

netsh interface portproxy add v4tov4 listenport=【宿主机端口】 listenaddress=0.0.0.0 connectport=【WSL服务端口】 connectaddress=【WSL_IP】

# 示例
netsh interface portproxy add v4tov4 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=172.30.186.128

0x03 宿主机防火墙放行

netsh advfirewall firewall add rule name="WSL Port" dir=in action=allow protocol=TCP localport=【宿主机端口】remoteip=【放行的IP】


二、服务配置要求

0x01、服务绑定地址

确保wsl内服务监听0.0.0.0,而非127.0.0.1,例如

python3 -m http.server 8080 --bind 0.0.0.0

0x02、验证服务连通性

在宿主机执行

Test-NetConnection -ComputerName 127.0.0.1 -Port 【宿主机端口,示例是8080】


三、进阶配置方案

0x01、win11专用方案(22H2+)

powershell里执行

wsl --shutdown
wsl --export <发行版名称> backup.tar
wsl --import <新发行版名称> <安装路径> backup.tar --version 2 --network bridged

0x02、IP动态更新方案

编辑wsl里的/etc/wsl.conf,如果没有则新建,添加

[boot]
command = "sudo service ssh start && echo 【WSL密码】 | sudo -S /path/to/update-iptables.sh"p配合脚本自动更新端口转发规则


四、访问验证

0x01、局域网设备访问地址

http://【Windows主机IP】:【宿主机端口】

通过ipconfig获取windows主机的局域网IP。

0x02、管理端口转发规则

# 查看所有规则
netsh interface portproxy show all

# 删除指定规则
netsh interface portproxy delete v4tov4 listenport=端口号 listenaddress=0.0.0.0


注意:wsl实例的ip在重启后会变化,建议配合自动化脚本更新转发规则。