网络管理(nmcli)
1、NetworkManager管理
在rhel8(含centos8)上,在/etc/sysconfig/network-scripts/里也看不到任何脚本文件,没有传统的network.service。因此只能通过其它方法进行网络配置,包括NM命令工具集。换言之,在rhel8上,必须开启NM,否则无法使用网络。
# 查看NM纳管状态
nmcli n
$ nmcli n
enabled
# 开启NM接管
nmcli n on
# 关闭NM纳管(谨慎执行)
nmcli n off
2、网络管理命令行工具nmcli
在nmcli中有2个命令最为常用:
-
nmcli connection
表示连接,可理解为配置文件,相当于ifcfg-ethX。可以简写为nmcli c
$ nmcli connection NAME UUID TYPE DEVICE enp0s3 d2e9c3bf-6440-4d0d-abe7-0431b69341de ethernet enp0s3 virbr0 fd4e79a8-e0c2-4cbe-b9af-c47c83c3a7fa bridge virbr0
connection有2种状态:
▷ 活跃(带颜色字体):表示当前该connection生效
▷ 非活跃(正常字体):表示当前该connection不生效
-
nmcli device
表示设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为nmcli d
在NM里,有2个维度:连接(connection)和设备(device),这是多对一的关系。想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即nmcli d可以看到的),就是NM纳管的。接着,可以为一个设备配置多个连接(即nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件。同一时刻,一个设备只能有一个连接活跃。可以通过nmcli c up切换连接。
$ nmcli device DEVICE TYPE STATE CONNECTION enp0s3 ethernet 已连接 enp0s3 virbr0 bridge 连接(外部) virbr0 lo loopback 未托管 -- virbr0-nic tun 未托管 --
device有4种常见状态:
▷ connected:已被NM纳管,并且当前有活跃的connection
▷ disconnected:已被NM纳管,但是当前没有活跃的connection
▷ unmanaged:未被NM纳管
▷ unavailable:不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set enp0s3 down)
3、nmcli connection配置
nmcli c show命令
输出中:
▪ 第一列是connection名字,简称con-name(注意con-name不是网卡名)
▪ 第二列是connection的UUID
▪ 最后一列才是网卡名(标准说法叫device名),可通过nmcil d查看device
对connection做操作时需要指定标识,标识可以是con-name、UUID、如果存在ifcfg文件则也可以用ifcfg的完整路径,即/etc/sysconfig/network-scripts/ifcfg-enp0s3
nmcli c show enp0s3
nmcli c show d2e9c3bf-6440-4d0d-abe7-0431b69341de
nmcli c show /etc/sysconfig/network-scripts/ifcfg-enp0s3
以上三种方式是同一个效果
下面命令是常见的一些操作:
-
启用connection(相当于ifup)
nmcli c up enp0s3
-
停止connection(相当于ifdown)
nmcli c down enp0s3
-
删除connection(类似于ifdown并删除ifcfg)
nmcli c delete enp0s3
-
查看connection列表
nmcli c show
-
查看connection详细信息
nmcli c show enp0s3
-
重载配置文件(不会马上生效)
nmcli c reload
-
立即生效connection,有3种方法:
nmcli c up ens32
nmcli d reapply enp0s3
#专门用于刷新connection,前提是网卡的device处于connected状态,否则会报错。nmcli d connect enp0s3
#刷新该网卡对应的活跃connection
通过命令行来修改connection的配置
# 查看所有连接
$ nmcli c
NAME UUID TYPE DEVICE
enp0s3 d2e9c3bf-6440-4d0d-abe7-0431b69341de ethernet enp0s3
# 修改某个连接的配置 后面接的是连接名,并不是设备名
$ nmcli c edit enp0s3
# 进入编辑界面
===| nmcli 交互式连接编辑器 |===
正在编辑已有的连接 "802-3-ethernet":"enp0s3"
输入 "help" 或 "?" 查看可用的命令。
输入 "print" 来显示所有的连接属性。
输入 "describe [<设置>.<属性>]" 来获得详细的属性描述。
您可编辑下列设置:connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, hostname, tc, proxy
# 输入print可以打印当前界面的所有配置
nmcli> print
===============================================================================
连接配置集详情 (enp0s3)
===============================================================================
connection.id: enp0s3
connection.uuid: d2e9c3bf-6440-4d0d-abe7-0431b69341de
connection.stable-id: --
connection.type: 802-3-ethernet
connection.interface-name: enp0s3
connection.autoconnect: 是
connection.autoconnect-priority: 0
connection.autoconnect-retries: -1 (default)
connection.multi-connect: 0(default)
........
proxy.browser-only: 否
proxy.pac-url: --
proxy.pac-script: --
-------------------------------------------------------------------------------
# 问好可以查看当前可使用的命令
nmcli> ?
------------------------------------------------------------------------------
---[ 主菜单 ]---
goto [<设置> | <属性>] :: 转到设置或属性
remove <设置>[.<属性>] | <属性> :: 移除设置或重置属性值
set [<设置>.<属性> <值>] :: 设置属性值
describe [<设置>.<属性>] :: 描述属性
print [all | <设置>[.<属性>]] :: 输出连接
verify [all | fix] :: 验证连接
save [persistent|temporary] :: 保存连接
activate [<接口名>] [/<ap>|<nsp>] :: 激活连接
back :: 转到上层(返回)
help/? [<命令>] :: 输出此帮助
nmcli <配置选项> <值> :: nmcli configuration
quit :: 退出 nmcli
------------------------------------------------------------------------------
# goto可以转单下一级
nmcli> goto
有效设置:connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, hostname, tc, proxy
# 转到ipv4相关设置
设置名称? ipv4
您可以编辑下列属性:method, dns, dns-search, dns-options, dns-priority, addresses, gateway, routes, route-metric, route-table, routing-rules, ignore-auto-routes, ignore-auto-dns, dhcp-client-id, dhcp-iaid, dhcp-timeout, dhcp-send-hostname, dhcp-hostname, dhcp-fqdn, dhcp-hostname-flags, never-default, may-fail, dad-timeout, dhcp-vendor-class-identifier, dhcp-reject-servers
# 转到ipv4的dns设置
nmcli ipv4> goto dns
# 修改
nmcli ipv4.dns> change
编辑 "dns" 值: 8.8.8.8,114.114.114.114
# 保存配置
nmcli> save
成功地更新了连接 "enp0s3" (d2e9c3bf-6440-4d0d-abe7-0431b69341de)。
# 激活配置
nmcli> activate
正在监视连接激活(按任意键继续)
连接已成功激活(D-Bus 活动路径:/org/freedesktop/NetworkManager/ActiveConnection/4)
# 退出
nmcli> quit
通过修改配置文件来修改
vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
然后生效配置
nmcli c reload
如果没有立即生效,需要执行up一下
nmcli c up enp0s3