让宿舍网络变快—附录:网络抖动排查与实测记录

更新于
约 17 分钟
网络与系统 · 第 3 篇
本页目录

这份附录接在下期软路由配置与多账号聚合之后,主要是博主平时排查宿舍网络问题时留下的命令和实测记录。正常配置时不用跑这里的命令,如果遇到某台设备连不上网、网页偶发打不开或者无线打游戏跳 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 分钟)留下的平时正常基线数据:

采样期间同时看了一下小主机的系统负载:主网口平均流量约 12Mbps,单核 CPU 最高占用约 13%,USB 网卡和内核 softnet_stat 都没有出现丢包计数增长,连接跟踪表占用 1287/65536,小主机本身的转发余量还是很大的。

3. 为什么以前也有“定时检测”,却查不清那几秒的卡顿?

博主自己的 Web 面板里带了一个后台定时检测脚本(router-panel-smart-balance.service),翻系统日志能看到它之前做过几次自动调整权重的动作:

不过当时写这个检测脚本时留了几个不够完善的地方:

  1. 检测间隔比较长:大约 70 秒才跑一轮,每轮每个网口只 ping 2 次,如果中间只有两三秒的短暂波动很容易漏掉;
  2. 单次偶发超时容易触发降权:只 ping 2 次的话,偶发超时 1 次就会算成 50% 丢包,导致脚本把权重降下来、下一轮又马上恢复;
  3. 每次只覆盖保存最新一轮的延迟数据: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. 对照日志看问题出在哪一段


三、直连校园网 vs 经过软路由:NAT 类型实测对比

为了搞清楚多接一层软路由对打游戏到底有多大影响,博主用 STUN 脚本分别测了“电脑接在宿舍路由器后面(经过 Debian + 无线路由器)”和“电脑插网线直接连校园网”两种情况下的 UDP NAT 表现:

简单来说:

不过在实际进《瓦洛兰特》和《三角洲行动》这类连接官方服务器的网游时,电脑本就是主动连向游戏服务器,因此 NAT3 并不会阻碍正常联机;博主实际对比下来,两边进游戏后的延迟大概只差了 3~4ms,日常玩起来基本没有明显差别。

参考资料与官方文档


分享这篇:

上一篇
除了聊天,普通人还能怎么用 AI?
下一篇
Codex新版使用教程:国产模型也能接入