www.colben.cn/content/post/networkmanager.md
2021-11-14 14:32:08 +08:00

203 lines
7.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
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 或者重启系统来生效