自从我开始在路由器上使用 openwrt 后,一些奇怪的事情就开始发生。
我通常每天有 4 台设备(2 部手机和 2 台笔记本电脑)连接到 WiFi AP/路由器,但其中一台笔记本电脑(即 XPS 13 9365)突然开始“断开连接”。我之所以引用这个词,是因为理论上我仍然处于连接状态,但网络连接就是停止工作了。
这很奇怪,因为有些日子根本不会出现这个问题,而其他日子则是一场真正的噩梦,连接每隔几分钟就会停止工作。而且只适用于 XPS 13。其他设备运行良好,即使我同时连接了大约 10 个设备。
这是我注意到网络停止后立即得到的结果:
$ sudo iw dev "wlp60s0" link
Connected to **:**:**:**:**:** (on wlp60s0)
SSID: my_ap
freq: 2447
RX: 15583826 bytes (14173 packets)
TX: 1550845 bytes (6382 packets)
signal: -40 dBm
rx bitrate: 144.4 MBit/s MCS 15 short GI
tx bitrate: 144.4 MBit/s MCS 15 short GI
bss flags: short-preamble short-slot-time
dtim period: 2
beacon int: 100
我还有一个 IP 地址等等:
$ ip addr list
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
3: enx00e04c6810ec: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc fq_codel state DOWN group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
5: wlp60s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
link/ether **:**:**:**:**:** brd ff:ff:ff:ff:ff:ff
inet 10.0.0.11/24 brd 10.0.0.255 scope global dynamic wlp60s0
valid_lft 43060sec preferred_lft 43060sec
inet6 fe80::fa63:3fff:fe2f:837/64 scope link
valid_lft forever preferred_lft forever
因此,从上面可以看出,我仍然连接到 AP 并且具有有效的 IP。但无论我尝试 ping 谁,我都会得到 100% 的数据包丢失。其他连接方式(如 ssh、浏览器等)也不起作用。请参阅:
$ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
^C
--- 10.0.0.1 ping statistics ---
2 packets transmitted, 0 received, 100% packet loss, time 1011ms
我还尝试检查是否有系统消息。但无济于事:
$ dmesg
$
笔记:我sudo dmesg -c
启动后立即发出命令以便更容易识别问题并且网络仍然可用。
我在Ubuntu 20.04.3下:
$ cat /etc/issue
Ubuntu 20.04.3 LTS \n \l
我的无线设备:
$ lspci | grep -i network
3c:00.0 Network controller: Intel Corporation Wireless 8265 / 8275 (rev 78)
作为临时解决方法,我开发了一个脚本来停止 NetworkManager 并通过命令行重新连接。如下所示:
iface="wlp60s0"
essid="my_ap"
tmpfile="/tmp/wpa.conf"
pass="my_pass"
sudo systemctl stop NetworkManager.service
sudo iw dev "$iface" del
sudo iw phy phy0 interface add "$iface" type managed
sudo ip link set "$iface" up
sudo wpa_passphrase "$essid" "$pass" > "$tmpfile"
sudo wpa_supplicant -i"$iface" -c"$tmpfile" -B
sudo dhclient -v "$iface"
这让生活变得轻松一些,但当然这只是暂时的、基本的,远非理想。而且它也没有多大帮助,因为我无论如何都会时不时地失去连接,就像我使用 NetworkManager 时一样。它只是比等待 NetworkManager 重新启动更快……
到目前为止我尝试过的
- 使用 禁用 wifi power_save
sudo iw dev wlp60s0 set power_save off
。 - 通过 NetworkManager 编辑
/etc/NetworkManager/conf.d/default-wifi-powersave-on.conf
并更改wifi.powersave = 3
为wifi.powersave = 2
重新启动来禁用 wifi 省电。(来源:https://unix.stackexchange.com/a/315400/108418) - 更改路由器上的 wifi 安全性(WPA -> WEP 或其他)(来源:20.04 更新后无法连接 5Ghz wifi)
- 将 wifi 模式从“N”改为“Legacy”。这个方法似乎解决了问题,但可能是因为我用的时间不够长。此外,网络速度下降显然使这个选项不切实际。
- 启用 NetworkManager 调试模式并尝试识别可能的问题。
以上方法均无效。
我访问过的其他链接
这些是我的一些尝试,但症状不完全相同,或者提出的解决方案对我来说不起作用......
https://blog.stigok.com/2017/03/26/wifi-loses-connectivity-periodically-wpasupplicant-reason-4.html
所以我在这里发布这一切,希望有人已经经历过这一切,也许可以提供一些启发......
非常感谢!
更新 #1
我找到了重现此问题的方法。每次我访问此页面并浏览照片(让浏览器同时并行加载多张照片)时,连接都会断开。
https://www.facebook.com/terraadentropelomundo/photos/
我想知道无线驱动程序在同时处理多个连接时是否存在问题。
更新 #2
在浏览其他论坛以寻求解决方案后,我遇到了这个问题:
当我将 AP 上的“信标间隔”从默认的 100 毫秒更改为 50 毫秒后,情况似乎有所好转。到目前为止,三天内没有出现断线的情况。
编辑:可以确认,经过此更改后问题似乎已得到解决。
(来源:https://bugs.archlinux.org/task/58457#comment185619)
这是有道理的,因为我在将 AP 移至 openwrt 后开始遇到此问题。因此,英特尔驱动程序/固件肯定存在一些问题,但更改 AP 上的信标似乎可以解决问题。我会再测试几天,看看问题是否消失。
更新 #3
没用。即使在 openwrt 中使用 beacon 50ms,我仍然会不时断开连接,并且没有任何消息显示dmesg
...