当前是2026年6月份,官方的WSL2/SSH可以正常连接使用
一、问题概述
在 Trae IDE 原生 WSL 直连模式下,出现 AI 对话功能报错(错误码 997:请求服务失败),但 Windows 本地网络、WSL2 的 SSH 连接均正常。核心故障根源为 WSL2 开启 systemd 后 DNS 解析机制异常,导致运行在 WSL 内部的 Trae 服务端进程无法访问国内 Trae 服务器。
二、故障现象汇总
- Trae 功能异常 :本地窗口对话正常,连接 WSL2 后立即报「请求服务失败,请检查网络后重试 (997)」

- 网络表现分化:Windows 侧浏览器、其他软件上网完全正常;WSL2 内部执行网络请求全部失败
- DNS 配置反复失效 :手动修改
/etc/resolv.conf后临时生效,WSL 重启后自动还原为127.0.0.53 - 典型报错信息 :
- 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 缓存功能,符合官方设计规范。
操作步骤:
-
编辑 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 -
重载配置并重启服务
sudo systemctl daemon-reload
sudo systemctl restart systemd-resolved -
确认软链接指向正确
sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf
-
验证配置生效
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 网络,提升连接稳定性
七、验证与恢复步骤
- 执行
curl -I https://trae.ai,确认返回 200 状态码 - 执行
wsl --shutdown重启 WSL,再次验证 DNS 配置未被覆盖 - 打开 Trae IDE 连接 WSL,发送测试对话,确认 997 错误消失
补充:
这里是我自己遇到网络问题后走的弯路,实际配置后是否真的起作用?待定,核心还是WSL2内虚拟机问题





