NetworKmanager
文章目录
环境
- CentOS8 已废弃 network.service, 推荐使用 NetworkManager
概念
- 在NM里,有2个维度: 连接(connection)和设备(device),这是多对一的关系
- 想给某个网卡配ip,首先NM要能纳管这个网卡。设备里存在的网卡(即 nmcli d可以看到的),就是NM纳管的
- 可以为一个设备配置多个连接(即 nmcli c可以看到的),每个连接可以理解为一个ifcfg配置文件
- 同一时刻,一个设备只能有一个连接活跃,可以通过 nmcli c up切换连接
配置连接
- 状态
- 活跃(带颜色字体):表示当前该connection生效
- 非活跃(正常字体):表示当前该connection不生效
- 创建 connection,配置静态 ip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
nmcli c add \ type ethernet \ con-name ethX \ ifname ethX \ ipv4.addr 192.168.1.100/24 \ ipv4.gateway 192.168.1.1 \ ipv4.method manual \ autoconnect yes # type ethernet:创建连接时候必须指定类型,类型有很多,可通过 "nmcli c add type -h" 看到 # con-name ethX: 表示连接(connection)的名字,可任意定义,无需和网卡名相同 # ifname ethX: 表示网卡名,这个 ethX 必须是在 nmcli d里能看到的 # ipv4.addr: 指定一个或多个 ip 地址 # ipv4.gateway: 网关 # ipv4.method: 对应ifcfg文件内容的BOOTPROTO # ipv4.method 默认为auto,对应为BOOTPROTO=dhcp,这种时候如果指定ip,就可能导致网卡同时有dhcp分配的ip和静态ip # ipv4.method 设置为manual表示BOOTPROTO=none,即只有静态ip # 如果这是为ethX创建的第一个连接,则自动生效 # 如果此时已有连接存在,则该连接不会自动生效,可以执行 nmcli c up ethX-test来切换生效 # autoconnect: 开机后自动连接
- 创建 connection,配置多个静态 ip
1 2 3 4 5 6 7 8 9 10 11
nmcli c add \ type ethernet \ con-name ethX-X \ ifname ethX \ ipv4.addr '192.168.1.100/24,192.10.0.3.100/25' \ ipv4.routes '192.168.0.0/16 192.168.1.10,10.0.0.0/8 10.0.3.1' \ ipv4.gateway 192.168.1.254 \ ipv4.dns '8.8.8.8,4.4.4.4' \ ipv4.method manual # ipv4.routes: 设置自定义路由 # ipv4.dns: 设置 dns
- 创建 connection,配置动态 ip
1 2 3 4 5
nmcli c add \ type ethernet \ con-name ethX \ ifname ethX \ ipv4.method auto
- 修改 ip
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
# ethX 是 connection name,也可以指定 connection UUID # 直接替换 nmcli c modify ethX \ ipv4.addr '192.168.1.200/24' nmcli c up ethX # 通过nmcli c modify修改con-name,只会对应修改ifcfg文件中的NAME,而不会更改ifcfg文件名 # 增加 ip nmcli c modify ethX \ +ipv4.addr '192.168.2.200/24' +ipv4.routes '10.1.0.0/16 192.168.2.1' nmcli c up ethX # 删除 ip nmcli c modify ethX \ -ipv4.addr '192.168.2.200/24' -ipv4.routes '10.1.0.0/16 192.168.2.1' nmcli c up ethX
- 操作 connection
1 2 3 4 5 6 7 8 9 10 11
# ethX 是 connection name,也可以指定 connection UUID # 启动 nmcli c up ethX # 停止 nmcli c down ethX # 删除 nmcli c delete ethX # 删除当前连接后,会自动选择同一个设备的其他连接来顶替生效
- 查看 connection
1 2 3 4 5 6 7 8 9
# ethX 是 connection name,也可以指定 connection UUID # 查看列表 nmcli c show # 查看活动连接列表 nmcli c show -a # 查看指定 connection 详细信息 nmcli c show ethX
- 重载配置但不立即生效
1 2 3 4 5 6
# 重载全部 connection 的所有 ifcfg-xxxx 和 route-xxxx nmcli c reload # 重载指定 ifcfg-ethX 和 route-ethX nmcli c load /etc/sysconfig/network-scripts/ifcfg-ethX nmcli c load /etc/sysconfig/network-scripts/route-ethX
- 重载配置并立即生效
1 2 3 4 5 6
# ethXX 是 connection name,也可以指定 connection UUID nmcli c up ethXX # ethX 是 device name nmcli d reapply ethX nmcli d connect ethX
配置网卡设备
- 状态
- connected: 已被NM纳管,并且当前有活跃的connection
- disconnected: 已被NM纳管,但是当前没有活跃的connection
- unmanaged: 未被NM纳管
- unavailable: 不可用,NM无法纳管,通常出现于网卡link为down的时候(比如ip link set ethX down)
- 查看网卡列表
1 2 3 4
nmcli d # 查看全部网卡的详细信息 nmcli d show
- 操作网卡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
# ethX 是 device name # 设置 nm 管理网卡 ethX # 并刷新该网卡对应的活跃 connection(如果之前有修改过connection配置) # 如果有connection但是都处于非活跃状态,则自动选择一个connection并将其活跃 # 如果没有connection,则自动生成一个并将其活跃 nmcli d connect ethX # 设置 nm 不管理网卡 ethX # 此操作不会变更实际网卡的link状态,只会使对应的connection变成非活跃 # 若重启系统则又会自动connect # 另外,如果手工将该网卡的connection全部删掉,该网卡状态也会自动变为disconnected nmcli d disconnect ethX # 设置 nm 是否自动启动网卡 nmcli d set ethX autoconnect yes|no # 设置 nm 是否自动管理网卡 nmcli d set ethX managed yes|no
- 关闭无线网络(默认启动)
1
nmcli r all off
NM 状态
- 查看当前 nm 连接信息
1
nmcli
- 查看当前 nm 全部状态
1
nmcli general status
- 纳管状态
1 2 3 4 5 6
# 查看 nmcli n # 开启 nmcli n on # 关闭 nmcli n off
- 查看 nm 当前是否在线可用
1
nm-oncline
注意事项
- 如果希望NM不要纳管网卡,只有一个办法最彻底最靠谱,就是自己写ifcfg,内容加上 NM_CONTROLLED=no,这样该device的状态就会始终保持unmanaged。nmcli c up、nmcli c reload、nmcil c load都不会对其起任何作用
- NM只能对link状态为up的网卡进行操作,如果手动 ip link set ethX down,那么NM就无法对该网卡做任何操作(即使nmcli d connect也没有用)
- NetworkManager支持3种获取dhcp的方式:dhclient、dhcpcd、internal,当/etc/NetworkManager/NetworkManager.conf配置文件中的[main]部分没配置 dhcp=时候,默认使用internal(rhel7/centos7默认是dhclient)。internal是NM内部实现的dhcp客户端
- NM默认会从dhcp里获取dns信息,并修改/etc/resolv.conf,如果不想让NM管理/etc/resolv.conf,则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加 dns=none即可
- 如果想让NM不要自动管理新网卡(比如不要给新网卡获取ip地址),则只需在/etc/NetworkManager/NetworkManager.conf里的[main]里增加 no-auto-default=* 即可,改完后通过 systemctl restart NetworkManager 或者重启系统来生效
文章作者 Colben
上次更新 2019-10-29