Linux生态系统提供了多种配置网络的方法,包括流行的网络管理器守护程序和命令行工具,例如nmcli和nmtui GUI实用程序。本文将介绍了另一种称为NMState的网络配置工具
NMState是用于在Linux主机系统上配置网络的声明性网络管理器,它是一个提供命令行工具来管理主机网络设置的库,通过北向声明性API管理主机网络。到目前为止,NetworkManager守护程序是NMState支持的唯一提供程序。
在本文中,小编将简单介绍NMState工具的一些示例用法,另外,本文所演示的系统为Fedora Linux。
命令式与声明式方法
网络管理可以采用两种方法,即命令式和声明式。在命令式方法中,通过在终端上运行命令显式定义接口的网络状态。侧重点是“如何”命令。
例如,要使用命令式方法关闭网络,请运行以下命令:
$ sudo ifconfig enp0s3 down
与此同时,声明式方法使用YAML文件将更改应用于配置。大多数 DevOps 编排工具(例如Kubernetes)使用这种方法来使用YAML文件部署Pod应用程序。
这种方法提供了DevOps圈子中通常称为基础架构即代码 ( IaC ) 的内容。这增强了主机上网络配置的自动化,并提供了一种快速、更可靠的方法来对网络接口进行多次更改,并且错误最少。
接下来将简单介绍如何使用NMState配置工具在 Linux 中配置网络接口。
安装NMState网络配置工具
首先将通过安装Nmstate,检查Fedora存储库中软件包的可用性,如下所示:
$ sudo dnf search nmstate
从输出中可以看到网络管理器在官方存储库中是可以用的:
接下来,按如下方式安装NMstate,这适用于Fedora 31及更高版本。
$ sudo dnf install nmstate
该命令将NMState网络管理器API与其它Python依赖项一起安装。
安装完成后,验证nmstate包是否已安装,如下命令:
$ rpm -qi nmstate
对于基于RHEL的Linux,首先启用copr存储库。
$ sudo dnf copr enable nmstate/nmstate-stable
然后按如下方式安装NMstate 。
$ sudo dnf install nmstate
安装完成之后,可以检查安装的NMstate的版本,如下命令:
$ nmstatectl version 1.0.2
在Linux中使用NMState配置工具
安装NMstate后,接下来将简单介绍如何充分利用网络管理器API。
要查看网络接口的当前网络配置,请运行以下命令。这里,enp0s3是网络接口的配置。
$ nmstatectl show enp0s3
输出分为4个不同的部分,其中:
- dns-resolver:此部分包含特定接口的名称服务器配置。
- route-rules:这规定了路由规则。
- routes:这包括动态和静态路由。
- Interfaces(接口):此部分指定ipv4和ipv6设置。
在Linux系统中更改网络配置
可以使用NMState配置工具通过交互或基于文件的模式将主机配置为所需的状态。
- Interactive :这使用nmstatectl edit命令编辑网络接口。此命令打开一个由EDITOR环境变量定义的文本编辑器。保存更改后,NMState会立即应用新配置,除非检测到语法错误。
- File-based:在基于文件的模式下,使用nmstatectl apply命令使用YAML或JSON文件应用接口配置。
现在一起来看看如何使用NMState修改网络配置。
这里的Fedora系统有两个活动的网络接口,配置如下:
$ ip -br -4 a
样本输出如下
lo UNKNOWN 127.0.0.1/8 enp0s3 UP 192.168.2.104/24 enp0s8 UP 192.168.2.103/24
交互配置模式示例
这里将使用交互模式来更改enp0s3网络接口的MTU(最大传输单元) 。默认情况下,设置为1500,如图所示。
$ ifconfig
本文将其更改为4000,就是使用nmstatectl编辑命令执行此操作,如下所示。
$ sudo nmstatectl edit enp0s3
这将在文本编辑器中打开配置,在本文中,它在vim编辑器中打开。接下来,一直向下滚动并找到mtu参数,然后将值更改为4000,就像我们在vim中编辑文件一样,然后我们将保存更改。
当保存并退出文件时,将会在终端上看到一些乱码输出,因为NMstate保存了更改。无需干预,只需等待即可。
现在确认已经进行了更改。
$ ifconfig
从终端输出中,可以看到我们已经成功地将 MTU从默认的1500值更改为4000 。
基于文件的配置模式示例
现在使用基于文件的模式修改配置。在此示例中,我们将为enp0s8网络接口禁用IPv6 。第一步是创建一个YAML文件,该文件将指定enp0s8网络接口的所需状态。
$ sudo nmstatectl show enp0s8 > enp0s8.yml
接下来,小编将编辑YAML文件,如下所示。
$ sudo vim enp0s8.yml
向下滚动到ipv6部分。要禁用 IPv6,请将enabled参数设置为false并删除已删除的行。
保存配置并使用YAML文件应用新状态,输入如下命令:
$ sudo nmstatectl apply enp0s8.yml
现在运行显示的命令以验证IPv6是否已被禁用。显示的输出显示enp0s8网络接口的IPv6为空白,这意味着已成功禁用该接口上的IPv6。
$ ip -br a
临时应用网络更改
NMstate提供的另一个非常方便的功能是能够临时配置所需的网络状态。一旦对配置感到满意,就可以继续进行并使更改永久生效。否则,一旦超时到期,所做的更改将回滚到初始设置。默认超时为60秒。
为了验证这一点,小编将在enp0s3接口上临时设置一个静态IP并禁用DHCP,这样再次使用文本编辑器访问该文件。
$ sudo vim enp0s3.yml
滚动到ipv4部分,指定静态IP——在本文中,静态IP为192.168.2.150并删除被删除的行。此外,请务必将dhcp参数设置为false。
保存文件并临时提交更改,命令如下。
$ sudo nmstatectl apply --no-commit --timeout 20 enp0s3.yml
该--no-commit
选项在选项定义的一段时间内临时应用更改--timeout
,在本示例中为20秒。
为了验证更改的临时应用,小编将以20秒的时间间隔检查IP配置。
$ ip -br a
从输出中可以看到接口IP配置在20秒的时间间隔后恢复为DHCP。IP地址从之前的静态配置IP 192.168.2.150回到192.168.2.104。
总结
不可否认,NMState工具是配置网络接口的便捷工具,它是一个声明性工具,使用NetworkManager API应用主机接口的所需配置状态。
使用交互方法或使用预配置YAML文件的基于文件的方法可以轻松定义状态,这增强了配置任务的自动化并减少了配置过程中的错误。