Trae IDE WSL2/SSH 环境网络故障排查笔记

当前是2026年6月份,官方的WSL2/SSH可以正常连接使用

https://docs.trae.ai/

一、问题概述

在 Trae IDE 原生 WSL 直连模式下,出现 AI 对话功能报错(错误码 997:请求服务失败),但 Windows 本地网络、WSL2 的 SSH 连接均正常。核心故障根源为 WSL2 开启 systemd 后 DNS 解析机制异常,导致运行在 WSL 内部的 Trae 服务端进程无法访问国内 Trae 服务器。

二、故障现象汇总

  1. Trae 功能异常 :本地窗口对话正常,连接 WSL2 后立即报「请求服务失败,请检查网络后重试 (997)」
  2. 网络表现分化:Windows 侧浏览器、其他软件上网完全正常;WSL2 内部执行网络请求全部失败
  3. DNS 配置反复失效 :手动修改 /etc/resolv.conf 后临时生效,WSL 重启后自动还原为 127.0.0.53
  4. 典型报错信息
    • curl: (6) Could not resolve host: trae.ai
    • nslookup 命令执行失败,域名解析无返回

三、根因深度拆解

1. WSL2 + systemd 的 DNS 机制缺陷(核心原因)

  • 开启 systemd=true 后,systemd-resolved 服务会自动接管 DNS 解析
  • 该服务将 /etc/resolv.conf 设为软链接,指向 /run/systemd/resolve/stub-resolv.conf,默认 DNS 地址为本地回环 127.0.0.53
  • WSL2 虚拟化网络环境下,systemd-resolved 无法正常获取 Windows 宿主的上游 DNS,导致本地 DNS 代理失效,所有域名解析失败

2. Trae WSL 直连架构特性

  • Trae 原生 WSL 模式采用「本地 UI + WSL 服务端」的分离架构
  • AI 对话、模型请求的服务端进程运行在 WSL2 系统内部,直接依赖 WSL 的网络栈访问 Trae 服务器
  • Windows 侧网络正常 ≠ WSL 侧网络正常,这是故障最容易误判的点

3. 已排除的干扰项

  • 非 Trae 官方服务器故障:本地窗口可正常对话
  • 非 VPN/代理环境变量串扰:http_proxy 等环境变量全部为空
  • 非防火墙拦截:关闭防火墙后故障依旧

四、分步排查流程

第一步:确认 WSL 内部网络状态

复制代码
# 测试目标域名连通性,快速定位是否为DNS问题
curl -I --connect-timeout 5 https://trae.ai
  • 返回 HTTP/2 200:网络正常,问题在 Trae 服务端缓存
  • 返回 curl: (6) Could not resolve host:DNS 解析失败,进入下一步

第二步:检查 DNS 配置状态

复制代码
# 查看当前DNS配置
cat /etc/resolv.conf
  • 内容包含 nameserver 127.0.0.53:确认是 systemd-resolved 接管导致的问题
  • 内容为自定义公共 DNS:配置未生效,检查文件是否为软链接

第三步:验证 systemd-resolved 服务状态

复制代码
systemctl status systemd-resolved

服务处于 active 运行状态,即可确认其为 DNS 覆盖的元凶。

第四步:排除代理环境变量干扰

复制代码
echo $http_proxy $https_proxy $HTTP_PROXY $HTTPS_PROXY $all_proxy

输出全部为空,排除代理串扰因素。

五、永久解决方案(按推荐优先级排序)

方案一:配置 systemd-resolved 上游 DNS(官方原生方案,当前选用)

适用场景 :希望保留 systemd 原生架构,使用 DNS 缓存功能,符合官方设计规范。

操作步骤

  1. 编辑 resolved 主配置文件

    sudo tee /etc/systemd/resolved.conf << 'EOF'
    [Resolve]
    DNS=223.5.5.5 114.114.114.114
    FallbackDNS=8.8.8.8
    MulticastDNS=no
    LLMNR=no
    DNSStubListener=yes
    EOF

  2. 重载配置并重启服务

    sudo systemctl daemon-reload
    sudo systemctl restart systemd-resolved

  3. 确认软链接指向正确

    sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

  4. 验证配置生效

    resolvectl status

