一、基础知识
在CentOS7 / Redhat7中默认使用 NetworkManager 守护进程来监控和管理网络设置。nmcli是命令行的NetworkManager工具,自动把配置写到/etc/sysconfig/network-scripts/目录下面。
CentOS7 / Redhat7之前的网络管理是通过 ifcfg 文件配置管理接口(device),而现在是通过NetworkManager服务管理连接(connection)。一个接口(device)可以有多个连接(connection),但是同时只允许一个连接(connection)处于激活(active)状态。
简单理解就是,一个连接就是(connection)就是/etc/sysconfig/network-scripts/目录下的一个配置文件,接口(device)是物理设备,一个物理设置可以拥有多个配置文件,但只能有一个配置文件属于使用(active)状态;配置文件的生成与使用状态均由NetworkManager控制。
二、nmcli命令详解
1、查看接口设备(device)信息
nmcli device status # 简单信息
nmcli device show # 详细的接口信息
nmcli device show interface-name #接口的详细信息
- 简单信息
- 详细接口信息
- 接口的详细信息
2、查看连接(connection)的信息
nmcli connection show # 详细的连接信息
nmcli connection show connection-name # 某个连接的详细信息
- 详细的连接信息
- 某个连接的信息
3、启动和停止接口
nmcli connection down connection-name
nmcli connection up connection-name
nmcli device disconnect interface-name
nmcli device connect interface-name
注意:建议使用 nmcli dev disconnect interface-name 命令,而不是 nmcli con down connection-name 命令,因为连接断开可将该接口放到“手动”模式,这样做用户让 NetworkManager 启动某个连接前,或发生外部事件(比如载波变化、休眠或睡眠)前,不会启动任何自动连接。
4、创建连接
nmcli connection add type ethernet con-name connection-name ifname interface-name
nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address
注意:创建连接后,NetworkManager 自动将 connection.autoconnect 设定为 yes。还会将设置保存到 /etc/sysconfig/network-scripts/ connection-name 文件中,且自动将 ONBOOT 参数设定为 yes。
5、激活连接
nmcli connection up connection-name
6、修改连接的IP地址
nmcli connection modify "connection-name" ipv4.addresses newip/24
7、配置连接的DNS
nmcli connection modify static-eth1 ipv4.dns DNS1 # 设定单个DNS
nmcli connection modify static-eth1 ipv4.dns "DNS1 DNS2" # 设定多个DNS
nmcli connection modify static-eth1 +ipv4.dns DNS3 # 添加某个连接的DNS,需要使用前缀“+”
8、设置主机名
nmcli general hostname # 查询当前主机名
nmcli general hostname my-hostname # 更改主机名
systemctl restart systemd-hostnamed # 重启hostnamed服务
注意:CentOS7 / Redhat7 下的主机名管理是基于系统服务systemd-hostnamed,服务自身提供了hostnamectl命令用于修改主机名,推荐这种方式进行修改;
使用nmcli命令更改主机名时,systemd-hostnamed服务并不知晓 /etc/hostname 文件被修改,因此需要重启服务去读取配置;
9、接口绑定
CentOS7 / Redhat7 下新增了一种特性team,用于取代bond。
接口绑定步骤是:创建一个组接口(Team interface), 创建一个接口连接,指定网卡接口(device)到组接口里
nmcli connection add type team con-name connection-name ifname interface-name [config JSON]
nmcli connection add type team-slave con-name connection-name ifname interface-name master team-name