WSL2+Podman Desktop:Windows启动容器无法访问VPN内网服务(WSL内正常)
问题:Windows下Podman容器通过VPN访问内网服务失败(WSL内启动容器正常)
问题现象
在Windows环境直接使用Podman启动容器,curl访问VPN内网服务时报连接重置错误:
PS C:\Users\<USER>> podman run docker.io/nicolaka/netshoot curl https://<INTERNAL_IP_OR_HOST>:6443/version --insecure % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0 curl: (35) Recv failure: Connection reset by peer
但进入Podman对应的WSL发行版(podman-machine-default)内启动容器,执行相同curl请求可正常建立连接(返回401未授权,说明链路通畅):
PS C:\Users\<USER>> wsl -d podman-machine-default You will be automatically entered into a nested process namespace where systemd is running. If you need to access the parent namespace, hit ctrl-d or type exit. This also means to log out you need to exit twice. [<USER>@<HOSTNAME> ~]$ podman run docker.io/nicolaka/netshoot curl https://<INTERNAL_IP_OR_HOST>:6443/version --insecure % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0{ "kind": "Status", "apiVersion": "v1", "metadata": {}, "status": "Failure", "message": "Unauthorized", "reason": "Unauthorized", "code": 401 100 157 100 157 0 0 2474 0 --:--:-- --:--:-- --:--:-- 2492
补充现象:
- Windows下Podman容器ping内网地址正常,但curl请求失败
- 容器访问外部公网服务(如Google)无异常
- 断开VPN后,Windows下Podman容器可直接访问内网服务,一切正常
环境信息
- Podman版本:4.6.1
- Podman Desktop版本:1.2.1
- 操作系统:Windows 10
- WSL版本:2
- WSL发行版:Podman Desktop默认的podman-machine-default(已启用root权限)
已完成配置与排查
为解析内网域名,已做如下配置:
- 在
/etc/wsl.conf中设置generateResolvConf=false - 修改
/etc/resolv.conf,添加内网DNS服务器地址
已确认:
- Windows和WSL均可正常解析内网域名,排除DNS问题
更新发现
Windows直接启动容器与WSL内启动容器的关键差异:数据包存在分片情况,已通过Wireshark抓包验证。
可能的解决方向
调整MTU值
数据包分片大概率是MTU不匹配导致。尝试降低相关网络组件的MTU:- 在WSL内修改网卡MTU:
sudo ip link set dev eth0 mtu 1400 - 启动Podman容器时指定MTU:
podman run --network slirp4netns:mtu=1400 docker.io/nicolaka/netshoot curl https://<INTERNAL_IP_OR_HOST>:6443/version --insecure
注:MTU值可根据VPN环境调整,常见适配值为1300、1400。
- 在WSL内修改网卡MTU:
检查VPN的分片处理策略
部分VPN客户端会拦截或拒绝分片数据包,可尝试在VPN设置中关闭"TCP分段卸载"或类似选项,或开启"允许数据包分片"功能。切换Podman网络模式
Windows下Podman默认使用slirp4netns网络,尝试切换到bridge模式(需在WSL内操作):podman run --network bridge docker.io/nicolaka/netshoot curl https://<INTERNAL_IP_OR_HOST>:6443/version --insecure更新Podman/WSL版本
旧版本的Podman或WSL可能存在网络兼容性问题,尝试升级到最新稳定版:- 升级Podman:通过Podman Desktop或WSL内的包管理器更新
- 升级WSL:在Windows终端执行
wsl --update
内容的提问来源于stack exchange,提问作者Philbo
相关产品推荐
相关产品推荐

