Linux nmcli命令示例

时间:2020-01-09 10:42:48  来源:igfitidea点击:

nmcli示例。 CentOS/RHEL 7/8中的nmcli速查表。 nmcli命令示例。 nmcli con重新加载。 nmcli帮助。使用nmcli添加以太网连接。 Linux中的nmclic命令示例速查表。在Linux中使用nmcli添加绑定连接。使用nmcli添加和配置网络分组。 nmcli命令速查表。使用nmcli配置networkmanager。 nmcli示例。 nmclic命令示例速查表。退出与nmcli的现有连接。 nmcli命令示例。 nmcli启用dhcp。 man nmcli的例子。 nmcli重命名连接。 nmcli删除静态ipv4地址。 nmcle速查表。 nmcli删除dns。

了解nmcli

  • nmcli是用于控制NetworkManager和报告网络状态的命令行工具。

  • 它可以替代nm-applet或者其他图形客户端。 nmcli用于创建,显示,编辑,删除,激活和停用网络连接,以及控制和显示网络设备状态。

  • 连接存储在配置文件中

  • NetworkManager服务必须正在运行才能管理这些文件

比较nm设置和ifcfg- *指令(IPv4)

nmcli con modifcfg-*文件效果
ipv4.method manualBOOTPROTO=none静态配置的ipv4地址
ipv4.method autoBOOTPROTO=dhcp将从DHCPv4服务器查找配置设置
ipv4.address“192.168.0.10/24”IPADDR=192.168.0.10

PREFIX=24
设置静态ipv4地址、网络前缀
ipv4.gateway 192.168.0.1gateway=192.168.0.1设置ipv4网关
ipv4.dns 8.8.8.8DNS1=8.8.8.8修改/etc/resolv.confnameserver使用此值
ipv4.dns-search example.comDOMAIN=example.com修改/etc/resolv.conf在搜索指令中使用此域
ipv4.ignore-auto-dns truePEERDNS=no忽略来自DHCP服务器的dns服务器信息
connection.autoconnect yesONBOOT=yes启动时自动激活此连接
connection.id eth0NAME=eth0此连接的名称
connection.interface-name eth0DEVICE=eth0此连接绑定到此名称的网络接口
802-3-ethernet.mac-address 08:00:27:4b:7a:80HWADDR=08:00:27:4b:7a:80此连接已绑定到此MAC地址的网络接口
ipv4.never-default noDEFROUTE=yes从不将提供的接口的网关用作默认网关

比较nm设置和ifcfg- *指令(IPv6)

nmcli con modifcfg-*文件效果
ipv6.method manualipv6u AUTOCONF =no
ipv6.method autoipv6u AUTOCONF =yes
ipv6.method dhcpipv6AUTOCONF=no

DHCPV6C =yes
ipv6.addresses “

”2001:db8::a/64 2001:db8::1“
IPV6ADDR =2001:db8::a/64

IPV6
DEFAULTGW =2001:db8::1
ipv6.dns。DNS0=。修改 /etc/resolv.conf 要使用此 nameserver
ipv6.dnssearch example.comDOMAIN =example.com修改 /etc/resolv.conf 在“search”指令中使用此域
ipv6.ignore auto dns trueipv6PEERDNS =否
connection.autoconnect yesONBOOT =yes启动时自动激活连接
connection.id eth0NAME =eth0此连接的名称
connection.interface-name eth0DEVICE =eth0使用此名称将连接绑定到此网络接口
802-3-ethernet.mac-addressHWADDR=。连接已绑定到具有此MAC地址的网络接口

nmcli命令语法的简要列表

命令作用
nmcli dev status显示所有网络接口的网络管理器状态
nmcli con show列出所有连接
nmcli con show name列出连接名称的当前设置
nmcli con add con name 名称。。添加名为name的新连接
nmcli con mod 名称。。修改连接名称
nmcli con reload告诉networkManager重新读取配置文件(手动编辑后很有用)
nmcli con up name激活连接名称
nmcli dev dis dev停用并断开网络接口dev上的当前连接
nmcli con del name删除连接名称及其配置文件

