我已将笔记本电脑从 18.04 升级到 20.04。一切正常 - wifi 正常运转,互联网浏览正常。
但在睡眠期之后 - 即使 Wifi 已打开,尽管 IP 地址已正确设置;互联网仍无法使用:ping google.com
睡眠前有效的命令不再有效。其他互联网访问也是如此。
我已经实施了这个解决方法: https://letsfoss.com/fix-wifi-not-working-after-suspend-in-ubuntu/
但这对我的情况没有帮助。
— 8 月 11 日更新 — 事实证明名称解析服务没有响应某些请求。
睡眠唤醒后:
- ping 192.168.0.x 工作正常(因此 Wifi 确实针对本地网络进行了设置)
- ping google.com :失败(在睡眠期之前工作正常)。
- resolvectl query google.com :有效。
strace
对故障 ping执行以下任务时:
...
177 connect(5, {sa_family=AF_INET, sin_port=htons(53),sin_addr=inet_addr("127.0.0.53")}, 16) = 0
178 poll([{fd=5, events=POLLOUT}], 1, 0) = 1 ([{fd=5,revents=POLLOUT}])
179 sendmmsg(5, [{msg_hdr={msg_name=NULL, msg_namelen=0, msg_iov=[{iov_base="\37\205\1 \0\1\0\0\0\0\0\1\6google\3com\0\0\1\0\1\0\0)\4"..., iov_len=39}], ms
180 poll([{fd=5, events=POLLIN}], 1, 5000) = 0 (Timeout)
...
Ping 在套接字 5 上调用本地服务名称解析(本地地址 127.0.0.53 上的端口 53)以获取 google.com 的真实 IP 地址,但此套接字没有响应。服务systemd-resolv
仍在运行 - 这可以通过 2 种方式验证(systemctl systemd-resolv 提供的状态表明它仍处于活动状态,如果我/etc/resolv.conf
通过插入手动更新nameserver 8.8.8.8
),则名称解析成功。
但是,什么原因会导致我的安装出现这样的问题?
答案1
运行此脚本...
#!/bin/bash
# program to check wifi and reset if not running
#dns server
IPTEST=1.1.1.1
iwconfig=/sbin/iwconfig
lspci=/usr/bin/lspci
#find 802 wireless device id
DEVICE=`$iwconfig 2>/dev/null | egrep 802 | awk ' {print $1}'`
#get PCI bus wireless #
WLNUM=`$lspci | grep -i wireless | awk ' {print $1}'`
#get driver to unload
WLMOD=`$lspci -vv -s $WLNUM | grep -i "kernel driver" | awk ' {print $5}'`
#print out stats
echo "IP is: $IPTEST"
echo "DEVICE is: $DEVICE"
echo "PCI DEV NUM is $WLNUM"
echo "PCI DRIVER is $WLMOD"
ping -c 1 $IPTEST
read -n 1 -p "Proceed ? " ANS
if [[ "$ANS" =~ [^yY] ]]; then
exit 0
fi
echo ""
if ping -c 1 $IPTEST >/dev/null 2>&1 ;
then
echo "$IPTEST 1 ok"
exit 0
else
echo "Ping failed"
echo "stopping wifi "
sudo nmcli radio wifi off
echo "sleeping for 3..."
sleep 3
echo "unloading $DEVICE"
sudo nmcli device disconnect $DEVICE
echo "sleeping for 3..."
sleep 3
echo "unloading $WLMOD ..."
sudo modprobe -r $WLMOD
echo "sleeping for 3..."
sleep 3
echo "reloading $WLMOD"
sudo modprobe $WLMOD
echo "sleeping for 3..."
sleep 3
echo "reloading $DEVICE"
sudo nmcli device connect $DEVICE
echo "sleeping for 10..."
sleep 10
echo "stop wifi "
sudo nmcli radio wifi off
echo "sleeping for 3..."
sleep 3
echo "starting wifi"
sudo nmcli radio wifi on
echo "sleeping for 3..."
sleep 5
echo "test ping again ..."
ping -c 1 $IPTEST
fi
exit 0