nmcli

通常的 linux 发行版对于网络的配置方法一般会同时支持 network.service 和 NetworkManager.service(简称 NM)。默认情况下,这 2 个服务都有开启,而且功能上是平行的,可以通过任意一个来配置网络,正常的情况下通过 NM 来配置网络后它会自动把配置同步到 network.service 的配置中。

nmcli 是 NetworkManager 的命令行工具, 该命令可以完成网卡上所有的配置工作,绝大部分可以写入配置文件,永久生效 。

1
nmcli [OPTIONS] OBJECT { COMMAND | help }

OPTIONS:

1
2
3
4
5
6
7
8
-t                                # terse output 简洁的输出
-p # pretty output 漂亮的输出
-m tabular|multiline # output mode 输出模式
-f <field1,field2,...>|all|common # specify fields to output 指定要输出的字段
-e yes|no # escape columns separators in values 在值中转义列分隔符
-n # 不要检查nmcli和NetworkManager版本
-a # 要求缺少参数
-w <seconds> # 设置超时等待整理操作

OBJECT

1
2
3
4
5
6
7
g[eneral]      # 显示NM状态和权限;获取和更改系统主机名、NetworkManager logging level and domains
n[etworking] # 查询NM网络状态,启用和禁用网络
r[adio] # 无线网相关
c[onnection] # NM的连接
d[evice] # 显示和管理网络接口
a[gent] # Run nmcli as a NetworkManager secret agent, or polkit agent.
m[onitor] # 观察NM活动,监视连接状态、设备或连接配置文件的更改

最常用的是 device 和 connection,主要是 connection

device

设备,可理解为实际存在的网卡(包括物理网卡和虚拟网卡)。可以简写为 nmcli d

在 NM 里,有 2 个层级:连接(connection)和设备(device),通常 NM 的管理是以连接为单位的,就像你的手机可以记住多个 wifi 连接,但一个时刻只能连接一个 wifi。一个网卡可以关联多个连接,但是一个网卡只能有一个连接处于活跃状态,通过 nmcli connetion up切换连接。

1
2
3
4
5
6
# 查看网卡状态
[root@centos7 network-scripts]#nmcli device
DEVICE TYPE STATE CONNECTION
ens33 ethernet connected ens33
ens37 ethernet connected ens37
lo loopback unmanaged --

connection

连接,可理解为配置文件,相当于 ifcfg-ethX。可以简写为nmcli c

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 修改网卡名,注意修改的是NAME不是DEVICE
[root@centos7 network-scripts]#nmcli connection modify ens33 con-name 'ens33 name'
[root@centos7 network-scripts]#nmcli connection
NAME UUID TYPE DEVICE
ens33 name c96bc909-188e-ec64-3a96-6a90982b08ad ethernet ens33
ens37 4a5516a4-dfa4-24af-b1c4-e843e312e2fd ethernet ens37
[root@centos7 network-scripts]#nmcli connection modify ens33\ name con-name ens33
# 修改网卡地址,只修改文件不生效,修改之前先使用 ipv4.method manual 将BOOTPROTO=dhcp改成BOOTPROTO=none
# 否则不能修改,只能添加或删除
[root@centos7 network-scripts]#nmcli connection modify ens33 ipv4.addresses 10.0.0.8/24
# 使修改网卡地址生效
[root@centos7 network-scripts]#nmcli connection reload
[root@centos7 network-scripts]#nmcli connection up ens33
# 给网卡添加地址
[root@centos7 network-scripts]#nmcli connection modify ens33 +ipv4.addresses 11.0.0.7/24
# 从网卡删除地址
[root@centos7 network-scripts]#nmcli connection modify ens33 -ipv4.addresses 11.0.0.7/24

ubuntu 使用 nmcli

ubuntu 默认情况下,无法使用 nmcli

  1. 修改 etc/netplan/*.yaml

    1
    2
    3
    4
    root@u2:~# vim /etc/netplan/00-installer-config.yaml
    network:
    version: 2
    renderer: NetworkManager # 注意此行
  2. /etc/NetworkManager/NetworkManager.conf

    1
    2
    3
    4
    5
    6
    7
    8
    9
    root@u2:~# vim /etc/NetworkManager/NetworkManager.conf
    [main]
    plugins=ifupdown,keyfile

    [ifupdown]
    managed=flase

    [device]
    wifi.scan-rand-mac-address=no
  3. 应用配置

    1
    root@u2:~# netplan apply