203 lines
7.1 KiB
Markdown
203 lines
7.1 KiB
Markdown
---
|
||
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=时候,默认使用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 或者重启系统来生效
|
||
|