WSL2 通过 Clash Verge 连接外网
问题根本原因
Windows 防火墙阻止了 WSL2 对 Clash Verge 端口的访问
- WSL2 被视为"局域网"设备
- 防火墙默认阻止外部对代理端口的访问
- 需要手动开放相关端口
完整解决步骤
第一步:Clash Verge 基础配置
- 开启系统代理 ✅
- 开启局域网连接 ✅
- 确认代理端口(你的设置):
- 混合代理端口:7897
- SOCKS 代理端口:7898
- HTTP(S) 代理端口:7899
第二步:防火墙配置(关键步骤)
在 Windows PowerShell(管理员身份) 中执行:(其实只用了混合代理端口就好)
# 开放 Clash Verge 所有代理端口
netsh advfirewall firewall add rule name="Clash Verge HTTP" dir=in action=allow protocol=TCP localport=7899
netsh advfirewall firewall add rule name="Clash Verge Mixed" dir=in action=allow protocol=TCP localport=7897
netsh advfirewall firewall add rule name="Clash Verge SOCKS" dir=in action=allow protocol=TCP localport=7898
# 或者临时关闭防火墙测试(不推荐长期使用)
# Set-NetFirewallProfile -Profile Domain,Public,Private -Enabled False
第三步:获取 Windows 主机 IP
在 WSL2 终端中:
cat /etc/resolv.conf | grep nameserver | awk '{print $2}'
# 输出示例:172.18.176.1
第四步:WSL2 环境变量配置
在 ~/.bashrc 或 ~/.zshrc 中添加:
export hostip=$(cat /etc/resolv.conf |grep -oP '(?<=nameserver\ ).*')
export https_proxy="http://${hostip}:7897"
export http_proxy="http://${hostip}:7897"
第五步:应用配置并测试
# 重新加载配置
source ~/.bashrc
# 测试连接
curl -I https://www.google.com
# 验证环境变量
echo $HTTP_PROXY
验证命令
# 测试端口连通性
timeout 3 bash -c "echo > /dev/tcp/172.18.176.1/7897" && echo "端口可访问" || echo "端口无法访问"
# 测试代理功能
curl -x http://172.18.176.1:7897 -I https://www.google.com
故障排查要点
- 端口测试失败 → 检查防火墙规则
- curl 无响应 → 确认 Clash Verge 运行状态和节点可用性
- 环境变量不生效 → 重新加载
source ~/.bashrc - IP 地址变化 → WSL2 重启后可能需要更新 IP
最终效果
✅ WSL2 中所有网络请求(curl、wget、apt、git 等)自动通过 Clash Verge 代理
✅ 保持 Windows 端原有的代理体验
✅ 稳定的内外网访问能力
这个问题完美解决了!防火墙配置是 WSL2 网络连接中最容易被忽略但至关重要的环节。
WSL2 通过 Clash Verge 连接外网
https://jiahhhao.github.io/jiahhhao/2025/11/20/WSL2通过Clash-Verge连接外网/