在 Windows 下的 Ubuntu (WSL) 里,完全可以使用 Windows 上运行的 Shadowsocks 代理。

 

核心方法很简单,就是把 WSL 里程序的网络请求,指向你 Windows 主机的代理端口。WSL 就像一个和 Windows 主机网络隔开的“邻居”,需要告诉它去“隔壁”找代理服务。

 

🧰 操作步骤

1. 在 Windows 主机上做好准备

这是最关键的前提,如果设置不对,WSL 将无法连接。

 

确认代理端口:记下你的 Shadowsocks 客户端设置的本地端口,通常是 1080。

 

允许局域网连接:在 Shadowsocks 客户端的设置中,找到并勾选“允许来自局域网的连接”。这个开关如果不打开,WSL 发来的请求会被拒绝。

 

2. 在 WSL 的 Ubuntu 中配置代理

有两种主流方法,推荐使用方法一,这适用于大多数情况。

 

方法一:直接设置环境变量(推荐,简单快捷)

这是最直接有效的方式,适合临时使用或让特定命令走代理。

 

获取 Windows 主机的 IP:WSL 里不能用 127.0.0.1,因为它自己也是一个“虚拟机”。你需要找到 Windows 的真实 IP。在 Ubuntu 终端中执行:

 

bash

# 查看WSL的默认网关,这就是Windows主机的IP

cat /etc/resolv.conf | grep nameserver | awk '{print $2}'

记下输出的 IP 地址,类似 172.xx.xx.1 或 192.168.x.1。

 

设置代理:在 Ubuntu 终端中执行以下命令,将 [Windows主机IP] 和 [代理端口] 替换成你实际的地址和端口(如 1080)。

 

bash

export http_proxy="http://[Windows主机IP]:[代理端口]"

export https_proxy="http://[Windows主机IP]:[代理端口]"

export all_proxy="socks5://[Windows主机IP]:[代理端口]"

验证是否生效:执行 curl https://www.google.com,如果能正常返回网页代码,就说明配置成功了。

 

注意:这种方法设置的代理只在当前终端窗口有效,关闭后就失效了。如果需要永久生效,可以将上述 export 命令添加到 ~/.bashrc 文件中。

 

方法二:配置 WSL 网络模式(更省心)

这是更“一劳永逸”的方法,让 WSL 和 Windows 共享网络,之后你就可以在 WSL 里直接使用 127.0.0.1 了。

 

关闭所有 WSL 实例:在 Windows 的 PowerShell 或 CMD 中执行 wsl --shutdown。

 

编辑配置文件:在 Windows 用户目录 C:Users你的用户名 下,创建一个名为 .wslconfig 的文件(注意文件名开头的点)。用记事本打开,粘贴以下内容并保存:

 

ini

[wsl2]

networkingMode=mirrored

dnsTunneling=true

firewall=true

autoProxy=true

重启 WSL:重新打开你的 Ubuntu 终端。

 

直接使用 localhost:现在,你可以在 Ubuntu 里直接设置代理为 127.0.0.1:1080 了。

 

bash

export http_proxy="http://127.0.0.1:1080"

export https_proxy="http://127.0.0.1:1080"

export all_proxy="socks5://127.0.0.1:1080"

⚠️ 常见问题排查

检查 Windows 防火墙:确保 Windows Defender 防火墙没有阻止 WSL 或你的代理客户端。可以尝试在 PowerShell (管理员) 中运行以下命令来放行:

 

powershell

New-NetFirewallRule -DisplayName "WSL Allow Proxy" -Direction Inbound -InterfaceAlias "vEthernet (WSL)" -Action Allow

DNS 解析问题:如果代理通了但无法解析域名(比如 curl https://www.google.com 报错),可以尝试在 Ubuntu 中手动设置 DNS 服务器。

 

bash

# 临时修改DNS

sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'

重启 WSL 使配置生效:很多配置修改后,都需要重启 WSL 才能生效。在 PowerShell 中执行 wsl --shutdown 即可完全重启。