一、写在前面的话
WSL 最烦人的就是网络问题,有时候非要和我说与 Windows 下地址不互通。比如运行 codex login、git clone 或者 curl 时卡死,但 Windows 明明能正常上网。捯饬了这么久,我个人的核心感受是:
- 理解原理:WSL 是一个虚拟 Linux 环境,它虽然共享 Windows 的网络,但不会自动继承宿主机的系统代理设置。
- 提前配置:在装 WSL 的时候就配好与 Win 的互通脚本。
- 重启大法:出现莫名其妙的问题时选择重启电脑(哈哈真的有次用 WSL 魔法失效搞了俩小时,最后发现重启电脑就完了。AND记得关机前把魔法软件关掉,不然下次开机 WSL 容易出 bug)。
二、常见现象与快速定位
apt update长时间卡住或报错Temporary failure resolving:说明 DNS 未正确转发。curl https://google.com失败但ping baidu.com正常:多半是 WSL 里没有正确走代理,或者证书问题。- Windows 能访问公司内网,但 WSL 访问 10.x 网段失败:需要桥接虚拟网卡或添加静态路由。
出现问题时,第一步可执行以下命令快速定位:
1 | ip addr show eth0 # 确认 WSL 虚拟网卡地址 |
三、DNS 与代理配置
1. 锁定自定义 DNS
防止 WSL 每次启动重写配置,导致无法解析域名。
1 | sudo rm /etc/resolv.conf |
2. 自动获取宿主机 IP 并注入代理(强推)
在 WSL2 默认的 NAT 模式下,直接在 WSL 里设置 127.0.0.1:7890 通常是无效的!因为 127.0.0.1 指向的是 WSL 自己,而不是 Windows 宿主机。
正确做法是:去 /etc/resolv.conf 里提取 Windows 主机的 IP,然后把代理指向该 IP。
我们可以直接写一个脚本放入 ~/.bashrc,实现一键开启/关闭代理:
1 | cat <<'EOF' >> ~/.wsl-proxy.sh |
使配置立即生效:
1 | source ~/.bashrc |
提醒:你必须在 Windows 端的代理软件(如 Clash、NekoRay 等)中,开启 “允许局域网连接 (Allow LAN)” 功能,否则 Windows 的防火墙会拦截 WSL 的代理请求。
平时使用时:
- 输入
proxy-on:开启代理,终端程序(如 Codex、Git)即可顺利出网。 - 输入
proxy-off:关闭代理。 - 测试代理是否成功:输入
curl google.com,如果有 HTML 网页代码返回,说明配置成功。
四、访问内网路由设置
当 Windows 能连通 10.x 或 172.x 内部办公网,但 WSL 无法访问时,说明路由没走宿主机网关。
1 | # Windows 端(PowerShell)查看网卡信息,找到宿主机内网 IP |
假设你查到的内网网关为 10.20.0.1,可以在 Windows 终端下给 WSL 打通路由:
1 | wsl.exe -d Ubuntu-22.04 sudo ip route add 10.0.0.0/8 via 10.20.0.1 dev eth0 |
注:可将命令写入 PowerShell 启动脚本或 WSL ~/.wslconfig 指向的 prelaunchCommand。
附录:终端文本编辑器 (nano) 基础
哈哈哈这纯纯写给自己看的,脑子里记不了一点知识
如果在排查中你需要手动修改 ~/.bashrc(比如输入 nano ~/.bashrc),可以记住以下保存退出的快捷键:
- 保存文件:按
Ctrl + O(字母 O),底部会提示你要写入的文件名,直接按回车键 (Enter) 确认。 - 退出编辑:按
Ctrl + X。 - 使修改生效:退出后务必执行
source ~/.bashrc。