Linux下如何安装并使用NMState网络管理器
这篇文章将为大家详细讲解有关Linux下如何安装并使用NMState网络管理器,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。
NMState 是一个网络管理器,允许你按照声明式方法配置主机。这意味着你通过一个北向的声明式 API 定义所需的配置状态,这个工具通过南向的提供者provider应用配置。
目前 NMState 支持的唯一的提供者是 NetworkManager,它是为 Fedora Linux 提供网络功能的主要服务。不过,NMState 的开发计划中将逐渐增加其他提供者。
配置方法:命令式与声明式网络管理有时候是一项非常复杂的任务,这取决于环境的规模和多样性。在 IT 的早期,网络管理依赖于网络管理员在网络设备上手动执行命令。如今,基础设施即代码Infrastructure as Code(IaC)允许以不同的方式将这些任务自动化。z这基本上有两种方法:命令式或声明式。
在命令式方法中,你会定义“如何”达到所需的配置状态。而在声明式范式里则定义了“什么”是所需的配置状态,所以它不确定哪些步骤是必需的,也不确定它们必须以何种顺序执行。这种方法目前正在聚集更多的人员参与,你可以在目前使用的大多数管理和编排工具上找到它。
NMState:一个声明式的工具NMState 是一个网络管理器,允许你按照声明式方法配置主机。这意味着你通过一个北向的声明式 API 定义所需的配置状态,这个工具通过南向的提供者provider应用配置。
目前 NMState 支持的唯一的提供者是 NetworkManager,它是为 Fedora Linux 提供网络功能的主要服务。不过,NMState 的开发计划中将逐渐增加其他提供者。
关于 NMState 的进一步信息,请访问其项目 站点 或 GitHub 仓库。
安装NMState 在 Fedora Linux 29+ 上可用,需要在系统上安装并运行 NetworkManager 1.26 或更高版本。下面是在 Fedora Linux 34 上的安装情况:
$sudodnf-yinstallnmstate...输出节略...Installed:NetworkManager-config-server-1:1.30.4-1.fc34.noarchgobject-introspection-1.68.0-3.fc34.x86_64nispor-1.0.1-2.fc34.x86_64nmstate-1.0.3-2.fc34.noarchpython3-gobject-base-3.40.1-1.fc34.x86_64python3-libnmstate-1.0.3-2.fc34.noarchpython3-nispor-1.0.1-2.fc34.noarchpython3-varlink-30.3.1-2.fc34.noarchComplete!
这样,你可以使用 nmstatectl
作为 NMState 的命令行工具。请参考 nmstatectl -help
或 man nmstatectl
以了解关于这个工具的进一步信息。
首先要检查系统中安装的 NMState 版本:
$nmstatectlversion1.0.3
检查一个网络接口的当前配置,例如 eth0
的配置:
$nmstatectlshoweth02021-06-2910:28:21,530rootDEBUGNetworkManagerversion1.30.42021-06-2910:28:21,531rootDEBUGAsyncaction:Retrieveappliedconfig:etherneteth0started2021-06-2910:28:21,531rootDEBUGAsyncaction:Retrieveappliedconfig:etherneteth2started2021-06-2910:28:21,532rootDEBUGAsyncaction:Retrieveappliedconfig:etherneteth0finished2021-06-2910:28:21,533rootDEBUGAsyncaction:Retrieveappliedconfig:etherneteth2finished---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:100next-hop-address:''next-hop-interface:eth0table-id:254-destination:0.0.0.0/0metric:100next-hop-address:192.168.122.1next-hop-interface:eth0table-id:254-destination:192.168.122.0/24metric:100next-hop-address:''next-hop-interface:eth0table-id:254interfaces:-name:eth0type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.238prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:trueipv6:enabled:trueaddress:-ip:fe80::c3c9:c4f9:75b1:a570prefix-length:64auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:trueautoconf:truedhcp:truelldp:enabled:falsemac-address:52:54:00:91:E4:4Emtu:1500
正如你在上面看到的,这个网络配置显示了四个主要部分:
dns-resolver
:这部分是这个接口的名字服务器配置。route-rules
:它说明了路由规则。routes
:它包括动态和静态路由。interfaces
:这部分描述了 ipv4 和 ipv6 设置。你可以在两种模式下修改所需的配置状态:
nmstatectl edit
编辑接口配置。这个命令调用环境变量 EDITOR
定义的文本编辑器,因此可以用 yaml 格式编辑网络状态。完成编辑后,NMState 将应用新的网络配置,除非有语法错误。nmstatectl apply
应用接口配置,它从先前创建的 yaml 或 json 文件中导入一个所需的配置状态。下面几节告诉你如何使用 NMState 来改变网络配置。这些改变可能会对系统造成破坏,所以建议在测试系统或客户虚拟机上执行这些任务,直到你对 NMState 有更好的理解。
这里使用的测试系统有两个以太网接口,eth0
和 eth2
:
$ip-br-4aloUNKNOWN127.0.0.1/8eth0UP192.168.122.238/24eth2UP192.168.122.108/24互动配置模式的例子
使用 nmstatectl edit
命令将 eth0
接口的 MTU 改为 9000 字节,如下所示:
$sudonmstatectlediteth0---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:100next-hop-address:''next-hop-interface:eth0table-id:254-destination:0.0.0.0/0metric:100next-hop-address:192.168.122.1next-hop-interface:eth0table-id:254-destination:192.168.122.0/24metric:100next-hop-address:''next-hop-interface:eth0table-id:254interfaces:-name:eth0type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.123prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:trueipv6:enabled:trueaddress:-ip:fe80::c3c9:c4f9:75b1:a570prefix-length:64auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:trueautoconf:truedhcp:truelldp:enabled:falsemac-address:52:54:00:91:E4:4Emtu:9000
在保存并退出编辑器后,NMState 应用新的网络期望状态:
2021-06-2911:29:05,726rootDEBUGNmstateversion:1.0.32021-06-2911:29:05,726rootDEBUGApplyingdesirestate:{'dns-resolver':{'config':{},'running':{'search':[],'server':['192.168.122.1']}},'route-rules':{'config':[]},'routes':{'config':[],'running':[{'destination':'fe80::/64','metric':102,'next-hop-address':'','next-hop-interface':'eth0','table-id':254},{'destination':'0.0.0.0/0','metric':102,'next-hop-address':'192.168.122.1','next-hop-interface':'eth0','table-id':254},{'destination':'192.168.122.0/24','metric':102,'next-hop-address':'','next-hop-interface':'eth0','table-id':254}]},'interfaces':[{'name':'eth0','type':'ethernet','state':'up','ipv4':{'enabled':True,'address':[{'ip':'192.168.122.238','prefix-length':24}],'auto-dns':True,'auto-gateway':True,'auto-route-table-id':0,'auto-routes':True,'dhcp':True},'ipv6':{'enabled':True,'address':[{'ip':'fe80::5054:ff:fe91:e44e','prefix-length':64}],'auto-dns':True,'auto-gateway':True,'auto-route-table-id':0,'auto-routes':True,'autoconf':True,'dhcp':True},'lldp':{'enabled':False},'mac-address':'52:54:00:91:E4:4E','mtu':9000}]}---outputomitted---2021-06-2911:29:05,760rootDEBUGAsyncaction:Updateprofileuuid:2bdee700-f62b-365a-bd1d-69d9c31a9f0ciface:eth0type:ethernetstarted2021-06-2911:29:05,792rootDEBUGAsyncaction:Updateprofileuuid:2bdee700-f62b-365a-bd1d-69d9c31a9f0ciface:eth0type:ethernetfinished
现在,使用 ip
命令和 eth0
的配置文件来检查 eth0
的 MTU
是不是 9000 字节。
$iplinkshoweth02:eth0:mtu9000qdiscfq_codelstateUPmodeDEFAULTgroupdefaultqlen1000link/ether52:54:00:91:e4:4ebrdff:ff:ff:ff:ff:ffaltnameenp1s0$sudocat/etc/NetworkManager/system-connections/eth0.nmconnection[sudo]passwordforadmin:[connection]id=eth0uuid=2bdee700-f62b-365a-bd1d-69d9c31a9f0ctype=ethernetinterface-name=eth0lldp=0permissions=[ethernet]cloned-mac-address=52:54:00:91:E4:4Emac-address-blacklist=mtu=9000[ipv4]dhcp-client-id=macdhcp-timeout=2147483647dns-search=method=auto[ipv6]addr-gen-mode=eui64dhcp-duid=lldhcp-iaid=macdhcp-timeout=2147483647dns-search=method=autora-timeout=2147483647[proxy]基于文件的配置模式的例子
让我们使用基于文件的方法来设置一个新的配置状态。这里我们禁用 eth2
接口的 IPv6 配置。
首先,创建一个 yaml 文件来定义 eth2
接口的期望状态。使用 nmstatectl show
来保存当前设置,然后使用 nmstatectl edit
来禁用 IPv6。
$nmstatectlshoweth2>eth2.yaml$vieth2.yaml---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:101next-hop-address:''next-hop-interface:eth2table-id:254-destination:0.0.0.0/0metric:101next-hop-address:192.168.122.1next-hop-interface:eth2table-id:254-destination:192.168.122.0/24metric:101next-hop-address:''next-hop-interface:eth2table-id:254interfaces:-name:eth2type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.108prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:trueipv6:enabled:falseaddress:-ip:fe80::5054:ff:fe3c:9b04prefix-length:64auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:trueautoconf:truedhcp:truelldp:enabled:falsemac-address:52:54:00:3C:9B:04mtu:1500
保存新的配置后,用它来应用新的状态:
$vieth2.yaml---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:101next-hop-address:''next-hop-interface:eth2table-id:254-destination:0.0.0.0/0metric:101next-hop-address:192.168.122.1next-hop-interface:eth2table-id:254-destination:192.168.122.0/24metric:101next-hop-address:''next-hop-interface:eth2table-id:254interfaces:-name:eth2type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.110prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:falseipv6:enabled:falselldp:enabled:falsemac-address:52:54:00:3C:9B:04mtu:1500
你可以检查看到 eth2
接口没有配置任何 IPv6:
$vieth2.yaml---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:101next-hop-address:''next-hop-interface:eth2table-id:254-destination:0.0.0.0/0metric:101next-hop-address:192.168.122.1next-hop-interface:eth2table-id:254-destination:192.168.122.0/24metric:101next-hop-address:''next-hop-interface:eth2table-id:254interfaces:-name:eth2type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.110prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:falseipv6:enabled:falselldp:enabled:falsemac-address:52:54:00:3C:9B:04mtu:1500临时应用改变
NMState 的一个有趣的功能允许你临时配置一个期望的网络状态。如果你对这个配置感到满意,你可以事后提交。否则,当超时(默认为 60 秒)过后,它将回滚。
修改前面例子中的 eth2
配置,使它有一个 IPv4 静态地址,而不是通过 DHCP 动态获得。
$vieth2.yaml---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:101next-hop-address:''next-hop-interface:eth2table-id:254-destination:0.0.0.0/0metric:101next-hop-address:192.168.122.1next-hop-interface:eth2table-id:254-destination:192.168.122.0/24metric:101next-hop-address:''next-hop-interface:eth2table-id:254interfaces:-name:eth2type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.110prefix-length:24auto-dns:trueauto-gateway:trueauto-route-table-id:0auto-routes:truedhcp:falseipv6:enabled:falselldp:enabled:falsemac-address:52:54:00:3C:9B:04mtu:1500
现在,使用选项 no-commit
临时应用这个配置,让它只在 30 秒内有效。这可以通过添加选项 timeout
来完成。同时,我们将运行 ip -br a
命令三次,看看配置在 eth2
接口的 IPv4 地址是如何变化的,然后配置就会回滚。
$ip-bra&&sudonmstatectlapply--no-commit--timeout30eth2.yaml&&sleep10&&ip-bra&&sleep25&&ip-braloUNKNOWN127.0.0.1/8::1/128eth0UP192.168.122.238/24fe80::5054:ff:fe91:e44e/64eth2UP192.168.122.108/242021-06-2917:29:18,266rootDEBUGNmstateversion:1.0.32021-06-2917:29:18,267rootDEBUGApplyingdesirestate:{'dns-resolver':{'config':{},'running':{'search':[],'server':['192.168.122.1']}},'route-rules':{'config':[]},'routes':{'config':[],'running':[{'destination':'fe80::/64','metric':101,'next-hop-address':'','next-hop-interface':'eth2','table-id':254},{'destination':'0.0.0.0/0','metric':101,'next-hop-address':'192.168.122.1','next-hop-interface':'eth2','table-id':254},{'destination':'192.168.122.0/24','metric':101,'next-hop-address':'','next-hop-interface':'eth2','table-id':254}]},'interfaces':[{'name':'eth2','type':'ethernet','state':'up','ipv4':{'enabled':True,'address':[{'ip':'192.168.122.110','prefix-length':24}],'dhcp':False},'ipv6':{'enabled':False},'lldp':{'enabled':False},'mac-address':'52:54:00:3C:9B:04','mtu':1500}]}---outputomitted---Desiredstateapplied:---dns-resolver:config:{}running:search:[]server:-192.168.122.1route-rules:config:[]routes:config:[]running:-destination:fe80::/64metric:101next-hop-address:''next-hop-interface:eth2table-id:254-destination:0.0.0.0/0metric:101next-hop-address:192.168.122.1next-hop-interface:eth2table-id:254-destination:192.168.122.0/24metric:101next-hop-address:''next-hop-interface:eth2table-id:254interfaces:-name:eth2type:ethernetstate:upipv4:enabled:trueaddress:-ip:192.168.122.110prefix-length:24dhcp:falseipv6:enabled:falselldp:enabled:falsemac-address:52:54:00:3C:9B:04mtu:1500Checkpoint:NetworkManager|/org/freedesktop/NetworkManager/Checkpoint/7loUNKNOWN127.0.0.1/8::1/128eth0UP192.168.122.238/24fe80::5054:ff:fe91:e44e/64eth2UP192.168.122.110/24loUNKNOWN127.0.0.1/8::1/128eth0UP192.168.122.238/24fe80::5054:ff:fe91:e44e/64eth2UP192.168.122.108/24
从上面可以看到,eth2
的 IP 地址从 192.168.122.108
暂时变成了 192.168.122.110
,然后在超时结束后又回到了 192.168.122.108
。
关于“Linux下如何安装并使用NMState网络管理器”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。