分享最新优惠信息
购买主机更加划算

NMState:Linux声明式网络配置工具用法详解

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包

接下来,按如下方式安装NMstate,这适用于Fedora 31及更高版本。

$ sudo dnf install nmstate

该命令将NMState网络管理器API与其它Python依赖项一起安装。

在Fedora中安装NMState

安装完成后,验证nmstate包是否已安装,如下命令:

$ rpm -qi nmstate

验证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

在Linux中检查网络MTU

本文将其更改为4000,就是使用nmstatectl编辑命令执行此操作,如下所示。

$ sudo nmstatectl edit enp0s3

这将在文本编辑器中打开配置,在本文中,它在vim编辑器中打开。接下来,一直向下滚动并找到mtu参数,然后将值更改为4000,就像我们在vim中编辑文件一样,然后我们将保存更改。

在Linux中更改网络MTU

当保存并退出文件时,将会在终端上看到一些乱码输出,因为NMstate保存了更改。无需干预,只需等待即可。

现在确认已经进行了更改。

$ ifconfig

从终端输出中,可以看到我们已经成功地将 MTU从默认的1500值更改为4000 。

在Linux中验证网络MTU

基于文件的配置模式示例

现在使用基于文件的模式修改配置。在此示例中,我们将为enp0s8网络接口禁用IPv6 。第一步是创建一个YAML文件,该文件将指定enp0s8网络接口的所需状态。

$ sudo nmstatectl show enp0s8 > enp0s8.yml

创建网络YAML文件

接下来,小编将编辑YAML文件,如下所示。

$ sudo vim enp0s8.yml

向下滚动到ipv6部分。要禁用 IPv6,请将enabled参数设置为false并删除已删除的行。

在Linux中禁用 IPv6

保存配置并使用YAML文件应用新状态,输入如下命令:

$ sudo nmstatectl apply enp0s8.yml

现在运行显示的命令以验证IPv6是否已被禁用。显示的输出显示enp0s8网络接口的IPv6为空白,这意味着已成功禁用该接口上的IPv6。

$ ip -br a

确认在Linux中禁用IPv6

临时应用网络更改

NMstate提供的另一个非常方便的功能是能够临时配置所需的网络状态。一旦对配置感到满意,就可以继续进行并使更改永久生效。否则,一旦超时到期,所做的更改将回滚到初始设置。默认超时为60秒。

为了验证这一点,小编将在enp0s3接口上临时设置一个静态IP并禁用DHCP,这样再次使用文本编辑器访问该文件。

$ sudo vim enp0s3.yml

滚动到ipv4部分,指定静态IP——在本文中,静态IP为192.168.2.150并删除被删除的行。此外,请务必将dhcp参数设置为false

在Linux中设置静态IP

保存文件并临时提交更改,命令如下。

$ 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文件的基于文件的方法可以轻松定义状态,这增强了配置任务的自动化并减少了配置过程中的错误。

未经允许不得转载:惠主机 » NMState:Linux声明式网络配置工具用法详解