记一次启动网卡的过程

为了弄一台处理定时任务的服务器,我在一台机器上安装了 ubuntu,至于为什么要用 ubuntu 以及所有之前的选择不在本文的讨论范围,但是,可能正是基于之前的一系列选择,使我遇到了“无法上网”的问题。如果之前的选择不同,今天遇到的可能就是不同的问题,或者不会遇到问题也说不定。

事情正是开始。

当我安装完 ubuntu 20.04 之后,就需要下载一些软件,但是发现无法上网。所以,问题的第一个表现是无法上网。

要知道,“无法上网”这件事可能是几百个因素造成的,从网络机房、光缆,到你家的路由器、网线,最后是计算机的硬件、软件,中间有任何一个坏点,都表现为“无法上网”。所以,如果我不能把整个链条重启,那我可能就需要诊断一下问题在哪里,才好解决问题。

一个直觉产生的诊断问题的方法,就是分段查看目标的工作效果。比如,要判断是路由器之后的问题,还是路由器之前的问题,就看看家里的其他设备是否能上网,如果能,那么大概率说明路由器及其以前的点是好的。如此,问题就锁定在路由器之后的部分:一根网线,一张网卡,一个计算机操作系统。

网线的问题通过使用一根确保正常的网线排除,因为换成正常的网线后还是“无法上网”,那么大概率说明不是网线的问题。于此同时,发现网线接口的灯指示灯不亮。

“灯不亮”这个新信息说明什么,可能是网卡坏了,或者没有启动,或者是我不知道的问题。因为我对 ubuntu 及其管理硬件的方式很不熟悉,所以我并不知道怎么诊断网卡或者操作系统的问题。于是,基本上就处于盲目操作的状态,其中一种常见的盲目操作,就是重启。然而,重启过程中又出现了新的信息,网线接口的指示灯亮了一下。

“亮了一下”可以表示很多信息,可能是你希望的那种,又或者不是。但至少说明网卡是可以通电的。于是猜测问题不是网卡坏了,更不是没有网卡。当然,这只是猜,但有的可猜,可能比抛硬币式地乱猜好一点。

在上面的猜测下,就开始搜索如何解决 ubuntu 无法上网的问题,因为如果不是网卡本身的问题,那么以我的认知,就剩操作系统的部分可能有问题了。当然,操作系统的问题又是一个很宽泛的概念。基于我对软件系统的大致理解,软件的组合、组成大致都是栈型结构,或者说层累结构,就是一层调用一层,高级程序调用低级程序、低级程序调用机器码、机器码产生物理信号,中间任何一层出现异常都可能在用户界面中表现为问题。因为不知道是哪一层的问题,所以在最开始搜索中,我用的都是最宽泛的关键词,比如:

  1. ubuntu configure network,但返回的结果是告诉我如何设置静态 ip 的。然而这些搜索并不是没有用,因为其中包含检查 ip 的内容:ip addr。我在这台机器上第一次看到了它的 ip 地址,至少 127.0.0.1 和相应的 ipv6 值,这个意思应该是说机器上只有本机的网络,没有链接到路由器的网络。这也算是新信息,对我后面的选择可能已经产生了潜移默化的影响。
  2. ubuntu find network card,这个搜索的意思是确定 ubuntu 知道这台机器上有网卡,而不是相反。如果他不知道有网卡,则首先需要让 ubuntu 发现网卡,安装网卡驱动才有后续诊断或操作可言。查到指令 lspci,且结果返回了一个硬件信息,这说明 ubuntu 知道这台机器上有网卡。那么操作系统和网卡硬件链接的部分大概可以视为没有问题。于是进一步缩小诊断范围。

