🛑 问题现象
你是否遇到过这种情况:
- 家里宽带上行有 30Mbps+,但异地组网(ZeroTier)传输文件只有 300K-500K/s。
- 使用 DDNS + 端口转发直接访问群晖 NAS,看视频依然卡顿,下载速度同样被锁死在 500K 左右。
- 上传网盘速度正常(多线程),但单线程传输极慢。
- Ping 值正常(几十毫秒),但传大文件就崩。
如果全中,这通常不是运营商的问题,而是 MTU(最大传输单元) 和 MSS(最大分段大小) 设置不匹配导致的“大包阻塞”。本文将基于 iStoreOS(OpenWrt)提供全套解决方案。
🛠 第一步:诊断 ZeroTier 连接状态
首先确认你的 ZeroTier 是直连(Direct)还是中继(Relay)。
- SSH 登录路由器后台。
- 输入命令查看节点:Bash
zerotier-cli peers注意:如果提示missing port错误,说明配置文件路径非标准或服务假死。尝试指定路径:zerotier-cli -D/etc/config/zero peers或重启服务。 - 分析结果:
- LINK 显示 RELAY:走了中继服务器,速度慢是正常的。请检查防火墙是否开启 FullCone-NAT。
- LINK 显示 DIRECT:已经直连(通常走 IPv6),但速度依然慢?请直接看第二步,这是 MTU 在作祟。
🚀 第二步:修改 ZeroTier 接口 MTU (核心修复)
在 IPv6 环境或某些运营商网络下,ZeroTier 默认的 MTU(通常为 2800)过大,导致数据包分片或被丢弃。
临时验证
- 查找 ZeroTier 虚拟网卡名称:Bash
ifconfig找到zt开头的网卡(如ztcfwxtj4s)。 - 强制将 MTU 修改为 1280(IPv6 安全下限):Bash
ifconfig ztcfwxtj4s mtu 1280 - 立刻测速:此时传输文件,速度应该瞬间恢复正常。
永久生效(iStoreOS 设置)
- 进入 网络 -> 接口。
- 找到 ZeroTier 的接口,点击 修改。
- 在 高级设置 中,找到 覆盖 MTU,填入
1280。 - 保存并应用。
🛡 第三步:开启 MSS 钳制 (修复 NAS 直连慢)
如果你不走 ZeroTier,而是用 DDNS + 端口转发访问 NAS 也很慢,这是因为 PPPoE 拨号环境下,TCP 包头过大导致被运营商丢包。
命令行暴力开启(推荐,最稳)
iStoreOS 界面可能隐藏了此选项,直接 SSH 执行以下命令,强制全局开启:
Bash
uci set firewall.@defaults[0].mss_clamping='1'
uci commit firewall
/etc/init.d/firewall restart
网页端设置(如果能找到)
- 进入 网络 -> 防火墙。
- 勾选 MSS 钳制 (MSS Clamping)。
- 保存并应用。
原理:开启后,路由器会自动调整通过的数据包大小,确保它们能顺利通过运营商的管道。
⚠️ 常见坑点排查
1. ZeroTier 服务“假死”
如果 zerotier-cli 报错,且进程里有僵尸进程,按以下步骤重置:
Bash
# 杀掉卡死的进程 (PID换成你实际查到的)
kill -9 [PID]
# 确保配置启用
uci set zerotier.@zerotier[0].enabled='1'
uci commit zerotier
# 重启服务
/etc/init.d/zerotier restart
2. 测速误区
不要挂着 OpenClash/PassWall 测速!
- 现象:Speedtest 自动连到台湾或国外服务器,延迟高,丢包严重。
- 解决:暂时关闭所有代理插件,使用
./speedtest -s [本地电信ID]指定国内服务器测速,才能测出真实的物理带宽。
📝 总结
异地组网速度慢,90% 的情况不是带宽不够,而是 “路够宽,但这辆车(数据包)太宽了,卡在隧道口过不去”。
- ZeroTier 慢 👉 改虚拟网卡 MTU 为
1280。 - NAS 直连慢 👉 开启防火墙
MSS 钳制。
只需这两步,即可榨干你的上行带宽。