nmcli命令示例(速查表)

以下是一些选定的nmcli命令示例

1.检查NetworkManager是否正在运行

我们可以使用以下命令检查NetworkManager是否正在运行

# nmcli -t -f RUNNING general
running

获得一般身份

# nmcli general
STATE      CONNECTIVITY  WIFI-HW  WIFI     WWAN-HW  WWAN
connected  full          enabled  enabled  enabled  enabled

2.列出所有可用的设备

查看和列出Linux系统上所有可用的设备

# nmcli dev status
DEVICE      TYPE      STATE         CONNECTION
eth0        ethernet  connected     eth0
virbr0      bridge    disconnected  -
eth1        ethernet  disconnected  -
eth2        ethernet  disconnected  -
lo          loopback  unmanaged     -
virbr0-nic  tun       unmanaged     -

3.列出所有可用的连接

列出所有可用的连接

# nmcli con show
NAME  UUID                                  TYPE      DEVICE
eth1  01fa0bf4-b6bd-484f-a9a3-2b10ff701dcd  ethernet  eth1
eth0  2e9f0cdd-ea2f-4b63-b146-3b9a897c9e45  ethernet  eth0
eth2  186053d4-9369-4a4e-87b8-d1f9a419f985  ethernet  eth2

4.列出接口的所有配置

查看接口的所有配置值(默认和自定义)

# nmcli con show eth2
connection.id:                          eth2
connection.uuid:                        186053d4-9369-4a4e-87b8-d1f9a419f985
connection.stable-id:                   -
connection.type:                        802-3-ethernet
connection.interface-name:              eth2
connection.autoconnect:                 yes
<Output trimmed>

5.检查物理网络设备状态

现在所有连接网络设备的状态

# nmcli dev status
DEVICE  TYPE      STATE         CONNECTION
eth1    ethernet  connected     eth1
eth0    ethernet  connected     eth0
eth2    ethernet  disconnected  -
lo      loopback  unmanaged     -

6.使用nmcli更改主机名

理想情况下,我们可以使用hostnamectl命令更改主机名,但也可以使用nmcli更新主机名。

获取当前主机名

# nmcli general hostname
centos-8.example.com

接下来更新主机名

# nmcli general hostname  centos-8.theitroad.com

验证相同

# nmcli general hostname
centos-8.theitroad.com
# hostname
centos-8.theitroad.com

7.创建一个新的以太网连接并分配静态IP地址

在此示例中," nmcli"使用IPv4地址和网络前缀" 10.10.10.4/24"和默认网关" 10.10.10.1"静态地配置eth2接口,但在启动时仍会自动连接并将其配置保存到/etc /中。 sysconfig/network-scripts/ifcfg-eth2`文件。

# nmcli con add con-name eth2 type ethernet ifname eth2 ipv4.method manual ipv4.address 10.10.10.4/24 ipv4.gateway 10.10.10.1
Connection 'eth2' (460b16aa-e755-403e-b0ec-5e1560dcc441) successfully added.

8.创建一个新的以太网连接并分配DHCP IP地址

以下命令将为接口eth2添加新连接,该连接将使用DHCP获取IPv4网络信息,并在启动时自动连接。配置将保存在/etc/sysconfig/network-scripts/ifcfg-eth2中,因为`con-name'是eth2.

# nmcli con add con-name eth2 type ethernet ifname eth2 ipv4.method auto
Connection 'eth2' (d75cb87f-cd15-40a2-9c33-138e69a06a1f) successfully added.

我们可以在映射的接口配置文件中验证相同

# egrep BOOTPROTO /etc/sysconfig/network-scripts/ifcfg-eth2
BOOTPROTO=dhcp

9.使用两个从属接口创建和配置绑定连接(活动备份)

我们可以使用nmcli与多个从属接口创建绑定连接。

提示:

绑定模式有802.3ad/balance-alb/balance-tlb/broadcast/active-backup/balance-rr/balance-xor 6种类型