在上面搜索的基础上,我已经获得了一些新信息,相对更有能力把问题描述地更具体:

  1. ubuntu not detecting wired connection,目的是排除之前搜索结果中出现的 wireless/wifi 相关的搜索结果。这个时候,很多 stack overflow 的答案指向了一个文件 /etc/network/interfaces,但是我的操作系统中并没有这个文件。是需要我自己创建呢,还是需要调用什么程序来生成这个文件呢?我不知道,但是有进一步的疑问,就可以做进一步的搜索。
  2. /etc/network/interfaces,也即直接搜索上文提到的这个文件名,又出现了新信息,据说 interfaces 文件是之前版本的 ubuntu 管理网络资源的方式,于是我就没有再多研究这个配置文件的作用,而是更近一步确定 20.04 版本上如何处理操作系统能发现网卡,但是好像没有使用网卡的问题(此时我还不知道这种情况叫做“网卡没有启用/启动”)
  3. cloudinit network interfaces,因为据说 cloudinit 是 ubuntu 20 管理网络资源的方式,我也在操作系统的启动日志中看到过 cloud init 这个名词,虽然当时一点概念都没有。不过我并没有深究 cloud init 的作用,因为太多不熟悉的概念,想先看看有没有其他路可走
  4. ubuntu 20 not detecting wired connection,很明显,我是对上面的搜索增加了条件,可能因为 ubuntu 20 的资料还很少,我搜到了几个临近版本上出现的类似问题,其中出现了一个查询指令 sudo lshw -C network,指令返回了一个看起来像网络资源的东西,关键是只有一个,而且这一个标题是这样的 *-network DISABLED

更全面的信息是这样的:

*-network DISABLED
description: Ethernet interface
product: RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
vendor: Realtek Semiconductor Co., Ltd.
physical id: 0
bus info: pci@0000:03:00.0
logical name: enp3s0
version: 0c

虽然 DISABLED 可能代表很多信息,但是这里应该很容易让人猜想,这代表网卡被禁用了。我觉得值得在这个方向上尝试解决问题。于是搜索方向转向了:ubuntu ethernet interface disabled。发现了几个启动命令12

1
2
sudo ip link set up ${logical_name} # 好像使得网线接口上的一盏指示灯亮起
sudo dhclient ${logical_name} # 明确观测到网线接口上的 2 盏灯都亮了

此时已经可以访问互联网上的服务了。但是,凭借直觉和一些人的回答3,在终端直接输入的指令可能并没有改变某些配置文件,如果重启操作系统,网卡可能依然是禁用状态,所以我可能需要改变某些配置文件。关于配置文件,有人建议改变上文提到的 /etc/network/interfaces/4。因为版本的区别,我可能不会采用这种方法。有人建议修改 NetworkManager3,但最后我采用了更改 NetPlan 的方式4

1
2
3
4
5
6
network:
version: 2
renderer: networkd
ethernets:
LOGICAL_NAME:
dhcp4: true

其实我不太清楚这段配置的含义,大致猜测是启动了 LOGICAL_NAME 所代表的网卡,并且使用 dhcp 上网方式。然后重启系统,依然可以连接公网。

然后,回过头再来看,我在探索过程中所做的猜想,虽然最终导致了期望效果的达成,但他们就是正确的么?很可能只是巧合,即俗话所说之“瞎猫死耗子”。

不过,到此,我的探索就结束了。其实不应该这样,把效果的达成当作求知的终点,可能是限制了求知的自由和范围。但可能还有其他方面的事情更值得我深入探索,所以这里也就暂时放下了。

1. Ethernet adapter was disable on Ubuntu 17.04. (2017, April 19). Ethernet adapter was disable on Ubuntu 17.04. Retrieved May 10, 2020, from Ask Ubuntu website: https://askubuntu.com/questions/906636/ethernet-adapter-was-disable-on-ubuntu-17-04‌
2. Ethernet adapter was disable on Ubuntu 17.04. (2017, April 19). Ethernet adapter was disable on Ubuntu 17.04. Retrieved May 10, 2020, from Ask Ubuntu website: https://askubuntu.com/questions/906636/ethernet-adapter-was-disable-on-ubuntu-17-04‌
3. Ubuntu, in. (2017, April 25). Ethernet Network not showing or connecting in Ubuntu 17.04. Retrieved May 10, 2020, from Ask Ubuntu website: https://askubuntu.com/questions/908614/ethernet-network-not-showing-or-connecting-in-ubuntu-17-04/909442#909442
4. Wired Ethernet not working Ubuntu 18.04. (2018, June 24). Wired Ethernet not working Ubuntu 18.04. Retrieved May 10, 2020, from Ask Ubuntu website: https://askubuntu.com/questions/1049302/wired-ethernet-not-working-ubuntu-18-04‌