一日一技:WSL2 网络大逃杀,OpenClaw 连不上 Discord?ProxyChains 才是真神
2026-03-09 更新: OpenClaw 现已原生支持 Discord 代理配置,只需运行
openclaw config set channels.discord.proxy "http://127.0.0.1:7890"即可,不再需要 ProxyChains。以下内容仅作历史参考。

如果你也遇到这种问题,且你的 Telegram 是正常工作的,你只需要把这篇文章的 URL 发给 OpenClaw 就好了。它自己会根据这个说明,帮你解决问题的。
在 WSL2 中部署 OpenClaw Agent 本应该是一件轻松愉快的事情,直到我撞上了一堵看似无形的墙:Discord Gateway 连接超时。
如果你也在 WSL 里跑 Node.js 应用,并且遇到了莫名其妙的 ETIMEDOUT 或 ECONNRESET,甚至你已经设置了 http_proxy 环境变量却依然无效,那么这篇文章可能会救你一命。
我们来看一眼报错日志:
1 | [discord] gateway error: Error: connect ETIMEDOUT 31.13.92.5:443 |
仔细看这个 IP 31.13.92.5,这根本不是 Discord 的 IP(这看起来像是 Facebook 的段)。这是典型的 DNS 污染 症状。
明明我在 systemd 服务里已经设置了 http_proxy,为什么还会解析到错误的 IP?
为什么环境变量没用?
很多同学(包括之前的我)都认为,只要设置了 export http_proxy=http://127.0.0.1:7890,所有的网络请求就会乖乖走代理。
但事实并非如此。
Node.js 的某些网络库(特别是涉及到 WebSocket 握手时),并不一定会完全遵循系统的 HTTP 代理设置进行 DNS 解析。也就是说,它可能先在本地进行了 DNS 查询,拿到了一个被污染的 IP(比如上面的 31.13.x.x),然后试图通过代理(或者直连)去连接这个错误的 IP。
结果就是:连不上,死活连不上。
失败的尝试:Clash Tun 模式
既然应用层代理管不住 DNS,那我用 Tun 模式接管系统层流量总行了吧?我开启了 Clash 的 tun 模式,试图让它劫持所有流量。
结果是更严重的失败。
WSL2 的网络环境本身就是经过一层虚拟化的,再加上 Tailscale 的虚拟网卡,再叠加上 Clash 的 Tun 网卡……路由表乱成了一锅粥。要么是端口冲突(53 端口被 systemd-resolved 占用),要么是流量死循环。
在被 Tun 模式折磨得焦头烂额时,我决定回归最原始、最暴力的应用层劫持方案。
最终解法:ProxyChains-NG (真神降临)
ProxyChains 是一个的神器,它的原理是通过 LD_PRELOAD 钩住 libc 的网络相关函数(如 connect, gethostbyname),强制将 socket 流量塞进 SOCKS5 代理。
它有两个巨大的优势:
- 无视路由表:它不依赖复杂的系统路由,直接在进程级别接管。
- Remote DNS:它能强制将 DNS 请求通过代理发送(
proxy_dns选项),彻底解决了本地 DNS 污染得到假 IP 的问题。
也就是说,OpenClaw 以为自己连的是 discord.com,实际上 ProxyChains 帮它在代理服务器端完成了正确的解析。
操作步骤
1. 安装 ProxyChains
1 | sudo apt install proxychains4 |
2. 编写配置文件
我们需要一个独立的配置,指向 WSL 本地运行的 Clash(假设你的 Clash 跑在 127.0.0.1:7890):
创建一个文件 ~/proxychains_openclaw.conf:
1 | strict_chain |
注意那个 proxy_dns,这行配置是解决 DNS 污染的关键。
3. 修改 Systemd 服务
在你的服务文件(例如 ~/.config/systemd/user/openclaw-gateway.service)中,用 proxychains4 包裹启动命令:
1 | [Service] |
4. 重启服务
1 | systemctl --user daemon-reload |
见证奇迹
重启后,查看日志,你会发现 ProxyChains 开始疯狂输出绿色的 OK:
1 | [proxychains] Strict chain ... 127.0.0.1:7890 ... 127.0.0.1:7890 ... OK |
连接成功!
在 WSL2 这种本身网络结构就比较奇特,且伴随着 DNS 污染的环境下,与其费劲去调教全局路由(Tun),不如直接用 ProxyChains 进行精准打击。它简单、粗暴,且极其有效。
如果你也遇到了类似的问题,别犹豫,ProxyChains 才是真神。