删除从接口存在的任何配置文件

# nmcli con del "eth1"
# nmcli con del "Wired connection 1"

使用nmcli添加键接口。该命令添加一个主绑定连接,命名绑定接口" mybond0"并使用活动备份模式。我给了MIIUPDELAYDOWNDELAY一些虚拟值。如果我们想使用primary = &lt;ifname>添加主接口

# nmcli con add type bond ifname mybond0 bond.options "mode=active-backup,downdelay=5,miimon=100,updelay=10"
Connection 'bond-mybond0' (a5c76dbe-550b-4abf-8dc0-88184ade369e) successfully added.

类似地,对于"循环绑定",我们可以使用bond.options作为" downdelay = 5,miimon = 100,mode = balance-rr,updelay = 10"

接下来,使用nmcli为mybond0添加从站。该命令将第一个从站绑定到eth1接口

# nmcli con add type ethernet ifname eth1 master mybond0
Connection 'bond-slave-eth1' (54dc4282-b90b-4469-9cbf-82bce042de85) successfully added.

该命令将slave 2绑定到eth2接口

# nmcli con add type ethernet ifname eth2 master mybond0
Connection 'bond-slave-eth2' (41a5b4a6-8e6b-4df9-bff2-b67c5328311a) successfully added.

列出活动的连接。因此,我们与我们建立了绑定和从属接口。

# nmcli con show
NAME             UUID                                  TYPE      DEVICE
bond-mybond0     25ce17b2-fffb-4bf1-a5a3-e7593299f303  bond      mybond0
bond-slave-eth1  54dc4282-b90b-4469-9cbf-82bce042de85  ethernet  eth1
bond-slave-eth2  41a5b4a6-8e6b-4df9-bff2-b67c5328311a  ethernet  eth2
eth0             d05aee6a-a069-4e55-9fe4-771ca3336db6  ethernet  eth0

其中我使用nmcli将静态IP地址,NetMask,网关,DNS和DNS搜索设置为mybond0

# nmcli con mod bond-mybond0 ipv4.method manual ipv4.address 10.10.10.8/24 ipv4.gateway 10.10.10.1 ipv4.dns 8.8.8.8 ipv4.dns-search example.com

说明:

要使用DHCP IP,请使用ipv4.methodauto,并且在上述命令中不提供任何与IP地址相关的详细信息

验证" mybond0"配置文件

# egrep 'BOOTPROTO|IPADDR|PREFIX|GATEWAY|DNS' /etc/sysconfig/network-scripts/ifcfg-bond-mybond0
BOOTPROTO=none
IPADDR=10.10.10.8
PREFIX=24
GATEWAY=10.10.10.1
DNS1=8.8.8.8

刷新/重新加载mybond0的网络配置更改

# nmcli con up bond-mybond0
Connection successfully activated (master waiting for slaves) (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/11)

验证绑定IP地址

# ip addr show mybond0
7: mybond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 08:00:27:0d:ca:0c brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.8/24 brd 10.10.10.255 scope global noprefixroute mybond0
       valid_lft forever preferred_lft forever

验证可用连接列表

# nmcli con show --active
NAME  UUID                                  TYPE      DEVICE
eth1  01fa0bf4-b6bd-484f-a9a3-2b10ff701dcd  ethernet  eth1
eth0  2e9f0cdd-ea2f-4b63-b146-3b9a897c9e45  ethernet  eth0

10.创建和配置网桥

我写了另一篇文章,其中详细介绍了在RHEL/CentOS 7和8 Linux上分别使用nmcli和nmtui创建和配置网桥的步骤。

11.创建和配置网络分组

我写了另一篇文章,其中包含使用在RHEL/CentOS 7/8 Linux上经过验证的nmcli与两个从属服务器创建和配置NIC分组的详细步骤。

12.使用nmcli重新加载连接(重新启动)

从磁盘重新加载所有连接文件。默认情况下,NetworkManager不会监视对连接文件的更改。因此,当对它们进行更改时,我们需要使用此命令来告诉NetworkManager从磁盘重新读取连接配置文件。

