Moku

连接老是断?

一次 SSH 连接要穿过好几层网络,任何一层抖一下都会断。先定位是哪一层,再把对应的修复任务整段复制给你电脑上的 agent。

先分清:断的是哪一侧

同一个「断线」,修的地方完全不同。对照一下:

只有手机切 Wi-Fi/蜂窝、锁屏之后断手机侧,正常,等自动重连
断的时候,电脑上什么网站都打不开电脑的上游:路由器或宽带在抖
电脑一切正常,只有 SSH 会话断电脑侧:省电、IPv6、sshd 配置
同局域网直连很稳,走远端(Tailcat、公网)才断运营商 NAT 或中继路径

「电脑侧」指的是被连的那台机器——跑 sshd 或 Tailcat 的那台。它出问题时,所有客户端一起断。

电脑侧三个高频坑

  1. Wi-Fi 省电模式:网卡周期性休眠几秒,长连接就断了。
    iw dev wlp0 get power_save

    显示 on 就是它(网卡名按 ip link 里的实际名称改)。

  2. IPv6 临时地址轮换:系统不停换地址,组网工具跟着全线重绑。
    ip -6 addr show | grep temporary

    地址隔一阵就变、还越攒越多,就是它。

  3. DHCP 租约太短(比如 1 小时):每半小时刷新一次路由。单看无害,叠加上面两个会放大成断连——去路由器后台把租约调长。

Windows:设备管理器 › 网络适配器 › 电源管理,关掉「允许计算机关闭此设备以节约电源」。macOS 一般没有这个坑。

交给 agent:两段可直接复制的任务

在被连的那台电脑上,把下面整段发给正在运行的 AI agent(Devin、Claude Code、Codex 都行)。它会先检查再动手,需要权限时会把命令还给你。

任务一 · 只诊断,不改东西
帮我排查这台电脑 SSH 频繁断开的原因,先只诊断、不改任何设置:
1. 查近 3 天日志:NetworkManager 的 DHCP 续约和连接事件、wpa_supplicant 的 deauth/断连记录;
2. 装了 tailscale/tailcat/zerotier 等组网工具的话,统计它们的 LinkChange、rebind、中继重连,以及 netcheck 全部协议失败(udp=false)的时间点;
3. ping 默认网关和一个公网 IP 各 20 个包,看丢包和延迟;
4. 判断抖动在「本机 Wi-Fi/系统」「路由器/宽带上游」还是「对端设备」哪一侧,给出证据和结论。
任务二 · 诊断 + 修复(Linux,在线生效)
帮我排查并修复这台电脑 SSH 频繁断开的问题。分两阶段:

第一阶段「诊断」,只读不改:
1. 查近 3 天日志中 NetworkManager 的 DHCP 续约、wpa_supplicant 的 deauth 记录;
2. 装了组网工具(tailscale/tailcat 等)的话,统计 LinkChange、rebind、中继重连和 netcheck 全失败的时间点;
3. ping 网关和公网 IP 各 20 个包;
4. 判断抖动在「本机」「路由器/宽带上游」「对端设备」哪一侧,给证据。

第二阶段「修复」,全部在线生效,禁止断开 Wi-Fi 关联或重启网络服务:
5. 关 Wi-Fi 省电并持久化(iw power_save off + NetworkManager 连接 powersave=2);
6. 停 IPv6 临时地址轮换(sysctl use_tempaddr=0 + 连接 ip6-privacy=0 + 删除现有 temporary 地址);
7. 在 /etc/ssh/sshd_config.d/ 下加 ClientAliveInterval 60 和 ClientAliveCountMax 3,reload sshd;
8. 每项改完验证当前值,最后汇报「现象→改动→验证结果」。需要 root 而你没有权限时,停下来把命令给我。

任务二里也写了诊断步骤:agent 会先查再修,修到哪步停在哪步都有据可查。

改不了的部分:运营商 NAT

很多宽带(尤其移动、校园网)和手机蜂窝都是大内网 NAT:你的 UDP 出门时映射到一个共享公网端口,这个映射会被运营商不定期换掉。Tailcat 这类靠 UDP 直连的工具,映射一换直连路径就死,只能退回中继重握手——表现是「顿一下又好了」或「老要重连」。

手机侧:大多不用修