分享如何使用nmcli管理网络


想到就做到
想到就做到 2024-10-14 15:39:06 1120 赞同 0 反对 0
分类: 资源 标签: 国产操作系统
分享如何使用nmcli管理网络

配置网络

配置 IP

使用nmcli命令

 说明:
使用nmcli命令配置的网络配置可以立即生效且系统重启后配置也不会丢失。

nmcli介绍

nmcli是NetworkManager的一个命令行工具,它提供了使用命令行配置由NetworkManager管理网络连接的方法。nmcli命令的基本格式为:

 
 nmcli [OPTIONS] OBJECT { COMMAND | help }

其中,OBJECT选项可以是general、networking、radio、connection或device等。在日常使用中,最常使用的是-t, --terse(用于脚本)、-p, --pretty选项(用于用户)及-h, --help选项,用户可以使用“ nmcli help”获取更多参数及使用信息。

 
$ nmcli help

常用命令使用举例如下:

  • 显示NetworkManager状态:

     
    $ nmcli general status
    
    
  • 显示所有连接:

     
    $ nmcli connection show
    
    
  • 只显示当前活动连接,如下所示添加 -a, --active:

     
    $ nmcli connection show --active
    
    
  • 显示由NetworkManager识别到的设备及其状态:

     
    $ nmcli device status
    
    
  • 使用nmcli工具启动和停止网络接口,在root权限下执行如下命令:

     
    # nmcli connection up id enp3s0
    # nmcli device disconnect enp3s0
    
    

设备管理

连接到设备

使用如下命令,NetworkManager将连接到对应网络设备,尝试找到合适的连接配置,并激活配置。

 
$nmcli device connect "$IFNAME"  

 说明:
如果不存在相应的配置连接,NetworkManager将创建并激活具有默认设置的新配置文件。

断开设备连接

使用如下命令,NetworkManager将断开设备连接,并防止设备自动激活。

 
$nmcli device disconnect "$IFNAME"  

设置网络连接

列出目前可用的网络连接:

 
解释
 
 
$ nmcli con show


NAME    UUID                                  TYPE      DEVICE
enp4s0  5afce939-400e-42fd-91ee-55ff5b65deab  ethernet  enp4s0
enp3s0  c88d7b69-f529-35ca-81ab-aa729ac542fd  ethernet  enp3s0
virbr0  ba552da6-f014-49e3-91fa-ec9c388864fa  bridge    virbr0

 说明:
输出结果中的NAME字段代表连接ID(名称)。

添加一个网络连接会生成相应的配置文件,并与相应的设备关联。检查可用的设备,方法如下:

 
解释
 
 
$ nmcli dev status

DEVICE      TYPE      STATE      CONNECTION
enp3s0      ethernet  connected  enp3s0
enp4s0      ethernet  connected  enp4s0
virbr0      bridge    connected  virbr0
lo          loopback  unmanaged  --
virbr0-nic  tun       unmanaged  --

配置动态IP连接
配置IP

要使用 DHCP 分配网络时,可以使用动态IP配置添加网络配置文件,命令格式如下:

 
nmcli connection add type ethernet con-name connection-name ifname interface-name

例如创建名为net-test的动态连接配置文件,在root权限下使用以下命令:

 
# nmcli connection add type ethernet con-name net-test ifname enp3s0
Connection 'net-test' (a771baa0-5064-4296-ac40-5dc8973967ab) successfully added.

NetworkManager 会将参数 connection.autoconnect 设定为 yes,并将设置保存到 “/etc/sysconfig/network-scripts/ifcfg-net-test”文件中,在该文件中会将 ONBOOT 设置为 yes。

激活连接并检查状态

在root权限下使用以下命令激活网络连接:

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

检查这些设备及连接的状态,使用以下命令:

 
解释
 
 
$ nmcli device status

DEVICE      TYPE      STATE      CONNECTION
enp4s0      ethernet  connected  enp4s0
enp3s0      ethernet  connected  net-test
virbr0      bridge    connected  virbr0
lo          loopback  unmanaged  --
virbr0-nic  tun       unmanaged  --

配置静态IP连接
配置IP

添加静态 IPv4 配置的网络连接,可使用以下命令:

 
nmcli connection add type ethernet con-name connection-name ifname interface-name ip4 address gw4 address

 说明:
如果要添加 IPv6 地址和网关信息,使用 ip6 和 gw6 选项。

