记一次netplan配置无效的问题定位过程

问题描述

操作系统

Ubuntu 20.04.6 LTS (GNU/Linux 4.19.115 aarch64)

前置条件

已经在/etc/netplan目录中添加了设备网口enaphyt4i0的netplan配置yaml文件,文件内容如下:

network:
  version: 2
  ethernets:
    enaphyt4i0:
      dhcp6: false
      dhcp4: false
      addresses: [ 192.168.29.22/24 ]

问题现象

通过netplan命令应用配置,未提示错误和警告,但是设备网口enaphyt4i0的ip地址未生效。
在这里插入图片描述

背景知识

netplan介绍

官网链接:https://netplan.io/

Netplan 是一个实用程序,用于在 linux 系统上轻松配置网络。您只需创建所需网络接口的 YAML 描述以及每个网络接口应配置为执行的操作即可。根据此描述,Netplan 将为您选择的渲染器工具生成所有必要的配置。

其工作原理是:Netplan 读取由管理员、安装程序、云映像实例化或其他操作系统编写的网络配置(配置位置:/etc/netplan/*.yaml)。在早期启动期间,Netplan 会生成特定于后端的配置文件,以将设备的控制权移交给特定的网络守护程序。
当前netplan支持NetworkManager和Systemd-networkd的两种后端。
在这里插入图片描述
netplan的操作命令是:netplan,具体操作可以参考命令的帮助说明。
在这里插入图片描述

systemd-networkd介绍

systemd

Systemd 是 Linux 系统工具,用来启动守护进程,已成为大多数发行版的标准配置。
Systemd的设计初衷是解决传统linux使用init进程作为启动管理的串行、启动脚本复杂的弊端,其目标是为系统的启动和管理提供一套完整的解决方案。
Systemd 的优点是功能强大,使用方便,缺点是体系庞大,非常复杂。事实上,现在还有很多人反对使用 Systemd,理由就是它过于复杂,与操作系统的其他部分强耦合,违反"keep simple, keep stupid"的Unix 哲学。
在这里插入图片描述
systemd的命令是:systemctl,具体操作可以参考命令的帮助说明。
在这里插入图片描述

systemd-networkd

systemd-networkd是systemd 210版增加的简单的网络管理器,它在Linux系统的后台运行,管理网络配置。它可以在插入网络设备时检测网络设备,甚至可以创建虚拟网络设备。这个工具对于复杂的网络配置特别有用,比如服务器和容器。
systemd-networkd服务通过如下明令使能:

systemctl enable systemd-networkd.service
systemctl start systemd-networkd.service

设备启动时会自动加载网络配置,网络设备的配置以.network作为后缀,有三个存放位置:

  • 系统网络目录(/usr/lib/systemd/network)
  • 运行时网络目录(/run/systemd/network)
  • 本机网络目录(/etc/systemd/network)。

所有的Network文件(无论位于哪个目录中),统一按照文件名的字典顺序处理。 对于不同目录下的同名Network文件,仅以优先级最高的目录中的那一个为准。 具体说来就是:/etc/ 的优先级最高、 /run/ 的优先级居中、/usr/lib/ 的优先级最低。 如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个Network文件, 那么最佳做法是在 /etc/ 目录中创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

networkctl

Networkctl 是一个命令行实用程序,用于查看网络设备及其连接状态的摘要。它允许您查询和控制 Linux 网络子系统。它是 Ubuntu 18.04 新版本 systemd 中的新命令之一。它显示 systemd-networkd 看到的网络链接的状态。
注意:在运行networkctl之前,请确保systemd-networkd正在运行,否则您将得到不完整的输出,并显示以下错误:
WARNING: systemd-networkd is not running, output will be incomplete.
networkctl命令的帮助信息如下:
在这里插入图片描述

networkmanager介绍

NETworkManager是一款功能强大的网络管理与问题排除工具,该工具完全开源,可以帮助广大研究人员轻松管理目标网络系统并排除网络疑难问题。
networkmanager的命令是:nmcli,具体操作可以参考命令的帮助说明。
在这里插入图片描述

问题定位过程

打开netplan的debug模式,查看过程日志

在netplan命令中添加–debug选项,查看netplan的执行过程日志:
在这里插入图片描述
发现netplan的执行过程无异常,问题应该在后端阶段。

修改netplan的yaml配置文件改为使用networkmanager作为后端

服务器版ubuntu的netplan的默认后端为systemd-networkd,桌面版ubuntu的netplan默认后端为NetworkManager。
在yaml文件中指定后端为NetworkManager:

network:
  version: 2
  renderer: NetworkManager
  ethernets:
    enaphyt4i0:
      dhcp6: false
      dhcp4: false
      addresses: [ 192.168.29.22/24 ]

修改后问题未解决,通过nmcli后发现一些系列问题,如需要使能NetworkManager服务、NetworkManager与网口之间未连接等。
暂时否决该路线,继续定位systemd-networkd的方案中的问题。

聚焦于systemd-networkd阶段

查找netplan的输出systemd-networkd的输入文件

运行netplan后,会根据/etc/netplan中的配置在systemd-networkd的/run/systemd/network目录生成后端的配置文件:
在这里插入图片描述
注:如果后端使用NetworkManager时,会在/run/NetworkManager/system-connections/目录中生成后端的配置文件:
在这里插入图片描述

通过查看/run/systemd/network/10-netplan-enaphyt4i1.network 可以发现systemd-networkd的配置文件没有问题。

查看系统日志

通过命令cat /var/log/syslog查看执行netplan apply的后端阶段时systemd-networkd的提示信息:
在这里插入图片描述
可以看到网络配置已经下发,但是要等待连接完成才能生效:
Network configuration changed, trying to establish connection.

networkctl命令查看systemd-networkd对网口的管理状态

在这里插入图片描述

通过该命令发现,enaphyt4i0处于正在配置中阶段,但是其状态是no-carrier未连接物理介质的状态。

问题分析

systemd-networkd需要等待网络设备状态就绪后才真正把网络配置(ip地址)设置成功(mtu值得设置限制不受连接状态影响,但是需要网口处于down状态)

解决方案

连接网口enaphyt4i0的网线后,netplan配置生效。

  • 31
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值