问题现象
在 VS Code 配合 WSL 进行开发时,经常会遇到两个棘手的问题:
- Git clone 失败:提示
Failed to connect或无法访问境外仓库。 - Copilot/Codex 卡死:状态栏一直显示 "Thinking…",无法生成代码补全。
这些问题通常不是软件本身的 bug,而是 WSL 的网络环境配置导致的。WSL 的网络结构比较特殊,理解这一点是解决问题的关键。
核心原理
WSL 的网络涉及三层架构,很多配置错误都源于对这一点的误解:
| 层级 | 归属 | 特点 |
|---|---|---|
| Windows 主机 | VS Code 本体、代理软件运行处 | 使用主机物理网络出口 |
| WSL Linux | Git、curl、Copilot 后台进程 | 127.0.0.1 指向 WSL 自身,而非 Windows |
| Remote WSL 扩展 | VS Code 与 WSL 的桥梁 | 需同时协调两端网络配置 |
关键点:WSL 中的 127.0.0.1 不等于 Windows 的 127.0.0.1。当 WSL 需要访问 GitHub 或 Copilot 等境外服务时,必须通过 Windows 主机的网络出口(通常是代理端口)转发。
你可以通过以下命令查看当前 WSL 识别的主机网关地址:
cat /etc/resolv.conf | grep nameserver
示例输出:
nameserver 172.25.176.1
注意这个 IP 每次重启电脑可能会变,所以硬编码 IP 的配置很容易失效。
解决 Git Clone 不稳定
1. 清理残留配置
首先确保没有错误的代理设置干扰直连尝试:
git config --global --unset http.proxy
git config --global --unset https.proxy
unset HTTP_PROXY HTTPS_PROXY http_proxy https_proxy ALL_PROXY all_proxy
2. 测试连通性
在 WSL 中直接测试能否访问 GitHub:
curl -I https://github.com
如果返回 HTTP/2 200,说明基础网络已通。如果不行,则需要配置代理。
3. 配置动态代理
如果你使用了代理工具(如 Clash, Surge 等),需要在 WSL 中写入主机的出口 IP。由于 IP 会变,建议结合脚本使用(见下文)。临时配置如下:
export HTTP_PROXY="http://172.25.176.1:7890"
export HTTPS_PROXY="http://172.25.176.1:7890"
git config --global http.proxy
git config --global https.proxy

