You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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抓包验证。


可能的解决方向

  1. 调整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。

  2. 检查VPN的分片处理策略
    部分VPN客户端会拦截或拒绝分片数据包,可尝试在VPN设置中关闭"TCP分段卸载"或类似选项,或开启"允许数据包分片"功能。

  3. 切换Podman网络模式
    Windows下Podman默认使用slirp4netns网络,尝试切换到bridge模式(需在WSL内操作):

    podman run --network bridge docker.io/nicolaka/netshoot curl https://<INTERNAL_IP_OR_HOST>:6443/version --insecure
    
  4. 更新Podman/WSL版本
    旧版本的Podman或WSL可能存在网络兼容性问题,尝试升级到最新稳定版:

    • 升级Podman:通过Podman Desktop或WSL内的包管理器更新
    • 升级WSL:在Windows终端执行wsl --update

内容的提问来源于stack exchange,提问作者Philbo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 19:08:31