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

开启WireGuard VPN时,WSL2镜像网络下Docker调用Azure翻译API失败

可能的原因及排查方向
  • VPN路由规则未覆盖容器网络
    开启networkingMode=mirrored后,WSL宿主机能继承Windows的WireGuard路由,但Docker容器的网络栈可能未正确获取针对Azure翻译API目标IP(20.43.132.97)的VPN路由。检查Windows侧WireGuard配置的AllowedIPs是否包含该Azure IP段,或者是否存在规则仅允许WSL宿主机流量走VPN,导致容器流量走公网链路,形成单向通信(Client Hello发出后,服务器响应走VPN返回,容器无法接收)。

  • TLS版本/加密套件兼容性差异
    容器内的精简镜像(如Python 3.12.2-slim)使用的TLS库(如OpenSSL)默认支持的加密套件或TLS版本,可能和VPN链路下Azure API的要求不匹配,而WSL宿主机的系统TLS配置更完整。可以强制curl使用TLS 1.2测试:

    curl -v --tlsv1.2 "https://api.cognitive.microsofttranslator.com/translate?api-version=3.0&from=en&to=es" \
      -H "Ocp-Apim-Subscription-Key: xxx" \
      -H "Content-Type: application/json; charset=UTF-8" \
      -d "[{'Text':'Hello friend.'}]"
    
  • MTU不匹配导致数据包丢失
    WireGuard通常会设置较小的MTU(如1420),而Docker容器默认MTU为1500。容器发出的TLS握手包加上VPN封装后超过MTU,若中间网络不允许分片,会导致包丢失,卡在握手阶段。可尝试修改容器MTU与WireGuard一致:

    docker run --mtu=1420 -it your-image-name bash
    

    或修改Docker daemon配置文件/etc/docker/daemon.json添加"mtu": 1420后重启Docker。

  • Windows防火墙拦截容器流量
    开启VPN后,Windows防火墙可能新增规则允许WSL宿主机流量通过VPN,但未授权Docker容器的出站流量。检查Windows防火墙高级设置,确认存在允许容器访问Azure API IP(20.43.132.97)及443端口的出站规则。

  • DNS解析后路由链路不一致
    容器解析到的Azure API IP为20.43.132.97,但容器内该IP的路由未走VPN,导致服务器响应走VPN返回,容器无法接收。在容器内执行以下命令查看路由:

    ip route get 20.43.132.97
    

    对比WSL宿主机的同命令结果,确认路由是否一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 15:17:07