NetworkManager主要由由后台守护进程(NetworkManager.service)和前端管理程序(nmcli、nmtui、nm-applet等)组成。后台守护进程是实际配置的执行者,能够通过D-BUS向其他应用通知状态变更,可以理解为,它将所有网络相关的服务统一起来,其设计思想与systemd非常一致。
NetworkManager有两个基本概念: Connection(网卡连接配置) 和 Device(网卡设备)。一个设备对应一个网络接口,可以是物理设备,也可以是虚拟设备。Connection相当于配置,每个接口可以拥有多个配置,但同一时刻,只能有一个配置有效。
首先,对于Device(网卡设备),基本操作就是检索。
如上图所示,可以看到当前环境包含7个设备,4个以太网类型的设备,实际是三个物理网卡,一个docker的虚拟网卡。一个docker网桥,还有一个zerotier-one的tun隧道。再者,设备状态栏,对于物理链路连通的设备一般都是connected,对于未被NetworkManager管理的设备是unmanaged。对于lo回环设备,默认不会被托管。在终端界面下,正常设备绿色显示,不正常是红色,未托管为灰色,清晰明了。最后一栏显示当前设备使用的Connection(网卡连接配置)。对于连接配置,也可以通过另一个子命令检索其他信息。
连接配置与WIFI配置概念类似,一个无线网卡可以连接多个WIFI热点,但同一时间只能连接其中一个热点。每个热点对应一个配置。这跟Device与Connection概念是完全一致的。
对于Device与Connection匹配关系,记录在ifcfg配置中。如下图所示,ifcfg-new-ens34这个配置,文件名以ifcfg-开头才能被NetworkManager加载作为配置。后缀内容并不强制规定,但是最好能过做到见名知意。再者,配置内容中NAME字段,即Connection的名称,每个Connection名称代表不同链路配置,必须有不同配置名称,避免冲突。另外,DEVICE名称应该是存在的现有网络设备(包括虚拟设备)。这个设备名是udev将物理网络设备映射到用户地址空间的一个名称,若要回退到传统的eth方式,可以在内核参数添加net.ifnames=0 biosdevname=0即可。
对于连接管理有很多子命令和参数,一般格式如下:
nmcli connection modify connection_name property value |
命令众多,不好记忆,但其实我们只需要记一些常用命令,更多配置一般都是写到配置文件中,再用nmcli reload加载生效。
对于设备管理,常用命令如下:
nmcli device set enp1s0 managed no # 临时取消NetworkManager管理enp1s0 nmcli device connect/disconnect enp1s0 # 关闭/开启设备链路,相当于拔插网线 nmcli device wifi list # 列出WIFI信号,如果有无线网卡 nmcli device show enp1s0 # 显示指定设备详细信息 nmcli device reapply enp1s0 # 将变更后的链路重新配置给ens34设备 nmcli device delete bonds # 删除虚拟设备,无法删除硬件设备 nmcli device monitor enp1s0 # 监视网卡设备变更 nmcli device set ifname enp1s0 autoconnect yes # 设置enp1s0自动连接属性 |
对于连接管理,常用命令如下:
nmcli connection up/down enp1s0 # 激活/关闭enp1s0网卡链路配置,也可以指定UUID nmcli connection show enp1s0 # 显示连接详细信息 nmcli connection load /etc/sysconfig/network-scripts/ifcfg-enp1s0 # 加载指定配置文件 nmcli connection monitor enp1s0 # 监视连接变更 |
总结:
NetworkManager替代network-scripts是必然趋势,运维及开发人员应尽快掌握NetworkMnaager的使用。再者,理解NetworkManager的基本概念有助于快速上手。