This commit is contained in:
2021-11-14 14:32:08 +08:00
parent f75ad8bedd
commit b0f6120151
152 changed files with 22219 additions and 8 deletions

View File

@@ -0,0 +1,202 @@
---
title: "NetworKmanager"
date: 2019-10-29T18:26:17+08:00
lastmod: 2019-10-29T18:40:00+08:00
keywords: ["centos", "networkmanager", "network"]
tags: ["centos", "networkmanager", "network"]
categories: ["network"]
---
# 环境
- CentOS8 已废弃 network.service, 推荐使用 NetworkManager
# 概念
- 在NM里有2个维度: 连接(connection)和设备(device),这是多对一的关系
- 想给某个网卡配ip首先NM要能纳管这个网卡。设备里存在的网卡(即 nmcli d可以看到的)就是NM纳管的
- 可以为一个设备配置多个连接(即 nmcli c可以看到的)每个连接可以理解为一个ifcfg配置文件
- 同一时刻,一个设备只能有一个连接活跃,可以通过 nmcli c up切换连接
# 配置连接
- 状态
- 活跃(带颜色字体)表示当前该connection生效
- 非活跃(正常字体)表示当前该connection不生效
- 创建 connection配置静态 ip
```bash
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
```bash
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
```bash
nmcli c add \
type ethernet \
con-name ethX \
ifname ethX \
ipv4.method auto
```
- 修改 ip
```bash
# 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
```bash
# ethX 是 connection name也可以指定 connection UUID
# 启动
nmcli c up ethX
# 停止
nmcli c down ethX
# 删除
nmcli c delete ethX
# 删除当前连接后,会自动选择同一个设备的其他连接来顶替生效
```
- 查看 connection
```bash
# ethX 是 connection name也可以指定 connection UUID
# 查看列表
nmcli c show
# 查看活动连接列表
nmcli c show -a
# 查看指定 connection 详细信息
nmcli c show ethX
```
- 重载配置但不立即生效
```bash
# 重载全部 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
```
- 重载配置并立即生效
```bash
# 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)
- 查看网卡列表
```bash
nmcli d
# 查看全部网卡的详细信息
nmcli d show
```
- 操作网卡
```bash
# 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
```
- 关闭无线网络(默认启动)
```bash
nmcli r all off
```
# NM 状态
- 查看当前 nm 连接信息
```bash
nmcli
```
- 查看当前 nm 全部状态
```bash
nmcli general status
```
- 纳管状态
```bash
# 查看
nmcli n
# 开启
nmcli n on
# 关闭
nmcli n off
```
- 查看 nm 当前是否在线可用
```bash
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=时候默认使用internalrhel7/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 或者重启系统来生效