1.NetworkManager介绍
1.1简介
NetworkManager是一个Linux系统的动态网络连接管理器,本质是一个守护进程,负责管理Linux系统中所有的网络接口和连接。
在NetworkManager出现之前,Linux网络配置主要依赖发行版专属的网络管理工具(如Debian/Ubuntu的ifupdown,RHEL的network-scripts),或者手动编辑网络配置文件,并且配置文件和网络接口绑定。例如下面的配置 /etc/network/interfaces ,eth0的配置只能给eth0接口使用,wlan0的配置只能给wlan0使用。当更换了网卡或者更新驱动后,网络接口发生改变,原来的配置就会直接失效。例如原来使用mt7921无线网卡,系统识别到的网络接口是wlan0,再更换为mt7922网卡,系统识别的接口变成了wlan1,那么原来绑定wlan0的WiFi配置会完全失效,必须重写配置,或者将配置文件中的wlan0改为wlan1。除此以外,网络切换必须针对接口执行,灵活性差。如果想在同一接口切换不同的网络,例如wlan0接口从wifi0切换到wifi1,必须手动修改 /etc/network/interfaces 中wlan0的配置,然后执行ifdown wlan0 && ifup wlan0重启接口才能生效。如果想在不同接口切换网络,例如从wlan0接口的wifi0切换到wlan1接口wifi1,必须手动执行ifdown wlan0 && ifup wlan1,系统不会自动识别和切换。
# 仅对eth0这个有线接口生效的配置
auto eth0
iface eth0 inet static
address 192.168.1.100
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 8.8.8.8
# 仅对wlan0(无线网卡对应的接口)生效的配置
auto wlan0
iface wlan0 inet dhcp
wpa-ssid "家里WiFi"
wpa-psk "wifi密码"
NetworkManager出现后,Linux网络配置使用NetworkManager统一的工具:nmcli、nmtui和nm-connection-editor,网络配置和网络连接绑定,和网络接口解耦,所有的网络配置文件都在 /etc/NetworkManager/system-connections 目录下,具体表现为 xxx.nmconnection 。例如,使用nmcli connection add type wifi con-name "无线网络1" ssid "wifi1" wifi-sec.key-mgmt wpa-psk wifi-sec.psk "wifi密码" 创建一个无线网络配置,这个配置在任何无线网络接口都可以使用,不管是wlan0、wlan1还是wlan2都可以调用这个配置。即使更换网卡导致接口变化,例如从mt7921网卡更换为mt7922网卡,接口从wlan0变成了wlan1,不需要修改任何内容可以直接使用之前的网络配置文件。并且网络切换也变得非常简单,如果想在同一网络接口切换网络,例如wlan0接口上已经配置了 wifi0 和 wifi1 这两个网络,直接执行nmcli connection up "wifi1"即可切换到wifi1连接。或者如果当前网络接口的网络断开,NetworkManager会自动扫描当前环境中的WiFi信号,自动连接已配置过的且信号最强的WiFi。如果想在不同网络接口切换网络,NetworkManager会自动识别两个无线接口的状态,默认会根据WiFi的信号强度或者手动设置的连接优先级,自动选择接口。例如wlan1搜索到的 wifi0 信号更强,NetworkManager会自动切换到wlan1接口,连接 wifi0 ,同时断开wlan0接口的wifi0连接。
2.nmcli
nmcli是NetworkManager服务的命令行管理工具,用于管理网络连接,可以直接替代传统的ifconfig、route等工具。
nmcli的常见用法
2.1查看网络状态
nmcli #详细查看所有网络连接
nmcli connection show #查看所有网络连接
nmcli device status #查看所有网络设备
nmcli device show #详细查看所有网络设备
nmcli device show [指定设备] #详细查看指定网络设备
2.2连接管理
nmcli device wifi list #列出所有可用wifi
nmcli device wifi connect [SSID名称] password [密码] #连接指定wifi(若为开放网络,则无密码)
nmcli connection up [连接名] #激活连接
nmcli connection down [连接名] #禁用连接
nmcli connection delete [连接名] #删除连接
nmcli connection reload #重新加载所有连接配置
2.3其他操作
nmcli monitor #监控网络事件
nmcli networking on #开启网络
nmcli networking off #关闭网络