# nmcli con reload

13.以交互方式添加/编辑连接

我们可以使用" nmcli" con编辑来使用交互式编辑器来编辑现有连接或者添加新连接。在下面的示例中,我们将编辑eth1的IP地址

# nmcli con edit  eth1
===| nmcli interactive connection editor |===
Editing existing '802-3-ethernet' connection: 'eth1'
Type 'help' or '?' for available commands.
Type 'print' to show all the connection properties.
Type 'describe [.]' for detailed property description.
You Jan edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, dcb, sriov, ethtool, match, ipv4, ipv6, tc, proxy
nmcli> help
-----------------------------------------------------------------------------
---[ Main menu ]--
goto     [ | ]        :: go to a setting or property
remove   [.] |  :: remove setting or reset property value
set      [. ]  :: set property value
describe [.]          :: describe property
print    [all | [.]]  :: print the connection
verify   [all | fix]                 :: verify the connection
save     [persistent|temporary]      :: save the connection
activate [] [/|]    :: activate the connection
back                                 :: go one level up (back)
help/?   []                 :: print this help
nmcli            :: nmcli configuration
quit                                 :: exit nmcli
-----------------------------------------------------------------------------
nmcli> print ipv4.address
ipv4.addresses: 10.10.10.4/24
nmcli> remove ipv4.address "10.10.10.4/24"
nmcli> print ipv4.address
ipv4.addresses:
nmcli> set ipv4.address 10.10.10.5/24
Do you also want to set 'ipv4.method' to 'manual'? [yes]: yes
nmcli> print ipv4.address
ipv4.addresses: 10.10.10.5/24
nmcli> verify
Verify connection: OK
nmcli> save
Connection 'eth1' (7e3a1246-1743-4bb8-9eab-09664ab996b8) successfully updated.
nmcli> quit

现在验证我们在eth1的配置文件中所做的更改

# egrep IPADDR /etc/sysconfig/network-scripts/ifcfg-eth1
IPADDR=10.10.10.5

14.将以太网连接BOOTPROTO从DHCP更改为静态

现在,要使用nmcli将以太网连接BOOTPROTO从DHCP更改为静态,我们必须修改ipv4.method指令以使用手册

# nmcli con mod eth2 ipv4.method manual ipv4.address 10.10.10.4/24 ipv4.gateway 10.10.10.1

现在验证" eth2"的网络配置文件

# egrep 'BOOTPROTO|IPADDR|PREFIX|GATEWAY' /etc/sysconfig/network-scripts/ifcfg-eth2
BOOTPROTO=none
IPADDR=10.10.10.4
PREFIX=24
GATEWAY=10.10.10.1

15.将以太网连接BOOTPROTO从静态更改为DHCP

类似地,要使用nmcli将以太网连接BOOTPROTO从静态更改为DHCP,我们必须修改ipv4.method指令以使用auto

# nmcli con mod eth2 ipv4.method auto

现在验证eth2网络配置文件

# egrep 'BOOTPROTO|IPADDR|PREFIX|GATEWAY' /etc/sysconfig/network-scripts/ifcfg-eth2
BOOTPROTO=dhcp
IPADDR=10.10.10.4
PREFIX=24
GATEWAY=10.10.10.1

如我们所见,我们仍然有来自先前命令的IPADDR和其他变量,但是它们被视为空值,因为我们可以看到我的DHCP已为eth2分配了" 10.10.10.5"

# ip addr show dev eth2
4: eth2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:a8:19:0a brd ff:ff:ff:ff:ff:ff
    inet 10.10.10.5/24 brd 10.10.10.255 scope global noprefixroute dynamic eth2
       valid_lft 1068sec preferred_lft 1068sec
    inet6 fe80::b81f:a58b:43f1:b8d3/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

16.使用nmcli更改ONBOOT指令

缺省情况下,接口配置文件中的ONBOOT是yes。因此,要禁用ONBOOT,我们必须使用nmcli修改" connection.autoconnect"指令。

