WSL2 + Docker 环境无法通过局域网IP访问容器服务及Burp抓包问题
一、问题现象
- 环境背景:DVWA 靶场容器运行在 WSL2(Ubuntu) 内部的 Docker 中
- 预期目标:
- 在 Windows 宿主机上通过 局域网 IP(
192.168.92.XXX:8080)正常访问靶场。 - 配置 Burp Suite(监听端口
8081)能够正常拦截来自 Edge 浏览器的 HTTP/HTTPS 流量。
- 在 Windows 宿主机上通过 局域网 IP(
- 实际表现:
- 浏览器通过
http://127.0.0.1:8080访问正常。 - 浏览器通过
http://192.168.92.XXX:8080访问返回 “连接被拒绝”。 - Burp Suite 的
Proxy -> HTTP history中无法捕获到任何流向127.0.0.1:8080的请求。
- 浏览器通过
二、问题定位与分析
2.1 网络监听绑定状态不一致(核心原因)
在 WSL2 内部 执行端口监听检查:
ss -tlnp | grep 8080
输出:
LISTEN 0 4096 0.0.0.0:8080 0.0.0.0:*
LISTEN 0 4096 [::]:8080 [::]:*
- 结论:Docker 容器已正确绑定 WSL2 虚拟机的所有网卡(
0.0.0.0),容器内部服务运行正常。
在 Windows 宿主机(PowerShell/CMD) 执行端口监听检查:
netstat -ano | findstr :8080
输出:
TCP 127.0.0.1:8080 0.0.0.0:0 LISTENING 27712
TCP [::1]:8080 [::]:0 LISTENING 27712
- 结论:Windows 端仅监听了
127.0.0.1(环回地址),未绑定0.0.0.0。 - 根因分析:微软 WSL2 的架构中,
wslhost.exe进程负责将 WSL2 虚拟机内的端口代理转发到 Windows 宿主机。默认情况下,该代理仅映射至宿主机的127.0.0.1,不映射至局域网网卡(192.168.x.x)。因此,外部或局域网 IP 的请求无法被路由进 WSL2 内部。
2.2 浏览器硬编码代理绕过机制
Chromium 内核浏览器(Edge/Chrome)对 127.0.0.1 和 localhost 存在硬编码白名单,强制绕过系统代理。即便系统代理指向 Burp(127.0.0.1:8081),流量也不会进入 Burp,导致抓包失败。
2.3 Windows 防火墙拦截(次要因素)
即使 WSL2 开启转发,Windows Defender 防火墙默认禁止外部 IP(非 127.0.0.1)入站连接至 8080 端口,必须放行策略。
三、解决方案
基于 WSL2 的网络特性,我们不修改 Docker 启动命令,而是通过在 Windows 宿主层 配置 端口转发(Portproxy) 与 防火墙放行策略,将宿主机局域网 IP(0.0.0.0)的流量精准转发至 WSL2 虚拟机的真实 IP。
3.1 获取 WSL2 虚拟机的真实 IP 地址
在 Windows CMD / PowerShell 中执行:
wsl hostname -I
示例输出:172.31.76.23
记下该 IP,此为后续转发的目标地址(本次环境中为
172.31.76.23)。
3.2 添加 Windows 端口转发规则(管理员权限)
以管理员身份打开 CMD,执行:
netsh interface portproxy add v4tov4 listenaddress=0.0.0.0 listenport=8080 connectaddress=172.31.76.23 connectport=8080
参数释义:
listenaddress=0.0.0.0:监听 Windows 所有网卡(包括127.0.0.1和192.168.92.XXX)。connectaddress=172.31.76.23:将流量转发至 WSL2 虚拟机的实际 IP。
3.3 配置 Windows 防火墙放行入站端口(管理员权限)
继续在管理员 CMD 执行:
netsh advfirewall firewall add rule name="WSL2_DVWA_8080" dir=in action=allow protocol=TCP localport=8080 profile=any
该命令确保无论当前网络类型(域/专用/公用),入站 TCP 8080 端口的流量均被放行。
3.4 验证转发配置是否生效
执行以下命令查看已配置的转发规则:
netsh interface portproxy show all
若输出中包含 0.0.0.0:8080 -> 172.31.76.23:8080,则配置成功。
四、验证结果
- 连通性验证:打开 Edge 浏览器访问
http://192.168.92.XXX:8080,DVWA 登录页面正常加载。 - Burp 抓包验证:配置系统代理为
127.0.0.1:8081,刷新页面。Burp SuiteProxy -> HTTP history中成功捕获到 192.168.92.XXX 的请求条目,抓包功能恢复正常。 - 端口监听状态:再次执行
netstat -ano | findstr :8080,可见新增TCP 0.0.0.0:8080监听项,表明 Windows 已具备对外提供服务的能力。
五、附录:临时清理及安全建议
如果靶场使用完毕,建议及时清理环境以防内网非授权访问:
- 删除端口转发规则(管理员 CMD):
netsh interface portproxy delete v4tov4 listenport=8080 listenaddress=0.0.0.0
- 删除防火墙规则(管理员 CMD):
netsh advfirewall firewall delete rule name="WSL2_DVWA_8080"
报告总结:本次故障系 WSL2 特殊的网络地址转换(NAT)机制导致 Windows 宿主机无法将局域网 IP 请求路由至 WSL2 内部,通过 netsh portproxy 建立 IP 层转发后问题彻底解决。
更多推荐

所有评论(0)