WSL2 访问宿主机代理:获取正确 IP 的几种方式
在 WSL2 里配置代理,绕不开的问题是:WSL2 和 Windows 宿主机不共享网络栈,WSL2 的 IP 每次启动都可能变化,宿主机的 IP 同样如此。
常见的方案是解析 /etc/resolv.conf 里的 nameserver:
1 | |
这个方案在多数情况下能用,但不可靠——/etc/resolv.conf 里的 nameserver 可能是公网 DNS(比如 223.5.5.5),而不是 vEthernet 网关。遇到自定义 DNS 配置时会失效。
更可靠的方式
方式一:通过 wsl.exe 调用 Windows 命令
1 | |
wsl.exe hostname -I 返回的是 WSL 实例自身的 IP,对于访问宿主机代理来说,要取的是 vEthernet (WSL) 网卡的地址,这个命令返回的是 WSL 侧的地址,不是宿主机侧的,用它来指向代理可能方向反了。
方式二:通过 ipconfig.exe 精确获取 vEthernet 地址
1 | |
这个方案直接从 Windows 的 ipconfig 输出里提取 vEthernet (WSL) 网卡的 IPv4 地址,也就是宿主机在 WSL 虚拟网络里的实际 IP。结果稳定,不依赖 DNS 配置。
Windows 11 的新选项
Windows 11 22H2 以后,WSL2 支持 mirrored networking mode,直接在 %USERPROFILE%/.wslconfig 里加:
1 | |
开启后,WSL2 和宿主机共享同一个网络栈,localhost 直接通,不再需要动态获取 IP。代理配置直接用 127.0.0.1 即可。这是根本上解决问题的方式,如果 Windows 版本支持,优先考虑。
WSL2 访问宿主机代理:获取正确 IP 的几种方式
https://www.krli.org/2023/02/28/在WSL2中获取宿主机IP/