ubuntu 18.04 -> 20.04 ;睡眠后互联网失败

ubuntu 18.04 -> 20.04 ;睡眠后互联网失败

我已将笔记本电脑从 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

相关内容