WSL2 VPN代理配置
創建於:2025年2月24日
創建於:2025年2月24日
目前我的vpn的终端代理为“export https_proxy=http://127.0.0.1:50516 http_proxy=http://127.0.0.1:50516 all_proxy=socks5://127.0.0.1:50518”,VPN 不允许局域网流量,无法给wsl2里面使用vpn的流量。如何设置才能让wsl2用vpn的流量?
要让 WSL2 使用你的 VPN 流量,你需要解决两个主要问题:
你可以使用以下方法让 WSL2 走 VPN 流量。
在 Windows 中打开 cmd 或 PowerShell,输入:
powershellipconfig /all
找到 VPN 适配器(通常是 "PPP Adapter" 或带有 VPN 名称的适配器),记录其中的:
在 WSL2 终端运行:
baship route
找到默认路由(通常是 default via <gateway> dev eth0),然后手动修改默认路由,让 WSL2 的流量走 VPN。
假设你查到 Windows VPN 的 IP 是 192.168.100.1,运行:
bashsudo ip route del default sudo ip route add default via 192.168.100.1 dev eth0
这样,WSL2 的所有流量都会走 VPN。
如果 VPN 需要自定义 DNS,可以在 WSL2 设置:
bashecho "nameserver 8.8.8.8" | sudo tee /etc/resolv.conf
或者使用 VPN 提供的 DNS 服务器。
如果你的 VPN 不允许局域网流量,你可以使用 Windows 代理工具(如 Proxifier 或 sshuttle)来让 WSL2 通过 Windows 的 VPN 访问外网。
如果你的 VPN 提供了 SOCKS 代理(例如 127.0.0.1:1080),你可以直接在 WSL2 配置代理:
bashexport https_proxy="socks5://127.0.0.1:1080" export http_proxy="socks5://127.0.0.1:1080" export all_proxy="socks5://127.0.0.1:1080"
或者,使用 sshuttle 在 Windows 转发流量:
powershellsshuttle -r user@your-vpn-server 0.0.0.0/0 -x wsl-ip
这样 WSL2 就能直接使用 VPN。
如果 VPN 阻止局域网流量,可以尝试:
让 WSL2 优先使用 VPN 连接。powershellnetsh interface ipv4 set interface "WSL" metric=10
如果你的 VPN 软件支持 "允许局域网流量"(Allow LAN Traffic),可以开启它,否则可能需要使用 OpenVPN 或 WireGuard 来手动配置 VPN 路由。
export https_proxy=socks5://127.0.0.1:1080(适用于 VPN 支持 SOCKS 代理)。ip route add default via VPN_IP dev eth0。sshuttle 或 Proxifier 让 WSL2 透明代理到 VPN。你可以尝试不同的方法,看哪种适合你的 VPN 配置。如果 VPN 不允许局域网流量,最好的方案是使用 SOCKS 代理或者 sshuttle。
使用 sshuttle 或 Proxifier 让 WSL2 透明代理到 VPN。详细规划步骤
要让 WSL2 透明代理 VPN 流量,你可以使用 sshuttle 或 Proxifier。以下是详细的设置步骤:
localhost 或 127.0.0.1)首先,需要确保 Windows 上 SSH 服务器 已开启:
在 Windows 终端(PowerShell)运行:
powershellGet-Service -Name sshd
如果 sshd 处于 Running 状态,说明已经启用。
如果没有启用,执行:
powershellStart-Service sshd Set-Service -Name sshd -StartupType Automatic
允许 WSL2 通过 SSH 访问 Windows:
127.0.0.1在 WSL2 终端运行:
bashsudo apt update && sudo apt install -y sshuttle
在 WSL2 运行:
-r [email protected]:告诉 WSL2 通过 Windows 用户 your_windows_user 建立 SSH 隧道-x 172.28.0.1:排除 WSL2 内部 IP0.0.0.0/0:代理所有流量-vv:显示详细日志注意:如果你的 Windows 账户没有密码,你可能需要先设置密码,或者启用 无密码 SSH 登录(使用 SSH Key)。
在 WSL2 运行:
bashcurl ifconfig.me
如果返回的是 VPN 的外部 IP,则说明流量已通过 VPN。
127.0.0.1:1080)打开 Proxifier
添加 SOCKS 代理
127.0.0.11080创建 Proxifier 规则
172.28.0.0/16(WSL2 默认子网)C:\Windows\System32\wsl.exe如果 Proxifier 已经将 WSL2 的所有流量透明代理,你不需要额外设置。
如果你想手动指定代理:
bashexport http_proxy="socks5://127.0.0.1:1080" export https_proxy="socks5://127.0.0.1:1080" export all_proxy="socks5://127.0.0.1:1080"
测试代理是否生效:
bashcurl ifconfig.me
如果返回的是 VPN 的 IP,则说明 WSL2 走 VPN 了。
| 方法 | 优势 | 适用场景 |
|---|---|---|
| sshuttle | 透明代理,所有应用生效 | 适用于 Windows 允许 SSH 访问,并能使用 sshuttle |
| Proxifier | 适用于 VPN 不支持局域网 | 适用于 VPN 提供 SOCKS 代理,可以手动配置 |
如果你的 VPN 支持 SOCKS5 代理,Proxifier 方法更简单。如果你的 VPN 不允许局域网流量,但允许 SSH 连接 Windows,则 sshuttle 是一个很好的选择。
你可以尝试哪种方法适合你的环境。
再提供其他的方法
除了 sshuttle 和 Proxifier,你还可以使用以下方法让 WSL2 透明代理到 VPN:
redsocks 允许 WSL2 通过 SOCKS5 或 HTTP 代理 透明代理所有流量。
在 WSL2 运行:
bashsudo apt update && sudo apt install -y redsocks iptables
编辑 redsocks 配置文件:
bashsudo nano /etc/redsocks.conf
填入:
textbase { log_debug = off; log_info = on; daemon = on; redirector = iptables; } redsocks { local_ip = 127.0.0.1; local_port = 12345; ip = 127.0.0.1; port = 1080; type = socks5; }
其中:
ip = 127.0.0.1 和 port = 1080 需要替换为你的 VPN 提供的 SOCKS5 代理 地址。local_port = 12345 是本地转发的端口。保存并退出。
运行:
bashsudo systemctl restart redsocks sudo systemctl enable redsocks
让 WSL2 透明代理所有 TCP 流量:
bashsudo iptables -t nat -N REDSOCKS sudo iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345 sudo iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner $(id -u) -j REDSOCKS
这样,WSL2 的所有 TCP 流量都会自动走 VPN 代理。
验证代理是否生效:
bashcurl ifconfig.me
如果返回的是 VPN 的 IP,则说明成功。
默认情况下,WSL2 不支持 TUN/TAP 设备,因此你需要手动启用它。
在 WSL2 运行:
bashsudo apt update sudo apt install -y wireguard openvpn
如果你的 VPN 使用 OpenVPN,则创建 /etc/openvpn/client.conf,然后运行:
bashsudo openvpn --config /etc/openvpn/client.conf
如果使用 WireGuard,创建 /etc/wireguard/wg0.conf,然后运行:
bashsudo wg-quick up wg0
验证 VPN 是否连接成功:
bashcurl ifconfig.me
如果显示的是 VPN 的 IP,说明 WSL2 直接连上了 VPN。
在 Windows 运行:
powershellipconfig /all
找到 VPN 适配器,记下它的 IPv4 地址(假设是 192.168.200.1)。
在 WSL2 运行:
bashsudo ip route del default sudo ip route add default via 192.168.200.1 dev eth0
这样,WSL2 的所有流量都会走 VPN 适配器。
验证是否生效:
bashcurl ifconfig.me
如果返回的是 VPN 的 IP,则说明成功。
| 方法 | 适用场景 | 优势 | 复杂度 |
|---|---|---|---|
| sshuttle | 允许 SSH 隧道的环境 | 透明代理所有流量 | ⭐⭐ |
| Proxifier | VPN 提供 SOCKS5 代理 | Windows 端控制流量 | ⭐⭐ |
| redsocks + iptables | 需要透明代理但不想依赖 Windows | 适用于 Linux 环境 | ⭐⭐⭐ |
| TUN/TAP VPN 直连 | VPN 支持 WireGuard/OpenVPN | WSL2 直接连 VPN | ⭐⭐⭐ |
| 修改默认网关 | Windows 允许 WSL2 访问 VPN 适配器 | 最简单的方法 | ⭐ |
你可以根据你的 VPN 类型和需求选择合适的方法。
还是不行,再换方法
如果前面的方法都无法解决问题,我们可以尝试 更底层的解决方案,包括 Windows 端网络桥接、WSL2 网络适配器修改、或者 TUN/TAP 隧道。
WSL2-TAPpowershellipconfig /all
10.8.0.2)查看 Windows TAP 适配器的 IP
powershellipconfig
192.168.200.1在 WSL2 配置 TAP 网关
bashsudo ip route del default sudo ip route add default via 192.168.200.1 dev eth0
测试 VPN
bashcurl ifconfig.me
powershellNew-NetIPAddress -IPAddress 192.168.100.1 -PrefixLength 24 -InterfaceAlias "Ethernet"
powershellNew-NetNat -Name WSL2NAT -InternalIPInterfaceAddressPrefix 192.168.100.0/24
在 WSL2 运行:
bashsudo ip route del default sudo ip route add default via 192.168.100.1 dev eth0
测试 VPN
bashcurl ifconfig.me
如果返回 VPN 的 IP,说明成功。
bashcurl -fsSL https://tailscale.com/install.sh | sh
powershelltailscale up --advertise-routes=10.0.0.0/8
10.0.0.0/8 代表 VPN 网段,你可以用 ipconfig /all 查找 VPN 网段。bashsudo tailscale up
如果返回的是 VPN 的 IP,说明成功。bashcurl ifconfig.me
powershellnetsh interface portproxy add v4tov4 listenport=1081 listenaddress=0.0.0.0 connectport=1080 connectaddress=127.0.0.1
在 WSL2 运行:
bashsudo iptables -t nat -A OUTPUT -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:1081 sudo iptables -t nat -A OUTPUT -p tcp --dport 443 -j DNAT --to-destination 127.0.0.1:1081
测试 VPN
bashcurl ifconfig.me
如果返回的是 VPN 的 IP,说明成功。
| 方法 | 适用场景 | 复杂度 | 优势 |
|---|---|---|---|
| TAP 适配器共享 VPN | 需要 Windows 端桥接 | ⭐⭐⭐ | 类似物理机,流量全走 VPN |
| Hyper-V NAT | WSL2 使用 Hyper-V | ⭐⭐⭐ | 让 WSL2 走 Windows NAT |
| Tailscale | 无法改 VPN | ⭐ | 简单、安全 |
| Windows 代理 + WSL2 NAT | VPN 只在 Windows 上 | ⭐⭐ | 适用于 Windows VPN |
如果你不想手动改网络,Tailscale 是最简单的方法;如果你希望 全局透明代理,使用 TAP 适配器或 NAT 是最佳方案。