如何让WSL2嵌套VPN流量通过Windows 10主机已建立的VPN路由?
在WSL2中实现嵌套VPN连接(基于Windows主机Cisco AnyConnect)
核心思路
让WSL2的所有流量先转发到Windows主机,借助主机已建立的Cisco AnyConnect隧道传输,再在WSL内建立openconnect GP VPN,复刻VirtualBox NAT模式的流量走向。
具体操作步骤
1. 确认WSL2默认网络模式
WSL2默认采用NAT网络,无需额外调整。可通过wsl -l -v查看版本,确保当前使用的是WSL2。
2. 修改WSL2默认路由,指向Windows主机
- 在WSL终端执行
ip route show default,记录输出中via后的IP(例如172.28.0.1),这是Windows主机在WSL虚拟网络中的专属地址。 - 临时修改路由(重启WSL后失效):
sudo ip route del default sudo ip route add default via <Windows虚拟IP> - 永久生效配置:
- 创建
/etc/wsl.conf文件,禁用自动生成resolv.conf:sudo tee /etc/wsl.conf <<EOF [network] generateResolvConf = false EOF - 编辑shell启动脚本(以bash为例),添加路由命令:
echo -e "sudo ip route del default\nsudo ip route add default via <Windows虚拟IP>" >> ~/.bashrc - 配置sudo免密执行ip命令,避免每次启动输密码:
echo "$USER ALL=(ALL) NOPASSWD: /usr/sbin/ip" | sudo tee /etc/sudoers.d/wsl-route sudo chmod 440 /etc/sudoers.d/wsl-route
- 创建
3. 开启Windows主机的VPN网卡转发功能
打开管理员权限的PowerShell,执行:
Set-NetIPInterface -InterfaceAlias "AnyConnect VPN Adapter" -Forwarding Enabled
提示:若不清楚网卡别名,可执行
Get-NetIPInterface查看,找到包含AnyConnect的网卡名称。
4. 配置Windows防火墙(关键排查项)
确保Windows防火墙允许WSL虚拟网卡的流量通过VPN:
- 打开「Windows Defender防火墙」→「高级设置」
- 添加入站规则:允许来自
vEthernet (WSL)网卡的所有TCP/UDP流量 - 或临时关闭防火墙测试(仅用于排查问题,测试后务必恢复)
5. 在WSL2中安装并连接openconnect GP VPN
- 以Ubuntu为例,安装openconnect:
sudo apt update && sudo apt install openconnect - 连接GP VPN:
按照提示输入用户名、密码等验证信息即可建立连接。sudo openconnect --protocol=gp <你的GP VPN服务器地址>
问题排查
- 若WSL无法ping通GP VPN服务器:检查路由是否正确指向Windows主机,Windows防火墙是否拦截,AnyConnect是否开启转发。
- 若GP VPN连接失败:确认openconnect版本支持GP协议(建议安装最新版),或尝试添加
--disable-web-security参数(部分GP服务器需要)。
内容的提问来源于stack exchange,提问作者jani-matti
相关产品推荐
相关产品推荐

