1) 在本地终端运行连续ping与traceroute:ping -f -w 20 203.x.x.x(台湾目标IP)或使用 ping 服务器 -c 100 来观察丢包与延迟抖动;traceroute -n 203.x.x.x 查看路径跳数,确认是否在第几跳丢包。
2) 查看本机日志与路由器日志:Linux 上用 journalctl -u openvpn@client -f(或 wg 日志)、dmesg | tail ;路由器(OpenWrt)查看日志 /var/log/messages。
3) 确认掉线场景:是全天候掉线、高峰期掉线、还是特定端口/协议(TCP/UDP)掉线。这决定后续调整策略。
1) 换网段与链路测试:直接把电脑连到光猫/调制解调器,绕过路由器,以排除家庭路由器问题。
2) 同网段其它设备测试:用手机开热点或用不同ISP(例如手机流量/另一条宽带)对比,判断是否为上游运营商对台湾出口丢包或路由不稳定。
3) 检查光纤/DSL信号强度与误码率,必要时重启光猫或联系ISP做上游线路检查。
1) 禁用不必要的防火墙层级,确保UDP/TCP所需端口在WAN/NAT处放通;查看 /etc/config/firewall。
2) 固定设备IP并在路由器上开启策略路由或IP规则,确保到台湾IP的流量走同一路由器出口,避免多路径切换导致会话中断。
3) 在路由器上设置更长的连接追踪超时(conntrack):sysctl -w net.netfilter.nf_conntrack_tcp_timeout_established=86400,避免被路由器过早清理连接。
1) OpenVPN:
- 在客户端配置中加入:keepalive 10 60(等于 ping 10s 超过 60s 重启),ping-restart 90,reneg-sec 0(关闭频繁重协商),mssfix 1400,tun-mtu 1400,explicit-exit-notify 1。
- 在服务端增加相应的keepalive与compress/mtu设置,确保两端一致。
2) WireGuard:
- 在客户端 peer 配置中设置 PersistentKeepalive = 25,确保NAT设备/防火墙不会将UDP会话过早清理。
- 若使用 UDP 丢包,考虑在两端启用在应用层的重传或在隧道外做心跳检测脚本。
1) MTU 调优:在Linux上用 ip link set dev eth0 mtu 1400(或在VPN接口上设置)逐步尝试1400、1420、1500,找到零分片且延迟最低的值。
2) MSS clamp:在路由器/iptables上加规则避免分片,示例:iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu。
3) DNS 验证:将DNS改为台湾或稳定的公共DNS(例如 1.1.1.1 / 8.8.8.8 以及目标提供商的DNS),避免因DNS解析错误导致“看似掉线”。使用 dig +trace 验证解析链。
1) 简易ping-watch脚本(/usr/local/bin/tw-watch.sh):
#!/bin/bash TARGET=203.x.x.x COUNT=5 if ! ping -c $COUNT -W 2 $TARGET >/dev/null; then logger "TW-WATCH: $TARGET unreachable, restarting wg/openvpn" systemctl restart wg-quick@wg0.service 2>/dev/null || systemctl restart openvpn-client@client.service fi
2) 用crontab 每分钟调用:*/1 * * * * /usr/local/bin/tw-watch.sh(或用systemd timer更可靠)。
3) 更完善的方式:写 systemd 服务(tw-watch.service)和 timer,service 会在失败时写日志并限制重启频率,避免重启风暴。
1) /etc/systemd/system/tw-watch.service:
[Unit] Description=TW IP Watchdog After=network-online.target [Service] Type=oneshot ExecStart=/usr/local/bin/tw-watch.sh
2) /etc/systemd/system/tw-watch.timer:
[Unit] Description=Run TW Watch every 1 minute [Timer] OnBootSec=1min OnUnitActiveSec=1min [Install] WantedBy=timers.target
3) 启用并启动:systemctl daemon-reload; systemctl enable --now tw-watch.timer;检查日志:journalctl -u tw-watch.service -f。
1) 更换千兆级路由器或升级路由器固件(例如 OpenWrt 最新稳定版),老旧路由器可能在NAT/加密高载时掉包。
2) 使用有线优先:避免Wi‑Fi干扰,必要时调整2.4/5GHz信道或启用WMM/高优先级策略。
3) 若是VPS/服务器端台湾出口不稳,建议更换台湾数据中心的节点或使用多出口负载(负载均衡/备份线路),并在客户端配置多节点自动切换策略。
答:首要排查项是确认网络路径是哪一端出现问题:先在本地做ping/traceroute看是哪一跳丢包,再尝试直接连光猫排除家庭路由器问题;若上游到运营商或国际出口层面丢包,需联系ISP或更换出口节点。同时检查VPN配置(keepalive、MTU)与路由器的conntrack超时设置。
答:在客户端可做的最有效策略包括:为WireGuard设置 PersistentKeepalive=25;为OpenVPN设置 keepalive、ping-restart、mssfix和tun-mtu;本地部署watchdog脚本加systemd timer定时检测并重启VPN;调整本地MTU/MSS和DNS;必要时在多个台湾出口间做自动切换或使用备份(脚本轮询不同VPN配置文件)。
答:通过 ping 带DF标志测试分片:ping -M do -s 1472 203.x.x.x(1472+28=1500)逐步减小包大小,找到最大不分片的值,然后将MTU设置为该值+28或更保守的1400。对VPN接口使用 tun-mtu/mssfix,路由器上加TCPMSS clamp 规则以避免分片导致的连接重置。