Windows 下的 WSL2 终端如何正确配置代理网络?
#WSL2代理#Windows终端#环境变量
阅读需 6 分钟||
在 Windows 11 环境下使用 WSL2 进行开发时,终端内的网络配置常常困扰开发者。要正确配置代理,首先必须确认 WSL2 处于哪种网络模式。
1. 区分网络模式:NAT vs Mirrored
依据微软官方 WSL 网络文档:
- 默认 NAT 模式:WSL2 拥有一个独立的虚拟子网。此时
127.0.0.1代表 Linux 容器自身,不等于宿主机的localhost。直接使用http://127.0.0.1:7890通常无效。 - 镜像网络 (Mirrored Networking):从 Windows 11 (22H2) 开始引入。如果你的
.wslconfig配置了networkingMode=mirrored,WSL 将直接共享 Windows 的网络接口,此时你可以直接通过127.0.0.1访问宿主机的代理端口。
2. 默认 NAT 模式下的配置方法
如果处于默认的 NAT 模式,你需要获取宿主机在虚拟交换机上的 IP:
- 开启局域网共享:在代理客户端开启“允许局域网连接”。
- 确认防火墙限制:确保 Windows Defender 防火墙允许该代理软件通过 WSL 网卡(通常为
vEthernet (WSL))的入站请求。请勿在公共网络配置文件中放行,以防安全风险。 - 获取宿主机 IP:
在很多旧版教程中,常建议读取
/etc/resolv.conf的nameserver,但这并非在所有场景下都准确(特别是在使用自定义 DNS 解析器时)。 更严谨的做法是编写一个 Bash 函数动态解析宿主机网关 IP。 注意:提取出的网关 IP 并不一定等同于 Windows 宿主机的真实代理监听地址,且可能受到 Windows 内部虚拟交换机配置的影响。因此在设置前,务必加入连通性检查步骤。编辑~/.bashrc或~/.zshrc:
# 定义动态设置代理的函数
function setproxy() {
# 提取宿主机虚拟网卡网关IP
local host_ip=$(ip route show default | awk '{print $3}')
local proxy_port="7890" # 请根据实际情况修改
export http_proxy="http://${host_ip}:${proxy_port}"
export https_proxy="http://${host_ip}:${proxy_port}"
echo "Proxy set to ${http_proxy}"
}
function unsetproxy() {
unset http_proxy https_proxy
echo "Proxy unset"
}
3. 验证与诊断
运行 source ~/.bashrc 后,执行 setproxy,然后运行 curl -I https://github.com。如果返回超时或拒绝连接,请首先使用 ping <宿主机IP> 或 nc -zv <宿主机IP> 7890 测试提取的网关 IP 和对应端口是否真正可达,以此排查是防火墙拦截还是 IP 提取错误。