我们有一个入门级企业无线路由器TP-Link TL-WVR1300G(中文页面)我们在B市有两台物理服务器,分别位于A市和B市,并且我们在这两台服务器之间通过互联网建立了VoIP(SIP)中继。
直到最近几天,一切都很好:这个 VoIP 中继上的语音质量变得非常差,以致通话的双方无法听到对方的声音(或者一方可以听到另一方的声音,但反之亦然)。
一开始以为是网络不好或者有人占用了大带宽导致的,但是经过后面的检查和诊断,并不是这个原因。
检查和诊断
当语音质量不佳时,
- A市的互联网总流量并没有达到ISP提供的全部带宽,甚至连一半的带宽都没有达到。
- 我可以从 A 城市的服务器 ping 通 B 城市的路由器的 IP 地址,但我会得到很大的数据包丢失率(>10%,我甚至有一次得到了 63%,每 5 分钟 ping 100 次)。虽然我不会得到每 5 分钟超过 10% 的数据包丢失率,但仍然很多。
- B市的员工可能同时遇到网速慢的情况。
- 我无法使用流行的浏览器访问路由器的Web管理页面——没有响应。
实际上,如果我使用
curl
命令访问路由器的 Web 管理页面的主页在早晨,我可以得到响应。然后我尝试使用它wget -r
来获取路由器的整个站点,它在访问一个 .png 文件时挂起:/webpages/themes/neoteric/img/password_unshow.png
。--2018-11-18 13:43:03-- http://172.18.1.1/webpages/themes/neoteric/img/password_unshow.png 正在连接 172.18.1.1:80... 已连接。 已发出 HTTP 请求,正在等待回应... 200 OK 长度:3365 (3.3K) [image/png] 正在保存至: “172.18.1.1/webpages/themes/neoteric/img/password_unshow.png” 172.18.1.1/webpages/themes/neoteric/img/password_unshow.png 100%[======================================================================>] 3.29K 660 B/s 用时 5.6s 2018-11-18 13:43:08 (600 B/s) - 在 3372/3365 字节处发生读取错误 ((null))。重试中。 --2018-11-18 13:43:09-- (尝试次数: 2) http://172.18.1.1/webpages/themes/neoteric/img/password_unshow.png 正在连接 172.18.1.1:80... 已连接。 已发出 HTTP 请求,正在等待回应... ^C
现在,即使使用命令行访问,直到第二天早上 08:00 才可以访问路由器的 Web 管理页面(无响应)。
但是看看
wget
报告的字节范围:2018-11-18 13:43:08 (600 B/s) - 在 3372/3365 字节处发生读取错误 ((null))。重试中
。png 文件的大小为 3365 字节,但wget
尝试读取大于文件大小的 3372 字节(结果为空),为什么?- 于是我禁用了 Firefox 中的加载图像选项(将
permissions.default.image
值更改为2
about:config 页面中的值),第二天访问路由器的 Web 管理页面,没有问题。我发现有一个名为“自动清理”的配置,它被安排在每天早上 08:00(这就是路由器自动自我修复的原因)。 - 在周末,B市没有员工值班的时候,即使路由器的Web管理页面无法访问,ping的丢包率也很低。
问题)
- 路由器访问
password_unshow.png
文件时不响应HTTP请求,是不是硬件故障(flash memory故障?)的现象? - 造成数据包丢失率较高的可能原因有哪些?
更新 2018-11-21
我尝试了python脚本https://github.com/coincoin7/Wireless-Router-Vulnerability/blob/master/TplinkDiagnosticAuthenticatedRCE.txt,并使用 登录路由器telnet
,它运行的是OpenWRT变体,我发现复制一些图像文件时出现IO错误:
root@TP-LINK:/etc/config# uname -a
Linux TP-LINK 3.3.8 #1 Wed Oct 19 19:14:51 CST 2016 mips GNU/Linux
root@TP-LINK:/etc/config# cat /etc/openwrt_version
14.07
root@TP-LINK:/etc/config# cat /etc/openwrt_release
DISTRIB_ID="OpenWrt"
DISTRIB_RELEASE="Barrier Breaker"
DISTRIB_REVISION="r38802"
DISTRIB_CODENAME="barrier_breaker"
DISTRIB_TARGET="ar71xx/generic"
DISTRIB_DESCRIPTION="OpenWrt Barrier Breaker 14.07"
DISTRIB_TAINTS="no-all no-ipv6 busybox"
root@TP-LINK:~# ll /www/webpages/themes/neoteric/img/password_unshow.png
-rw-rw-r-- 1 root root 3365 Oct 8 2016 /www/webpages/themes/neoteric/img/password_unshow.png
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/password_unshow.png /tmp
cp: read error: Input/output error
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/password_shown.png /tmp
cp: read error: Input/output error
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/tp-link.png /tmp
cp: read error: Input/output error
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/icons-02.png /tmp/
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/icons-01.png /tmp/
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/loading.gif /tmp/
root@TP-LINK:~# cp -p /www/webpages/themes/neoteric/img/refresh.png /tmp/
cp: read error: Input/output error
因此,看起来闪存出现故障了。