问题描述
由于我的个人电脑和工作电脑都是在境外配置并通过archinstall进行安装的,所以在脚本安装时选用的地区并非中国大陆,这样的电脑在带回国内使用时都遭遇了不小在网络环境配置方面的困难,无法做到无缝衔接使用。
现在简短说下具体情况:
- 两台电脑都是联想,分别是Thinkbook和Legion拯救者
- 桌面环境都是GNOME45
- 网络配置工具都是GNOME自带的
NetworkManager
具体的网络故障描述:
- 连接国内的WLAN后,首先无法通过 GNOME
NetworkManager
的 connectivity test,导致tray中的WIFI图标上有个问号。 - 无法访问任何网站,
ping
也ping不通
思路分析
首先这个GNOME NetworkManager
的 connectivity test 既然都说连接有问题了,我们不如就从最直观的问题入手,把这个未通过的connectivity check给弄过了,如果这样就能解决了,那最好。
如果解决不了网络问题就继续debugging,大致可能的问题主要还是DNS,某项系统服务需要通过systemctl启用/禁用,等等。
动手解决
Connectivity Check
- 谷歌一下找到了一篇讨论这个GNOME功能的帖子: 求助:Fedora 37 连接小米 Redmi AX6S 路由器的无线网后网络连接状态显示”问号“是什么情况?
- 按照帖子中的建议,很轻松的就解决了NetworkManager这里的问题,具体步骤如下:
-
先查看一下connectivity check这里使用的uri
~$ NetworkManager --print-config # NetworkManager configuration: /etc/NetworkManager/NetworkManager.conf (lib: 20-connectivity.conf) [main] # plugins=keyfile # rc-manager=symlink # migrate-ifcfg-rh=false # auth-polkit=true # dhcp=internal # iwd-config-path= configure-and-quit=no [connectivity] uri=http://ping.archlinux.org/nm-check.txt [logging] # backend=journal # audit=true [device] # wifi.backend=wpa_supplicant # no-auto-default file "/var/lib/NetworkManager/no-auto-default.state"
-
在
/etc/NetworkManager/conf.d
中创建一个20-connectivity.conf
配置文件。文件内容如下:[connectivity] enabled=true uri=http://nmcheck.gnome.org/check_network_status.txt response=NetworkManager is online interval=3000
即用GNOME官方提供的的一个uri,和各个linux分支没什么关系了,很幸运这个uri在国内可以被ping通(至少我在的省份是可以的)
-
重启一下基本上就能看到问号消失了。很可惜,正如教程贴主发现的问题一样:
至此,网络连接状态显示问号的问题得以解决。但导致这个问题的根本原因在于我所在网络连接不到 Fedora 的一些 WEB 服务器,系统中其他需要连接到 Fedora 服务器的功能也还依然是访问不到,例如 DNF 安装、升级等操作时出现的网络连接失败问题。
所以我只能继续查其他问题了
-
修改DNS配置
- Arch的
resolv.conf
文件储存在/etc/resolv.conf
,其他distro应该也大差不差。~$ cat /etc/resolv.conf # Generated by NetworkManager search nameserver nameserver nameserver # NOTE: the libc resolver may not support more than 3 nameservers. # The nameservers listed below may not be recognized.
- 因为隐私问题我把我的DNS配置文件中的nameserver地址删除了,但是你们应该可以看到自己的。我在我的
resolv.conf
中发现了一个很陌生的ip地址,果断换成国内的一些公共DNS,比如nameserver 119.29.29.29
。 - 用你习惯的editor,把在国外用的DNS注释掉,在最下面加一下国内用的DNS:
cat /etc/resolv.conf # Generated by NetworkManager search #nameserver #nameserver #nameserver nameserver 119.29.29.29
- 最后重启一下电脑,果然网络成功连接了,看来就是国外的DNS服务配置了,但是到了国内访问不到。
控制一下变量
- 为了确定到底是DNS的问题还是NetworkManager的锅,我决定控制变量实验一波。
- 目前可以确定,即便NetworkManager的connectivity check通过了,如果DNS被卡了那还是上不去,但是NetworkManager的用的uri到底对国内网络访问有没有影响呢?
- 测试方法很简单,我把
/etc/NetworkManager/conf.d/20-connectivity.conf
直接删了,那么就会走NetworkManager中由各个distro自己设置的默认的uri,arch的是http://ping.archlinux.org/nm-check.txt
, Fedora是http://fedoraproject.org/static/hotspot.txt
。 - 结果立马就无法上网了,我也很纳闷,不过原因是找到了,既有NetworkManager的锅,也有DNS国内访问不到的原因。
准备再次离境
主要有两个针对以上操作的小建议:
- 到了国外不需要对NetworkManager的connectivity check使用的uri进行再次变更,所以就留着修改过的uri别动了。
- 国内使用的DNS地址就加以注释一下吧,继续把之前在国外使用的几个nameserver取消注释:
cat /etc/resolv.conf # Generated by NetworkManager search nameserver nameserver nameserver #nameserver 119.29.29.29
有什么问题可以在评论区留言,我不定期会抽空上线查看。
该教程未经本人允许请勿转载到其他平台,多谢 😃