优缺点:符合 systemd 官方设计,保留 DNS 缓存加速;配置步骤较多,WSL 大版本更新后可能被重置。

方案二:彻底禁用 systemd-resolved 服务(嵌入式开发推荐)

适用场景 :嵌入式开发环境,不需要本地 DNS 缓存,追求稳定干净的系统环境。

操作步骤

复制代码
# 停止、禁用并彻底屏蔽服务
sudo systemctl stop systemd-resolved
sudo systemctl disable systemd-resolved
sudo systemctl mask systemd-resolved

# 删除软链接,创建静态DNS配置
sudo rm -f /etc/resolv.conf
sudo tee /etc/resolv.conf << 'EOF'
nameserver 223.5.5.5
nameserver 114.114.114.114
EOF

优缺点:从根源解决 DNS 覆盖问题,减少后台服务开销;失去 DNS 本地缓存功能(嵌入式开发无影响)。

方案三:静态文件加 immutable 锁(一劳永逸,兼容性最强)

适用场景 :不想修改系统服务,追求配置永久不失效,兼容所有 WSL 版本。

操作步骤

复制代码
# 先停止服务,避免写入冲突
sudo systemctl stop systemd-resolved

# 删除软链接,创建真实静态文件
sudo rm -f /etc/resolv.conf
sudo tee /etc/resolv.conf << 'EOF'
nameserver 223.5.5.5
nameserver 114.114.114.114
options edns0 trust-ad
EOF

# 加不可修改属性锁,连root也无法覆盖
sudo chattr +i /etc/resolv.conf

后续修改方法

复制代码
sudo chattr -i /etc/resolv.conf  # 先解锁
# 修改完成后重新加锁
sudo chattr +i /etc/resolv.conf

优缺点:配置一次永久生效,兼容性极强;后续修改需要手动解锁,操作略繁琐。

六、Trae IDE 侧配套优化配置

为避免代理串扰等次生网络问题,在 Trae 用户 settings.json 中添加以下配置:

复制代码
{
    "http.proxySupport": "override",
    "http.proxy": "",
    "http.strictSSL": false,
    "remote.downloadExtensionsLocally": true
}
  • 强制关闭自动代理检测,避免 WSL 代理配置串扰到本地网络
  • 插件在本地下载,不通过 WSL 网络,提升连接稳定性

七、验证与恢复步骤

  1. 执行 curl -I https://trae.ai,确认返回 200 状态码
  2. 执行 wsl --shutdown 重启 WSL,再次验证 DNS 配置未被覆盖
  3. 打开 Trae IDE 连接 WSL,发送测试对话,确认 997 错误消失

补充:

这里是我自己遇到网络问题后走的弯路,实际配置后是否真的起作用?待定,核心还是WSL2内虚拟机问题

相关推荐
问心无愧05131 小时前
ctfshow web入门114
android·前端·笔记
qq_195821652 小时前
2. 开发环境搭建:IDE安装与配置、交叉编译工具链、调试工具准备
ide
十月的皮皮2 小时前
C语言学习笔记20260614-数组奇偶数调整3种方法
c语言·笔记·学习
怪我冷i2 小时前
人工智能的数学基础——学习笔记
人工智能·笔记·学习
杨先生哦2 小时前
【2026 热端攻防系列 2/12】DOM 型 XSS 深度实战:AI 多态变形免杀 + 全维度防御
前端·人工智能·笔记·安全·web安全·xss
俏皮小混子2 小时前
山东大学软件学院项目实训-创新实训-计科智伴(六)——个人博客(后端运行后真实调整)
人工智能·笔记·学习·ui
问心无愧05132 小时前
ctf show web入门115
android·前端·笔记
zhangrelay2 小时前
ROS2 Lyrical 入门+进阶+精通+……
linux·笔记·学习·机器人·课程设计
.千余2 小时前
【C++】C++ map 与 multimap 完全指南:键值对容器详解
开发语言·c++·笔记·学习·其他