例如创建名为 net-static的静态连接配置文件,在root权限下使用以下命令:

 
# nmcli con add type ethernet con-name net-static ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254

还可为该设备同时指定 IPv6 地址和网关,示例如下:

 
# nmcli con add type ethernet con-name test-lab ifname enp3s0 ip4 192.168.0.10/24 gw4 192.168.0.254 ip6 abbe::**** gw6 2001:***::*
Connection 'net-static' (63aa2036-8665-f54d-9a92-c3035bad03f7) successfully added.

NetworkManager 会将其内部参数 ipv4.method 设定为 manual,将 connection.autoconnect 设定为yes,并将设置写入 /etc/sysconfig/network-scripts/ifcfg-my-office 文件,其中会将对应 BOOTPROTO 设定为 none,将 ONBOOT 设定为 yes。

设定两个 IPv4 DNS 服务器地址,在root权限下使用以下命令:

 
# nmcli con mod net-static ipv4.dns "*.*.*.* *.*.*.*"

设置两个 IPv6 DNS 服务器地址,在root权限下使用以下命令:

 
# nmcli con mod net-static ipv6.dns "2001:4860:4860::**** 2001:4860:4860::****"

激活连接并检查状态

激活新的网络连接,在root权限下使用以下命令:

 
# nmcli con up net-static ifname enp3s0
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)

检查这些设备及连接的状态,使用以下命令:

 
解释
 
 
$ nmcli device status

DEVICE      TYPE      STATE      CONNECTION
enp4s0      ethernet  connected  enp4s0
enp3s0      ethernet  connected  net-static
virbr0      bridge    connected  virbr0
lo          loopback  unmanaged  --
virbr0-nic  tun       unmanaged  --

查看配置的连接详情,使用以下命令(使用 -p, --pretty 选项在输出结果中添加标题和分段):

 
解释
 
 
$ nmcli -p con show net-static 
===============================================================================
Connection profile details (net-static )
===============================================================================
connection.id:                          net-static
connection.uuid:                        b9f18801-6084-4aee-af28-c8f0598ff5e1
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              enp3s0
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   1578988781
connection.read-only:                   no
connection.permissions:                 --
connection.zone:                        --
connection.master:                      --
connection.slave-type:                  --
connection.autoconnect-slaves:          -1 (default)
connection.secondaries:                 --
connection.gateway-ping-timeout:        0
connection.metered:                     unknown
connection.lldp:                        default
connection.mdns:                        -1 (default)
connection.llmnr:                       -1 (default)

添加 Wi-Fi 连接

有两种方式添加Wi-Fi 连接。

方法1,通过网络接口连接Wi-Fi

连接到由SSID或BSSID指定的wifi网络。命令如下,该命令找到匹配的连接或创建一个连接,然后在设备上激活它。

 
$ nmcli device wifi connect "$SSID" password "$PASSWORD" ifname "$IFNAME"  
$ nmcli --ask device wifi connect "$SSID" 

方法2,通过配置文件连接Wi-Fi

1,使用以下命令查看可用 Wi-Fi 访问点:

 
$ nmcli dev wifi list

2,使用以下命令生成使用的静态 IP 配置,但允许自动 DNS 地址分配的 Wi-Fi 连接:

 
$ nmcli con add con-name Wifi ifname wlan0 type wifi ssid MyWifi ip4 192.168.100.101/24 gw4 192.168.100.1

3,请使用以下命令设定 WPA2 密码,例如 “answer”:

 
$ nmcli con modify Wifi wifi-sec.key-mgmt wpa-psk
$ nmcli con modify Wifi wifi-sec.psk answer

4,使用以下命令更改 Wi-Fi 状态:

 
$ nmcli radio wifi [ on | off ]

更改属性

请使用以下命令检查具体属性,比如 mtu:

 
$ nmcli connection show id 'Wifi ' | grep mtu
802-11-wireless.mtu: auto

使用如下命令更改设置的属性:

 
$ nmcli connection modify id 'Wifi ' 802-11-wireless.mtu 1350

使用如下命令确认更改:

 
$ nmcli connection show id 'Wifi ' | grep mtu
802-11-wireless.mtu: 1350

