使用WSL2搭配VSCode的WSL插件可以实现在VSCode中直接操作Linux环境下的文件和工具,既可以享受VSCode的现代化开发环境,又可以利用Linux的完整工具链。但是在国内网络环境下,使用WSL2进行开发可能会遇到下载速度慢、连接不稳定等问题。在Windows上我们可以使用Clash作为代理解决大部分网络问题,但是WSL默认情况下走的是NAT转发,无法直接由Windows上的Clash代理解析WSL流量。虽然可以通过配置镜像模式来解决WSL的网络代理问题,但是这种方式会导致VSCode的WSL插件无法正常连接WSL,产生类似于“无法获取远程环境”、“无法连接到远程扩展主机服务器(错误:WebSocket close with status code 1006)”等报错。

报错提示

这可能是因为镜像模式下的WSL和Windows主机之间共用同一套网络接口,导致VSCode的WSL插件无法正确解析本地回环地址,或者是连接请求被Clash代理拦截,从而无法建立稳定的连接。NAT模式下配置代理相对复杂,因为WSL和Windows虚拟网关的IP地址会动态变化,且需要额外配置端口转发并设置防火墙规则,虽然可以编写一个自动化脚本进行连接,但桥接模式下WSL和Windows主机通过共用Hyper-V虚拟交换机直接连接到同一局域网,使得两者拥有独立固定的IP地址,配置代理更加简单且稳定。
然而,微软官方文档指出,WSL2.4.5之后的版本中,Bridged模式已被弃用,因此在WSL Settings中将不再提供桥接模式的选项;然而,在github上WSL项目的release页中,版本2.5.6的更新日志中写道“Bring back bridged networking mode”,这使得桥接模式的使用变得有些混乱。经过测试,发现WSL2.6.3版本确实支持桥接模式,但需要通过手动配置。每当连接到新网络时,电脑的IP地址会发生变化,因此需要重新配置。

WSL配置步骤

1.在C:\Users<username>.wslconfig文件中添加以下内容:

1
2
3
[wsl2]
networkingMode = bridged
vmSwitch = "YourVirtualSwitchName" // 这里是后面创建的虚拟交换机名称

2.创建一个新的虚拟交换机.打开PowerShell(以管理员身份运行),执行以下命令创建一个新的外部虚拟交换机:

1
New-VMSwitch -Name "YourVirtualSwitchName" -NetAdapterName "以太网" -AllowManagementOS $true

这里的“以太网”是你当前使用的网络适配器名称,可以通过Get-NetAdapter命令查看。例如:

1
2
3
4
5
Get-NetAdapter
Name InterfaceDescription ifIndex Status MacAddress LinkSpeed
---- -------------------- ------- ------ ---------- ---------
以太网 Intel(R) Ethernet Connection (7) I219-V 12 Up 00-1A-2B-3C-4D-5E 1 Gbps
Wi-Fi Intel(R) Dual Band Wireless-AC 8265 13 Disconnected 00-1A-2B-3C-4D-5F 300 Mbps

或者,你可以通过“控制面板->Windows 管理工具->Hyper-V 管理器”来创建虚拟交换机。

Hyper-V管理器

看到右边的“操作”栏,点击“虚拟交换机管理器”,选择“外部”,然后点击“创建虚拟交换机”,如下设置,其中名称要与你在.wslconfig中配置的vmSwitch一致。

创建虚拟交换机

3.重启WSL实例,可以通过PowerShell执行以下命令:

1
wsl --shutdown

Clash配置步骤

1.先查看一下当前虚拟交换机的IP地址,可以通过PowerShell执行命令:

1
ipconfig

找到对应虚拟交换机的IPv4地址,例如:

虚拟交换机IP

这里的IP地址是192.168.5.9

2.打开clash设置面板,在“系统代理”中,将“代理IP”设置为虚拟交换机的IP地址,例如192.168.5.9,端口保持默认或根据需要调整。并确保“允许局域网连接”选项已启用。

Clash系统代理设置

.bashrc配置步骤

在WSL的Linux环境中,编辑~/.bashrc文件,添加以下内容以设置HTTP和HTTPS代理:

1
2
3
4
export WIN_HOST_IP="<虚拟交换机IP>" # 在我的环境下即为192.168.5.9
export http_proxy="http://<虚拟交换机IP>:<Clash端口>"
export https_proxy="http://<虚拟交换机IP>:<Clash端口>"
export no_proxy="localhost,127.0.0.1,::1"

保存并关闭文件后,执行以下命令使配置生效:

1
source ~/.bashrc

执行curl ipinfo.io,如果返回的IP地址是代理服务器的IP地址,说明代理配置成功。

VSCode相关配置

配置完成后,可能产生copilot扩展无法连接到服务器的问题,尤其是在连接到WSL的工作区中。可以打开VSCode设置,搜索“Proxy”,找到“HTTP: Proxy”配置,将其设置为:

1
http://<虚拟交换机IP>:<Clash端口> // 在我的环境中即为 http://192.168.5.9:7897

保存并重启VSCode,问题应该能得到解决。需要注意的是“用户”、“远程”这两个设置项不一定都需要配置,具体情况可以根据实际测试结果进行调整。
2026年2月7日。

2026年2月8日:最近在github上找到一个在WSL中使用VPN的项目,声称可以通过脚本自动为WSL进行配置,使它能够访问Windows主机上的VPN连接。但是项目有些老了,有空再试试看效果如何。
2026年2月18日:VSCode有一项设置Use Local Proxy Configuration可以启用,启用后VSCode会使用系统的代理设置,这样就不需要在VSCode中单独配置HTTP Proxy了,直接使用Clash的系统代理设置即可。启用后需要重启VSCode使设置生效。

VSCode使用系统代理设置