更改此指令之前,请验证ONBOOT值

# egrep 'ONBOOT' /etc/sysconfig/network-scripts/ifcfg-eth2
ONBOOT=yes

更改ONBOOT指令,使用nmcli禁用ONBOOT

# nmcli con mod eth2 connection.autoconnect no

重新验证eth2的ONBOOT指令

# egrep 'ONBOOT' /etc/sysconfig/network-scripts/ifcfg-eth2
ONBOOT=no

17.更改DEFROUTE指令(切勿将此网络用作默认路由)

默认情况下,我们为任何以太网连接添加的任何网关也将被视为默认网关,要关闭此指令,请使用带有ipcli的ipv4.never-default和nmcli。

在进行任何更改之前,请验证eth2配置文件中的DEFROUTE指令

# egrep '^DEFROUTE' /etc/sysconfig/network-scripts/ifcfg-eth2
DEFROUTE=yes

因此,默认情况下此指令为ON,我们将禁用eth2的默认网关选项。要关闭该指令,我们必须选择" ipv4.never-default"作为" yes"。

# nmcli con mod eth2 ipv4.never-default yes

接下来验证eth2的DEFROUTE指令

# egrep '^DEFROUTE' /etc/sysconfig/network-scripts/ifcfg-eth2
DEFROUTE=no

18.禁用用于以太网连接的IPv6地址(IPV6INIT)

默认情况下,任何以太网连接类型都同时启用了IPv4和IPv6连接类型(IPV6INIT)。仅使用nmcli使用IPv4并禁用IPv6

验证eth2的IPv6连接类型的现有状态

# egrep  'IPV6INIT' /etc/sysconfig/network-scripts/ifcfg-eth2
IPV6INIT=yes

因此启用了此功能,我们将使用带有nmcli的ipv6.method指令来禁用IPv6连接类型

# nmcli con mod eth2 ipv6.method ignore

提示:

ipv6.method支持的输入参数是ignore,auto,dhcp,本地链接,手动,共享。我们可以使用相同的选项通过ipv4.method启用/禁用IPv4.

现在从eth2配置文件中重新验证IPV6INIT指令

# egrep  'IPV6INIT' /etc/sysconfig/network-scripts/ifcfg-eth2
IPV6INIT=no

19.更改"自动连接"指令

默认情况下,任何以太网连接都将被允许自动连接,我们可以使用

# nmcli con mod eth2 connection.autoconnect no

20.向现有连接添加或者修改DNS

我们可以使用ipv4.dns将DNS服务器添加到新连接,或者使用nmcli修改任何现有连接。当前没有为eth1提供DNS服务器IP

# egrep DNS /etc/sysconfig/network-scripts/ifcfg-eth1

接下来修改连接以添加DNS服务器IP地址

# nmcli con mod eth1 ipv4.dns 8.8.8.8

验证eth1配置文件

[root@rhel-8 ~]# egrep DNS /etc/sysconfig/network-scripts/ifcfg-eth1
DNS1=8.8.8.8

21.将单个/多个DNS服务器添加到连接

ipv4.dns中使用'+'前缀,可以将新的DNS IP地址添加到使用nmcli的现有连接。在前面的示例中,我们为eth1添加了8.8.8.8作为我的DNS服务器。现在我们将8.2.2.2添加到同一连接

# nmcli con mod eth1 +ipv4.dns 8.2.2.2

验证eth1配置文件

# egrep DNS /etc/sysconfig/network-scripts/ifcfg-eth1
DNS1=8.8.8.8
DNS2=8.2.2.2

提示:

我们还可以从其他多值(容器)属性(例如ipv4.dns,ipv4.addresses,bond.options等)添加单个或者多个值

22.从连接中删除单个/多个DNS服务器

可以理解,在+后面添加了,因此我们在使用nmcli的接口连接中删除了DNS服务器的单个/多个条目。

# nmcli con mod eth1 -ipv4.dns 8.2.2.2,8.8.8.8