配置静态路由

  • 使用nmcli命令为网络连接配置静态路由,使用命令如下:

     
    $ nmcli connection modify enp3s0 +ipv4.routes "192.168.122.0/24 10.10.10.1"
    
    
  • 使用编辑器配置静态路由,使用如下命令:

     
    解释
     
     
    $ nmcli con edit type ethernet con-name enp3s0
    ===| nmcli interactive connection editor |===
    Adding a new '802-3-ethernet' connection
    Type 'help' or '?' for available commands.
    Type 'describe [<setting>.<prop>]' for detailed property description.
    You may edit the following settings: connection, 802-3-ethernet (ethernet), 802-1x, ipv4, ipv6, dcb
    nmcli> set ipv4.routes 192.168.122.0/24 10.10.10.1
    nmcli>
    nmcli> save persistent
    Saving the connection with 'autoconnect=yes'. That might result in an immediate activation of the connection.
    Do you still want to save? [yes] yes
    Connection 'enp3s0' (1464ddb4-102a-4e79-874a-0a42e15cc3c0) successfully saved.
    nmcli> quit
    
    

使用ip命令

 说明:
使用ip命令配置的网络配置可以立即生效但系统重启后配置会丢失。

配置IP地址

使用ip命令为接口配置地址,命令格式如下,其中 interface-name 为网卡名称。

 
ip addr [ add | del ] address dev interface-name

配置静态地址

在root权限下,配置IP地址,使用示例如下:

 
# ip address add 192.168.0.10/24 dev enp3s0

查看配置结果,在root权限使用如下命令:

 
解释
 
 
# ip addr show dev enp3s0
2: enp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:aa:ad:4a brd ff:ff:ff:ff:ff:ff
    inet 192.168.202.248/16 brd 192.168.255.255 scope global dynamic noprefixroute enp3s0
       valid_lft 9547sec preferred_lft 9547sec
    inet 192.168.0.10/24 scope global enp3s0
       valid_lft forever preferred_lft forever
    inet6 fe80::32e8:cc22:9db2:f4d4/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

配置多个地址

ip 命令支持为同一接口分配多个地址,可在root权限下重复多次使用 ip 命令实现分配多个地址。使用示例如下:

 
解释
 
 
# ip address add 192.168.2.223/24 dev enp4s0
# ip address add 192.168.4.223/24 dev enp4s0
# ip addr

3: enp4s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 52:54:00:aa:da:e2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.203.12/16 brd 192.168.255.255 scope global dynamic noprefixroute enp4s0
       valid_lft 8389sec preferred_lft 8389sec
    inet 192.168.2.223/24 scope global enp4s0
       valid_lft forever preferred_lft forever
    inet 192.168.4.223/24 scope global enp4s0
       valid_lft forever preferred_lft forever
    inet6 fe80::1eef:5e24:4b67:f07f/64 scope link noprefixroute
       valid_lft forever preferred_lft forever

配置静态路由

如果需要静态路由,可使用 ip route add 命令在路由表中添加,使用 ip route del 命令删除。最常使用的 ip route 命令格式如下:

 
ip route [ add | del | change | append | replace ] destination-address

在root权限下使用 ip route 命令显示当前的 IP 路由表。示例如下:

 
解释
 
 
# ip route

default via 192.168.0.1 dev enp3s0 proto dhcp metric 100
default via 192.168.0.1 dev enp4s0 proto dhcp metric 101
192.168.0.0/16 dev enp3s0 proto kernel scope link src 192.168.202.248 metric 100
192.168.0.0/16 dev enp4s0 proto kernel scope link src 192.168.203.12 metric 101
192.168.122.0/24 dev virbr0 proto kernel scope link src 192.168.122.1 linkdown

在主机地址中添加一个静态路由,在 root 权限下,使用以下命令格式:

 
ip route add 192.168.2.1 via 10.0.0.1 [dev interface-name]

其中 192.168.2.1 是用点分隔的十进制符号中的 IP 地址,10.0.0.1 是下一个跃点,interface-name 是进入下一个跃点的退出接口。

要在网络中添加一个静态路由,即代表 IP 地址范围的 IP 地址,请在root权限下运行以下命令格式:

 
ip route add 192.168.2.0/24 via 10.0.0.1 [dev interface-name]

其中 192.168.2.1 是目标网络的 IP 地址,10.0.0.1 是网络前缀,interface-name 为网卡名称。

通过ifcfg文件配置网络

 说明:
通过ifcfg文件配置的网络配置不会立即生效,需要在root权限下执行systemctl reload NetworkManager命令以重启网络服务后才生效。

配置静态网络

