WSL配置Proxy代理引导

本文最后更新于:2022年5月1日 凌晨

前言

在三番五次被wslproxy问题折腾的心态爆炸,并重装了好几次系统以后,总算理清楚了WSL如果想要搭配windowns上的clash for windows的正确使用方法。把之前无论是需要脚本还是各种复杂操作的博客都删了,在这里记录一个完全不需要任何脚本,也不需要额外配置防火墙的合理方案。

工具环境

  • WSL 2 ArchLinux(理论上来说其他发行版应该相同)
  • Windows 11(win10应该同理)
  • Clash For Windows

Clash的配置

改方案为WSL继承System Proxy来达到代理上网的目的,使用TUN Mode直接用就行,不需要额外设置

  1. 正常配置好Clash For Windows,并且启用Allow LAN的设置

  2. 允许应用或功能通过 Windows Defender防火墙中寻找是否有clash-win64.exe的规则配置,注意不是 Clash For WindowsCFW本身只是clash的一个前端,在启动CFW的时候有概率防火墙只添加CFW本身,而不添加作为核心的clash的防火墙规则,这个时候则需要我们手动修改

  3. 如果已经有了clash-win64.exe的规则,则只需要配置专有和公共网络同时允许即可。如果没有clash-win64.exe的规则,可以通过下方的允许其他应用手动添加规则,具体clash核心文件的路径可以通过任务管理器后台或Clash for Windows\resources\static\files\win\x64\clash-win64.exe类似的路径查询到。添加规则的时候同时允许专用和公共即可

之前经常折腾好了防火墙但过了三四个月或者一段时间后wslwindows之间就因为防火墙断开,但总找不到原因,现在想想很有可能是当时clash for windows升级安装的时候规则被覆盖或路径变化导致的。WSL2的网络对Windows来说也是一个Public的公开网络,在设置了单独程序允许通信之后,虽然wsl有可能无法pingwindows的主机,但正常访问clash的代理端口是没有问题的

WSL的配置

到这里为止防火墙的问题就解决了,只需要通过合理的方法配置好WSL下的代理变量就可以正常使用。其中主机名.local这个域名是会直接在wsl内映射到作为dns服务器的宿主机上,因此并不需要写额外的脚本来添加映射

较为简单的方法即通过zsh终端下oh my zsh+ zsh-proxy 插件,通过设置proxy来实现全局基本功能的代理配置,而在config_proxy步骤中的代理IP填入类似Zephyrus.local:7890格式的地址即可。

Zephyrus为我Windows的设备名,可在Windows设置中重命名,一般来说默认设置应该为类似DESKTOP-XXXX.local:7890,修改和查看的方法可通过搜索引擎自己解决

通过以上方式配置后的WSL就可以正常通过Windows上的Clash代理了。每次WSL出网络问题总是感觉莫名其妙没头绪,之前也试过通过New-NetFireWallRule一类的方法放行防火墙,但都不是很好用或者后面偶尔突然就出问题,现在总算弄清楚了原因而且能很舒服的使用win里面的代理了。


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!