验证eth1配置文件

# egrep DNS /etc/sysconfig/network-scripts/ifcfg-eth1

提示:

我们还可以从其他多值(容器)属性(例如ipv4.dns,ipv4.addresses,bond.options等)中删除单个或者多个值。

23.显示带有连接值的选定字段

我们可以使用nmcli con show &lt;ifname>列出连接的所有配置值,但这会提供一长串详细信息,实际上我们还可以获取单个连接提供的指令的选定值。

获取eth1的IPv4地址

# nmcli -g ip4.address connection show eth1
10.10.10.4/24

我们可以使用-g通过nmcli打印特定字段的值。

# nmcli -g ip4.address,ipv4.dns connection show eth1
8.8.8.8,8.2.2.2
10.10.10.4/24

但是,正如我们所看到的,我们没有获得字段到值的映射。我们可以使用-f来指定应使用nmcli打印哪些字段(列名称)。有效字段名称因特定命令而异。通过为--fields选项提供一个无效值来列出可用的字段。

# nmcli -f ipv4.dns,ipv4.addresses,ipv4.gateway con show eth1
ipv4.dns:                               8.8.8.8,8.2.2.2
ipv4.addresses:                         10.10.10.4/24
ipv4.gateway:                           10.10.10.1

提示:

我们可以选择以下字段:ipv4.method,ipv4.dns,ipv4.dns-search,ipv4.dns-options,ipv4.dns-priority,ipv4.addresses,ipv4.gateway,ipv4.routes,ipv4.route-metric, ipv4.route-table,ipv4.ignore-auto-routes,ipv4.ignore-auto-dns,ipv4.dhcp-client-id,ipv4.dhcp-timeout,ipv4.dhcp-send-hostname,ipv4.dhcp-hostname, ipv4.dhcp-fqdn,ipv4.never-default,ipv4.may-fail,ipv4.dad-timeout

24.监视连接和设备活动

使用nmcli Monitor,我们可以观察NetworkManager的活动。监视连接状态,设备或者连接配置文件中的更改。在此示例中,我们将在一个终端上为eth1执行" nmcli monitor",在另一终端上,我们将对eth1连接进行一些修改

# nmcli con mod eth1 ipv4.method manual ipv4.address 10.10.10.4/24

如我们所见,修改后,monitor命令给出以下输出

# nmcli con monitor eth1
eth1: connection profile changed

25.激活连接

与上面使用的相反,我们将使用" nmcli con up"

# nmcli con up eth2
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/23)

验证可用连接列表

# nmcli con show --active
NAME  UUID                                  TYPE      DEVICE
eth1  01fa0bf4-b6bd-484f-a9a3-2b10ff701dcd  ethernet  eth1
eth0  2e9f0cdd-ea2f-4b63-b146-3b9a897c9e45  ethernet  eth0
eth2  186053d4-9369-4a4e-87b8-d1f9a419f985  ethernet  eth2

26.停用连接

使用nmcli con down <ifname>禁用与设备的连接,而不阻止设备进一步自动激活。可以将多个连接传递给命令。

# nmcli con down eth1
Connection 'eth1' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/32)

验证活动连接列表

# nmcli con show --active
NAME  UUID                                  TYPE      DEVICE
eth0  d05aee6a-a069-4e55-9fe4-771ca3336db6  ethernet  eth0

说明:

如果使用此接口连接到服务器,则一旦连接被停用,连接就会关闭

27.删除连接

最后在nmcli命令示例中,我们可以使用nmcli con del &lt;ifname>删除所有类型的可用连接。

# nmcli con del bond-mybond0 bond-slave-eth1 bond-slave-eth2
Connection 'bond-mybond0' (25ce17b2-fffb-4bf1-a5a3-e7593299f303) successfully deleted.
Connection 'bond-slave-eth1' (54dc4282-b90b-4469-9cbf-82bce042de85) successfully deleted.
Connection 'bond-slave-eth2' (41a5b4a6-8e6b-4df9-bff2-b67c5328311a) successfully deleted.