我选择以最小化(minimized)方式,用默认配置安装好了Ubuntu 26.04,默认网络、分区、apt源什么的,都没修改。安装完毕后进入系统,输入用户名密码,碰到的第一个问题,就是没网络,那么,就要开始把网络调出来。默认的Ubuntu 26.04服务器环境下涉及网络管理的工具有systemd-networkd、wpa_supplicant和Netplan,桌面端还会默认安装NetworkManager。以上几个产品并非平级替代品,而是处于不同抽象层次,彼此协作。
1.systemd-networkd
技术定位:这是systemd自带的原生网络管理守护进程,专注于系统级、持久化的网络接口配置,填补systemd生态中轻量级网络管理的空白。
技术特点:其中包含内置的轻量级DHCP客户端、LLDP(链路层发现协议)支持,并与systemd-resolved服务联动完成DNS解析管理。
设计哲学:systemd-networkd遵循“配置即状态”的静态哲学。一旦接口通过内置DHCP或静态配置成功获取IP,守护进程便不再主动探测网络质量或干预链路状态。它没有内置的连通性检查模块(如HTTP探针),也不支持在多个AP之间自动漫游或故障转移。这种设计使其资源占用极低、启动速度快、行为确定性高,非常适合服务器、虚拟机和IoT设备。
与wpa_supplicant的协作:systemd-networkd本身不包含任何WiFi认证协议栈。当Netplan配置了renderer: networkd并指定WiFi时,systemd-networkd会通过systemd-networkd-wait-online服务触发wpa_supplicant,并通过D-Bus监听其连接状态。在底层,Netplan会将YAML配置编译为/run/systemd/network/目录下的*.network和*.netdev文件,由systemd-networkd解析并应用。
2.wpa_supplicant
技术定位:工作于数据链路层。这是一个运行在用户空间的守护进程,专门负责处理IEEE 802.11无线网络的认证协议(如WPA2-PSK、WPA3)。它只负责与AP(接入点)完成四步握手并协商加密密钥,不参与网络层的配置(如DHCP或静态路由、选网等)。
调用关系:它是被上层调用的“劳工”。无论是NetworkManager还是systemd-networkd,在连接加密WiFi时,最终都会通过wpa_supplicant的D-Bus接口或控制套接字(wpa_cli)来下发SSID和密码并启动认证。
3.Netplan
技术定位:它是声明式配置的抽象层工具,本身不执行任何网络操作,而是一个配置转换引擎。
技术特点:1.通过读取/etc/netplan/*.yaml的声明式配置,根据renderer字段的值,将抽象配置转换为NetworkManager或systemd-networkd的具体配置文件。2.在通过SSH修改完YAML文件后,可以通过执行netplan try来检查配置是否正确。这个命令会应用配置并等待120秒让用户确认,如果用户没按回车确认,或者SSH断了(说明配置有问题),120秒后Netplan会自动回滚到之前的配置,SSH会自动恢复连接。3.Netplan是读取/etc/netplan/目录下的所有.yaml文件,并按照字典序(字母顺序)将它们合并成一个最终的配置,后加载的文件拥有“覆盖权”。但是,如果文件夹下有2个配置文件,分别为01-network.yaml和00-installer-config.yaml,其中01-network.yaml是用于修改00-installer-config.yaml里已有的设备(比如改IP),配置虽然会生效,但极其危险,容易变成“半成品”配置。如00文件里有eno2的match(MAC地址)和set-name。如果用户在01文件里只写了eno2的dhcp4: false和addresses,而没写match和set-name。Netplan合并后,eno2会丢失MAC地址的匹配规则。系统不知道这张卡该叫eno2,也不知道该配给哪张物理卡,网络直接起不来。建议不同的yaml文件,管理不同的网卡配置。同时,在netplan apply之前,务必通过netplan get,查看合并后的最终结果,并执行netplan try来检查配置是否正确。
设计哲学:通过统一的YAML语法屏蔽后端差异,实现配置的跨环境迁移。
4.NetworkManager
技术定位:是一个全功能的服务守护进程,面向适应更复杂的桌面和移动网络需求。
技术特点:1.与systemd-networkd连接WiFi时需要依赖wpa_supplicant等外部工具不同,NetworkManager原生支持WiFi。2.NetworkManager拥有连通性检查模块,这个模块会定期向知名服务器(如ping.ubuntu.com)发送HTTP/HTTPS请求,以进行连通性检查,从而判断此判断网络层是否真正可达。3.NetworkManager允许为每个WiFi连接独立设置IP分配策略(auto或manual),从而实现在客户端按SSID区分静态/动态IP的需求,这是systemd-networkd完全不支持的。
安装事项:可以独立安装,也可随GNOME桌面安装。但在服务器环境中,安装完NetworkManager后,默认其不管理任何设备,也不接管网络。因为服务器默认使用systemd-networkd管理网络,在图形界面中的网络选项可能会出现只显示VPN等情况。
5.关于WiFi故障转移
基于NetworkManager连通性检查模块,NetworkManager能够在WiFi信号满格但互联网断连(如光猫故障)的“静默失效”场景下,主动触发重连并尝试列表中的下一个网络。因为systemd-networkd缺乏NetworkManager定期ping知名服务器来判断互联网是否可达的机制,所以在信号满格但网关断连、或信号微弱但不触发断连时,systemd-networkd会始终认为网络有效,不会主动触发wpa_supplicant重连或切换AP。所以在使用systemd-networkd管理网络时,故障转移必须手动干预。
在安装Ubuntu 26.04时,我们没有连接网络,现在服务器也没联网,现在先通过编写Netplan的yaml文件,连接WiFi。由于我们是最小化安装,没有vi、vim、nano等文字编辑器,我们可通过cat命令将文字写入yaml文件,然后再将yaml文件移入/etc/netplan中。
matthewfjnd@matthewfjndubuntu:~$ sudo cat > 01-wifi.yaml << 'EOF' network: version: 2 wifis: wlo1: dhcp4: true access-points: "Matthewfjnd_MiFi": password: "123456789" "Matthewfjnd": password: "123456789" "Lin_HOME": password: "123456789" EOF |
稍等片刻,我们就连上WiFi了