【WSL代理配置】自己折腾win11和win10 (系统代理与tun可能遇到的问题)

Morli 2026-04-16 17:58 1

下面是使用V2rayN下操作的,混合端口10808; clash换端口即可


win11可以wslconfig里面启用mirror模式和autoproxy


但是autoproxy只能把http https代理带到wsl2中

.wslconfig配置可参考:


[wsl2]
# 限制内存使用(可选)
# memory=8GB
autoProxy=true
# 开启镜像网络模式
networkingMode=mirrored
# 开启 DNS 隧道
dnsTunneling=true
# 开启 Windows 防火墙整合
firewall=true

[experimental]
# 自动回收内存
autoMemoryReclaim=gradual
# 自动释放虚拟硬盘空间
sparseVhd=true
# 允许 localhost 回环
hostAddressLoopback=true

Tun


然后最最最省心的就是开tun模式,但是如果开tun模式没用,解决方法:


进入v2rayn中的 设置–>参数设置–>tun参数设置–>MTU设置为1500


在我win11的电脑上tun模式代理不起作用之后,使用这个方法确实有效了。(我也建议把严格路由关了,很多开启tun之后电脑代理直接失效跟严格路由也有关系)


使用系统代理,不想用Tun


有很多佬友确实不喜欢tun,那就是在wsl2的bashrc末尾添加代理设置 (这里只是添加socks代理,部分程序使用socks,前面autoproxy已经把http/s代理带过去了)


cat >> ~/.bashrc <<'EOF'
setall() {
if timeout 1 bash -c '</dev/tcp/127.0.0.1/10808' 2>/dev/null; then
export ALL_PROXY=socks5h://127.0.0.1:10808
export all_proxy=socks5h://127.0.0.1:10808
else
unset ALL_PROXY all_proxy
fi
}

setall
EOF


复制上面 回车后,再输入下面,回车

source ~/.bashrc

注:这个设置是长久性,不是窗口临时的

这样的话



  • 10808 能连上,就设 ALL_PROXY

  • 10808 连不上,就取消 ALL_PROXY 保证直连

  • 手动重新检测的话(即wsl2开了 v2rayn没开读不到),输入setall

  • 可能会出现关闭代理后10808端口依然监听导致默认读代理的情况,可以把第一行改成

    if curl -s --proxy socks5h://127.0.0.1:10808 https://www.gstatic.com/generate_204 --max-time 3 >/dev/null判断是否能连外再设socks代理


win10 没有mirror模式


Tun最省事 ^-^


开tun什么都不怕了()

依旧建议关闭严格路由,MTU的问题我在win10上没遇到过,不过改1500也挺好


系统代理


win10的主机地址在wsl那通常不是127.0.0.1,我之前因为这个连不上。

所以需要先获取 设置 再添加代理。

下面是自动获取win10主机地址、添加代理,自动检测windows端代理通不通


cat >> ~/.bashrc <<'EOF'
# ==== WSL 代理自动配置 ====
proxyon() {
hostip=$(ip route | awk '/default/ {print $3}' | head -n1)
export http_proxy="http://$hostip:10808"
export https_proxy="http://$hostip:10808"
export all_proxy="socks5h://$hostip:10808"
export HTTP_PROXY="$http_proxy"
export HTTPS_PROXY="$https_proxy"
export ALL_PROXY="$all_proxy"
echo "WSL 代理已开启 -> $hostip:10808"
}

proxyoff() {
unset http_proxy https_proxy all_proxy HTTP_PROXY HTTPS_PROXY ALL_PROXY
echo "WSL 代理已关闭"
}

proxyauto() {
hostip=$(ip route | awk '/default/ {print $3}' | head -n1)
if [ -n "$hostip" ] && timeout 1 bash -c "</dev/tcp/$hostip/10808" 2>/dev/null; then
proxyon
else
proxyoff
fi
}

proxyauto
EOF

然后输入下面 回车

source ~/.bashrc

每次你打开 WSL:



  • 先拿当前 Windows 主机 IP

  • 检查 $hostip:10808 是否能连通

  • 能连通:自动设 http_proxy / https_proxy / ALL_PROXY

  • 不能连通:自动 unset,走默认直连

    仍然可以手动执行三个命令proxyon强制开启/ proxyoff强制关闭/ proxyauto重新检测


配置后检查


curl -I https://www.google.com --max-time 10 有http 200啥的就是成功了

curl https://ifconfig.me --max-time 10 显示代理ip就是成功了


结尾


应该能帮到大部分被这wsl代理配置折磨很久的佬,有错的地方佬友指正。

我是小白,碰到的问题大部分这样都解决了。

(还是tun省事啊)

最新回复 (6)
  • Tsu1m 04-16 18:12
    1

    感谢分享 刚才去配置了一下win11的 测试能ping通谷歌了 感谢老哥

  • 雨秋 05-05 23:57
    2

    我也是wsl新人,折腾半天,佬的各种方法也给了我很多思路,但折腾来折腾去,最后还是选择老老实实用tun模式说是 ^-^

  • LDHanszmk 05-06 00:04
    3

    谢谢佬的分享,以前就因为wsl使用不了代理头疼过,感谢佬友

  • sonate 05-08 11:56
    4

    谢谢佬的分享,终于是把WSL的网络折腾好了

  • Oyal 06-06 19:25
    5

    我是 Windows 10,只开启 tun 不行,还要去防火墙添加入站规则,把代理软件或者端口放行


  • Lake_Azure 06-06 19:32
    6

    补充一点自己的经历,希望能帮助到有需要的佬。

    如果想让wsl用上代理,且wsl里的程序能ssh连接到vmware虚拟机,wsl用镜像模式或vm用桥接都连不上,两者都用nat就能连上了,再在wsl里设置代理地址就好了

* 帖子来源Linux.do
返回