以enp4s0网络接口进行静态网络设置为例,通过在root权限下修改ifcfg文件实现,在/etc/sysconfig/network-scripts/目录中生成名为ifcfg-enp4s0的文件中,修改参数配置,示例如下:

 
解释
 
 
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none
IPADDR=192.168.0.10
PREFIX=24
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp4s0static
UUID=08c3a30e-c5e2-4d7b-831f-26c3cdc29293
DEVICE=enp4s0
ONBOOT=yes

配置动态网络

要通过ifcfg文件为em1接口配置动态网络,请按照如下操作在/etc/sysconfig/network-scripts/目录中生成名为 ifcfg-em1 的文件,示例如下:

 
DEVICE=em1
BOOTPROTO=dhcp
ONBOOT=yes

要配置一个向DHCP服务器发送不同的主机名的接口,请在ifcfg文件中新增一行内容,如下所示:

 
DHCP_HOSTNAME=hostname

要配置忽略由DHCP服务器发送的路由,防止网络服务使用从DHCP服务器接收的DNS服务器更新/etc/resolv.conf。请在ifcfg文件中新增一行内容,如下所示:

 
PEERDNS=no

要配置一个接口使用具体DNS服务器,请将参数PEERDNS=no,并在ifcfg文件中添加以下行:

 
DNS1=ip-address
DNS2=ip-address

其中ip-address是DNS服务器的地址。这样就会让网络服务使用指定的DNS服务器更新/etc/resolv.conf。

配置默认网关

在确定默认网关时,首先解析 /etc/sysconfig/network 文件,然后解析 ifcfg 文件 ,将最后读取的 GATEWAY 的取值作为路由表中的默认路由。

在动态网络环境中,使用 NetworkManager 管理主机时,建议设置为由 DHCP 来分配。

配置主机名

简介

hostname有三种类型:static、transient和pretty。

  • static:静态主机名,可由用户自行设置,并保存在/etc/hostname 文件中。
  • transient:动态主机名,由内核维护,初始是 static 主机名,默认值为“localhost”。可由DHCP或mDNS在运行时更改。
  • pretty:灵活主机名,允许使用自由形式(包括特殊/空白字符)进行设置。静态/动态主机名遵从域名的通用限制。

 说明:
static和transient主机名只能包含a-z、A-Z、0-9、“-”、“_”和“.”,不能在开头或结尾处使用句点,不允许使用两个相连的句点,大小限制为 64 个字符。

使用hostnamectl配置主机名

查看所有主机名

查看当前的主机名,使用如下命令:

 
$ hostnamectl status

 说明:
如果命令未指定任何选项,则默认使用status选项。

设定所有主机名

在root权限下,设定系统中的所有主机名,使用如下命令:

 
# hostnamectl set-hostname name

设定特定主机名

在root权限下,通过不同的参数来设定特定主机名,使用如下命令:

 
# hostnamectl set-hostname name [option...]

其中option可以是–pretty、–static、–transient中的一个或多个选项。

如果–static或–transient与–pretty选项一同使用时,则会将static和transient主机名简化为pretty主机名格式,使用“-”替换空格,并删除特殊字符。

当设定pretty主机名时,如果主机名中包含空格或单引号,需要使用引号。命令示例如下:

 
# hostnamectl set-hostname "Stephen's notebook" --pretty

清除特定主机名

要清除特定主机名,并将其还原为默认形式,在root权限下,使用如下命令:

 
# hostnamectl set-hostname "" [option...]

其中 “” 是空白字符串,option是–pretty、–static和–transient中的一个或多个选项。

远程更改主机名

在远程系统中运行hostnamectl命令时,要使用-H,–host 选项,在root权限下使用如下命令:

 
# hostnamectl set-hostname -H [username]@hostname new_hostname

其中hostname是要配置的远程主机,username为自选项,new_hostname为新主机名。hostnamectl会通过SSH连接到远程系统。

使用nmcli配置主机名

查询static主机名,使用如下命令:

 
$ nmcli general hostname

在root权限下,将static主机名设定为host-server,使用如下命令:

 
# nmcli general hostname host-server

要让系统hostnamectl感知到static主机名的更改,在root权限下,重启hostnamed服务,使用如下命令:

 
# systemctl restart systemd-hostnamed

如果您发现该资源为电子书等存在侵权的资源或对该资源描述不正确等,可点击“私信”按钮向作者进行反馈;如作者无回复可进行平台仲裁,我们会在第一时间进行处理!

评价 0 条
请使用微信扫码

加入交流群

请使用微信扫一扫!