我如何记录间歇性互联网中断?

我如何记录间歇性互联网中断?

我有一个连接到 Linksys AX4200 Mesh WiFi 系统的电缆调制解调器。

过去一周,我们注意到互联网断断续续。我很确定这不是 WiFi 问题 - 例如,我的手机会显示 WiFi 信号强,但会将网络标记为无互联网。这种断断续续的特性使得我的 ISP 很难解决这个问题。

我想捕获一些数据以更好地描述中断的频率和持续时间。据我所知,没有可用于此目的的实用程序可直接在路由器或调制解调器上运行。

有哪些好方法可以解决这个问题?

答案1

我正在这样做,以证明我与 ISP 的线路已超额认购。一天中间歇性地,我会遇到严重的数据包丢失,导致 Zoom 通话中断(实际上还有其他任何事情;在使用低延迟、近乎实时的应用程序(如 Zoom)时,这种情况最令人恼火)。

目前,我有一个每分钟运行一次的 cron 作业,mtr用于8.8.8.8

preston@neo:~$ crontab -l | grep 'monitoring' -A 1
# network monitoring
* * * * * /home/preston/netmon.sh
preston@neo:~$ cat /home/preston/netmon.sh 
#!/bin/bash

# -r report mode
# -b both IP and hostname
# -C output CSV form
# -c 60 pings
/usr/bin/mtr -r -b -C -c 30 8.8.8.8 > /home/preston/network-monitoring/$(date +"%Y-%m-%dT%H:%M:%S%:z").csv
preston@neo:~$ find /home/preston/network-monitoring/ -type f -exec cat {} + | grep -v "???" | grep -v "Mtr_Version" | awk -F',' {'print $2","$5","$6","$7'} | grep -v "0.00" | grep "charter" | wc -l
2411

每当出现问题时,它看起来都像这样:

10:38:44 preston@neo:~$ find /home/preston/network-monitoring/ -type f -exec cat {} + | grep -v "???" | grep -v "Mtr_Version" | awk -F',' {'print $2","$5","$6","$7'} | grep -v "0.00" | tail -n 30
1689940356,7,72.14.197.124,36.67
1689940356,9,192.178.44.39,33.33
1689940356,10,dns.google (8.8.8.8),36.67
1689940417,4,lag-21.rcr01ftwptxzp.netops.charter.com (96.34.112.174),96.67
1689940417,5,lag-806.bbr01dllstx.netops.charter.com (96.34.2.32),86.67
1689940417,6,lag-801.prr01dllstx.netops.charter.com (96.34.3.69),93.33
1689940417,8,108.170.225.149,93.33
1689940417,10,dns.google (8.8.8.8),86.67
1689940477,3,lag-58.hcr09ftwbtxff.netops.charter.com (96.34.112.164),23.33
1689940477,4,lag-21.rcr01ftwptxzp.netops.charter.com (96.34.112.174),23.33
1689940477,5,lag-806.bbr01dllstx.netops.charter.com (96.34.2.32),16.67
1689940477,6,lag-801.prr01dllstx.netops.charter.com (96.34.3.69),13.33
1689940477,7,72.14.197.124,16.67
1689940477,8,108.170.225.149,23.33
1689940477,9,192.178.44.39,16.67
1689940477,10,dns.google (8.8.8.8),23.33
1689944136,7,72.14.197.124,3.33
1689946536,7,72.14.197.124,23.33
1689948637,7,72.14.197.124,3.33
1689948696,7,72.14.197.124,36.67
1689949296,7,72.14.197.124,3.33
1689950496,7,72.14.197.124,36.67
1689951036,7,72.14.197.124,6.67
1689951636,7,72.14.197.124,63.33
1689951696,7,72.14.197.124,3.33
1689951936,7,72.14.197.124,53.33
1689952237,7,72.14.197.124,53.33
1689952296,7,72.14.197.124,33.33
1689952836,7,72.14.197.124,73.33
1689953437,7,72.14.197.124,76.67

并非所有这些会议都明确指出了 Charter Communications 存在问题,但16899404171689940477会议肯定指出了问题。例如,

1689940477,3,lag-58.hcr09ftwbtxff.netops.charter.com (96.34.112.164),23.33
1689940477,4,lag-21.rcr01ftwptxzp.netops.charter.com (96.34.112.174),23.33
1689940477,5,lag-806.bbr01dllstx.netops.charter.com (96.34.2.32),16.67
1689940477,6,lag-801.prr01dllstx.netops.charter.com (96.34.3.69),13.33
1689940477,7,72.14.197.124,16.67
1689940477,8,108.170.225.149,23.33
1689940477,9,192.178.44.39,16.67
1689940477,10,dns.google (8.8.8.8),23.33

此会话显示,从第三跳开始(第三跳是)lag-58.hcr09ftwbtxff.netops.charter.com,数据包丢失持续到目的地dns.google (8.8.8.8)。因此,这不仅仅是控制平面监管(CoPP)。

编辑:感谢这里的书呆子狙击,我终于开始编写那个python脚本来分析mtr转储出的所有单独的CSV:)

https://codeberg.org/aspensmonster/packetloss_analysis

答案2

我建议你使用,而不是自己动手烟平,因此我提出了评论问题。它帮助我发现了许多互联网访问质量下降的情况:数据包丢失、高延迟、IPv6 中断、(本地)Cloudflare 中断……

要运行 SmokePing,您需要 Linux/Unix 系统。如果您有 OpenWrt 路由器,它也可能在 OpenWrt 路由器上运行。否则,Raspberry Pi 也可以。由于定制的配置文件格式等,设置有点复杂,但绝对地坚硬的。

您可以浏览“官方”演示实例在这里

在我的配置中(源自默认配置),我有以下内容*** Targets ***

probe = FPing

menu = Top
title = Network Latency Grapher

+ targets
menu = Targets
title = Targets

++ googledns

menu = Google DNS
title = Google DNS via IPv4
host = 8.8.8.8

++ cfdns

menu = Cloudflare DNS
title = Cloudflare DNS via IPv4
host = 1.1.1.1

++ cfdns6

menu = Cloudflare DNS (IPv6)
title = Cloudflare DNS via IPv6
probe = FPing6
host = 2606:4700:4700::1111

除了 FPing(Flood Ping)和 FPing6 之外,还有许多其他可用的探测器。

我将 SmokePing Web UI 作为 FastCGI 服务器运行。它与 Nginx 的连接方式如下:

location = /smokeping/ {
    fastcgi_pass unix:/run/smokeping-fcgi.sock;
    include /etc/nginx/fastcgi_params;
}

服务器使用这个单元文件启动(我可能从某个地方复制过来了,我不记得了):

[Unit]
Description=SmokePing FastCGI Service
After=network.target smokeping.service
Wants=smokeping.service

[Service]
StandardOutput=null
StandardError=journal
ExecStart=/usr/bin/spawn-fcgi -u smokeping -s /run/smokeping-fcgi.sock \
          -M 600 -n -U http -- /srv/http/smokeping/smokeping.fcgi
Restart=always

[Install]
WantedBy=multi-user.target

smokeping.fcgi包含这个:

#!/bin/sh
exec /usr/bin/smokeping_cgi /etc/smokeping/config

相关内容