WSL2 通过 Clash Verge 连接外网

问题根本原因

Windows 防火墙阻止了 WSL2 对 Clash Verge 端口的访问

  • WSL2 被视为"局域网"设备
  • 防火墙默认阻止外部对代理端口的访问
  • 需要手动开放相关端口

完整解决步骤

第一步:Clash Verge 基础配置

  1. 开启系统代理
  2. 开启局域网连接
  3. 确认代理端口(你的设置):
    • 混合代理端口: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

故障排查要点

  1. 端口测试失败 → 检查防火墙规则
  2. curl 无响应 → 确认 Clash Verge 运行状态和节点可用性
  3. 环境变量不生效 → 重新加载 source ~/.bashrc
  4. 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连接外网/
作者
Zeng Jiahao
发布于
2025年11月20日
许可协议