这份附录接在下期软路由配置与多账号聚合之后,主要是博主平时排查宿舍网络问题时留下的命令和实测记录。正常配置时不用跑这里的命令,如果遇到某台设备连不上网、网页偶发打不开或者无线打游戏跳 Ping,可以按下面的步骤排查。
说明:主文是整理后的新建配置教程,而博主自己宿舍现有的机器上还跑着早期写的旧版标记和 Web 面板服务(
router-panel-smart-balance.service),下面涉及两套配置差异的地方会顺手标出来。
一、搭建过程中不通,先查哪一段?
1. Debian 自己能上网,后面的手机电脑不能上网
先看手机或电脑有没有正确拿到 IP、网关和 DNS,再依次看小主机的 DHCP 服务、内核转发开关和防火墙 NAT 规则有没有生效:
systemctl status dnsmasq --no-pager
sysctl net.ipv4.ip_forward
nft list table inet dorm_filter
nft list table ip dorm_nat
如果电脑能 ping 通外网 IP(比如 223.5.5.5)但打不开网页,一般是 DNS 解析没通,重点看 dnsmasq 状态和网卡获取到的 DNS 地址。
2. 多出口后,网页有时正常、有时转圈
多账号分流后如果出现“刷新一下能打开、再点一个链接又一直转圈”,最常见的原因是其中某个舍友账号掉线、欠费或者路由表没同步上,导致分到那个出口的新连接打不开:
ip -br -4 addr
ip -4 rule show
ip -4 route show table 102
curl --noproxy '*' --interface wan2 --connect-timeout 5 --max-time 10 -I https://www.baidu.com/
把上面的 wan2 依次换成 enp1s0、wan2~wan5 测一遍。发现哪个网口不通,就先跑一次 python3 /usr/local/sbin/dorm-portal-login.py 网口名 重新认证;如果是那个舍友的账号欠费停机了,先把 /etc/nftables.d/dorm-lb.nft 里对应那个出口的标记(比如 0x10002)改成主账号的 0x10001,重新 nft -f 加载一下,新的连接就不会再往那个失效出口上分了。
3. 只在自己电脑上开代理,也会受出口分流影响吗?
会的。电脑上开的代理客户端往外连的时候,在小主机看来也是普通的 TCP 连接。虽然单条连接不会中途换 IP,但客户端同时新建的多条连接还是会被分到不同的校园网账号上。如果遇到某个外部节点在部分账号下连不上,可以在 dorm-lb.nft 的新建连接选路之前,把发往该目标 IP 的流量单独打标固定到主账号上。
4. 有线正常,只有无线设备跳延迟
如果插网线的电脑很稳,只有连 Wi-Fi 的电脑偶尔跳 Ping,可以在卡顿的那台电脑上同时 ping 无线路由器(192.168.20.1)和小主机(192.168.10.1),看看延迟到底是在无线路由器这一段跳起来的,还是在小主机往外走的那一段跳起来的。具体记录脚本放在下面第二节。
二、室友喊“网卡了”,怎么留下能分析的现场?
这段是博主平时排障留下的记录。我们寝室是 6 人寝,2 台电脑接网线,其余连 Wi-Fi,平时大家玩《三角洲行动》和《瓦洛兰特》。最难查的不是彻底断网,而是“刚才突然卡了两秒,等你过来测又好了”。这时候光跑一次测速看不出问题,得边用边把各段的延迟记下来。
1. 先核对游戏实际走哪条路,别把别的出口测通就当游戏正常
在博主的机器上,公网 UDP 流量走的固定路径是:
室友设备 → TP-Link 普通路由模式 → Debian
→ 数据包标记 0x66 → 路由表 166 → 主出口 enp1s0
(注:博主现有机器上的旧规则是用 0x66 标记 UDP,而主文教程里统一简化成了 0x10001,两边查的都是 166 号路由表。)
# 查看策略路由规则与 166 号路由表
ip -4 rule show
ip -4 route show table 166
# 按主文配置的机器:查看 0x10001 标记走的出口
ip -4 route get 223.5.5.5 mark 0x10001
# 博主现有机器上的旧规则查表
ip -4 route get 223.5.5.5 from 192.168.10.102 \
iif enx00e04c112233 mark 0x66
另外要注意,普通的 ping 命令走的是 ICMP 协议,不是 UDP,所以从小主机上测延迟的时候记得加上 -I enp1s0 绑定主出口去测。
2. 一次实际同步测量:先建立基线,再等异常来对照
下面是博主从 Debian 小主机同时对四条路径各 ping 120 次(间隔 0.5 秒,共 1 分钟)留下的平时正常基线数据:
- 小主机 → 无线路由器 WAN 口(
192.168.10.102):120 次全通,平均延迟0.653ms,P95 为0.812ms,最大1.02ms; - 主网口 → 校园网网关(
10.100.0.1):120 次全通,平均延迟0.858ms,P95 为1.27ms,最大2.22ms; - 主网口 → 阿里公共 DNS(
223.5.5.5):120 次全通,平均延迟6.413ms,P95 为6.93ms,最大7.68ms; - 主网口 → 腾讯公共 DNS(
119.29.29.29):120 次全通,平均延迟14.667ms,P95 为15.2ms,最大21ms。
采样期间同时看了一下小主机的系统负载:主网口平均流量约 12Mbps,单核 CPU 最高占用约 13%,USB 网卡和内核 softnet_stat 都没有出现丢包计数增长,连接跟踪表占用 1287/65536,小主机本身的转发余量还是很大的。
3. 为什么以前也有“定时检测”,却查不清那几秒的卡顿?
博主自己的 Web 面板里带了一个后台定时检测脚本(router-panel-smart-balance.service),翻系统日志能看到它之前做过几次自动调整权重的动作:
- 10 月 16 日 23:53:01:主 WAN 权重从 6 降到 5,约一分钟后(23:54:11)恢复为 6;
- 10 月 17 日 00:00:11:
wan2从负载均衡列表里临时移除,00:01:23 重新加入(权重 1),00:02:34 恢复为权重 2; - 10 月 17 日 13:11:16:
wan4权重从 2 降为 1,随后在 13:12:24 恢复为 2。
不过当时写这个检测脚本时留了几个不够完善的地方:
- 检测间隔比较长:大约 70 秒才跑一轮,每轮每个网口只 ping 2 次,如果中间只有两三秒的短暂波动很容易漏掉;
- 单次偶发超时容易触发降权:只 ping 2 次的话,偶发超时 1 次就会算成 50% 丢包,导致脚本把权重降下来、下一轮又马上恢复;
- 每次只覆盖保存最新一轮的延迟数据:
route_policy.json里只留了最新状态,日志里只记了改完后的权重,没把当时的每次延迟存下来。
平时如果想看认证保活的日志,可以用下面这几条 journalctl 命令:
# 查看日志保留的时间范围
journalctl --list-boots --no-pager
# 查看主文配的认证保活服务日志
journalctl -u dorm-auth@enp1s0.service \
--since '2026-10-17 00:00:00' --until '2026-10-17 00:10:00' \
-o short-iso --no-pager
# 仅安装过 Web 面板自动调权服务的机器使用
journalctl -u router-panel-smart-balance.service \
--since '2026-10-16 23:50:00' --until '2026-10-17 00:10:00' \
-o short-iso --no-pager
4. 在电脑和小主机上同时记录分段延迟
如果某台连 Wi-Fi 的电脑打游戏偶尔跳延迟,直接在这台电脑上开两个 PowerShell 窗口,同时记录到无线路由器(192.168.20.1)和到小主机(192.168.10.1)的连续 Ping 日志。
第一步:先在 Windows 电脑上确认当前走的是哪张网卡
Get-NetIPConfiguration
Find-NetRoute -RemoteIPAddress 192.168.20.1
Find-NetRoute -RemoteIPAddress 192.168.10.1
(注意如果笔记本同时插着网线又连着 Wi-Fi,系统一般默认优先走有线,测无线之前先确认一下。)
第二步:打开两个 PowerShell 窗口,带时间戳记录到桌面日志文件(按 Ctrl+C 停止)
窗口一,测电脑到无线路由器:
$desktop = [Environment]::GetFolderPath('Desktop')
$log = Join-Path $desktop ('ping-tplink-' + (Get-Date -Format 'yyyyMMdd-HHmmss') + '.log')
ping.exe -4 -t -w 1000 192.168.20.1 |
ForEach-Object { '{0} {1}' -f (Get-Date -Format o), $_ } |
Tee-Object -FilePath $log
窗口二,测电脑经过 TP-Link 到 Debian:
$desktop = [Environment]::GetFolderPath('Desktop')
$log = Join-Path $desktop ('ping-debian-' + (Get-Date -Format 'yyyyMMdd-HHmmss') + '.log')
ping.exe -4 -t -w 1000 192.168.10.1 |
ForEach-Object { '{0} {1}' -f (Get-Date -Format o), $_ } |
Tee-Object -FilePath $log
第三步:在小主机上同步记录主出口延迟与网卡计数
先把下面的网卡名、路由器 WAN 口地址(
192.168.10.102)和校园网网关(10.100.0.1)换成你自己的实际地址:
(
umask 077
WAN=enp1s0
LAN=enx00e04c112233
AP_WAN=192.168.10.102
CAMPUS_GW=10.100.0.1
out="$HOME/jitter-$(date +%Y%m%d-%H%M%S)"
mkdir -p "$out" || exit 1
pids=()
ping -n -D -I "$LAN" -c 120 -i 0.5 -W 1 "$AP_WAN" > "$out/tplink.log" 2>&1 &
pids+=("$!")
ping -n -D -I "$WAN" -c 120 -i 0.5 -W 1 "$CAMPUS_GW" > "$out/campus.log" 2>&1 &
pids+=("$!")
ping -n -D -I "$WAN" -c 120 -i 0.5 -W 1 223.5.5.5 > "$out/public-ali.log" 2>&1 &
pids+=("$!")
ping -n -D -I "$WAN" -c 120 -i 0.5 -W 1 119.29.29.29 > "$out/public-dnspod.log" 2>&1 &
pids+=("$!")
for ((i=0; i<60; i++)); do
date -Is
ip -s link show dev "$WAN"
ip -s link show dev "$LAN"
tc -s qdisc show dev "$WAN"
tc -s qdisc show dev "$LAN"
grep '^cpu' /proc/stat
cat /proc/net/softnet_stat
sleep 1
done > "$out/counters.log" 2>&1
for pid in "${pids[@]}"; do wait "$pid" || true; done
printf 'Logs saved to: %s\n' "$out"
)
5. 对照日志看问题出在哪一段
- 无线电脑到路由器(
192.168.20.1)延迟已经飙高,而插网线的电脑很稳:说明问题出在无线 Wi-Fi 这一段(比如无线信道干扰、笔记本网卡省电设置或天线遮挡); - 电脑到路由器很稳,但到小主机(
192.168.10.1)延迟飙高:重点看路由器到小主机之间的网线和 USB 网卡状态; - 内网两段都很稳,小主机到校园网网关(
10.100.0.1)和外网同时飙高:说明是校园网本身的上游链路波动,或者主账号带宽正被大流量占满; - 网络延迟一直很稳,但游戏画面突然顿一下:一般是电脑本地掉帧或者后台程序抢占,可以在游戏里打开帧时间(Frame Time)和网络 RTT 统计区分一下。
三、直连校园网 vs 经过软路由:NAT 类型实测对比
为了搞清楚多接一层软路由对打游戏到底有多大影响,博主用 STUN 脚本分别测了“电脑接在宿舍路由器后面(经过 Debian + 无线路由器)”和“电脑插网线直接连校园网”两种情况下的 UDP NAT 表现:
- 电脑直连校园网(源地址
10.100.xxx.108,网关10.100.0.1):跨多个 STUN 服务器的公网映射端口保持一致;新建套接字在没有主动联系过备用 IP / 端口的情况下,依然能直接收到对方发来的回包。属于端点无关映射 + 端点无关过滤(即全锥型 Full Cone,常说的 NAT1)。 - 电脑经过宿舍软路由与无线路由器(源地址
192.168.20.104):跨多个服务器的公网映射端口同样保持一致;但新建套接字时,只有电脑先主动联系过的远端 IP 和端口才能回包,换 IP 或换端口的主动回包会被拦截。属于端点无关映射 + 端口受限过滤(即端口受限型 Port-Restricted,常说的 NAT3)。
简单来说:
- 电脑直连校园网时,上游表现为 全锥型 NAT(常说的 NAT1),外部任何地址和端口都能主动往映射出来的端口发包;
- 经过宿舍软路由和无线路由器后,因为 Linux
nftables默认的masquerade状态防火墙策略,只有电脑主动联系过的远端 IP 和端口才能回包,所以表现为 端口受限型 NAT(常说的 NAT3)。
不过在实际进《瓦洛兰特》和《三角洲行动》这类连接官方服务器的网游时,电脑本就是主动连向游戏服务器,因此 NAT3 并不会阻碍正常联机;博主实际对比下来,两边进游戏后的延迟大概只差了 3~4ms,日常玩起来基本没有明显差别。
参考资料与官方文档
- Linux 手册:tc-fq_codel(8)(本地队列管理与适用范围)
- Riot Games:VALORANT Game and Network Instability Basics(游戏内统计数据、网络异常与客户端/服务器性能异常的区分)
- IETF:RFC 4787、RFC 5780(UDP NAT 映射与过滤行为的区分及探测方法)