Contents

使用Linux中的网络管理器配置网络设置

1. 概述

在本教程中,我们将讨论 Network Manager 包。最初,我们从包的概述以及如何安装它开始。之后,我们专注于nmcli 命令。实际上,这是网络管理器命令行界面。

2. 网络管理器组件

Network Manager 是一组用于配置 Linux 机器的网络设备的工具。至关重要的是,它通过网络管理器服务在 Linux 机器中自动配置网络设备。当然,我们也可以通过多种方式手动配置。

首先,有nmcli,网络管理器的命令行界面。接下来,有一个在终端中运行的基于文本的用户界面。此外,该软件包具有图形用户界面。最后,还有一个用于第三方访问的 API。

3. 安装与执行

首先,让我们安装网络管理器。当然,某些 Linux 发行版预装了 Network Manager 软件包。它通常以启动时运行的守护进程的形式出现。

3.1. 安装

无论如何,我们可以通过像aptyum这样的包管理器来安装 Network Manager 包。例如,我们可以在 Ubuntu 中简单地运行以下命令:

$ sudo apt-get install network-manager

请注意,Ubuntu 中的软件包名称当前是network-manager。当然,Linux 发行版之间可能会有所不同。例如,该软件包在Red Hat Linux中称为NetworkManager

3.2. 服务执行

重要的是,我们必须确保服务启动并运行。因此,我们可以在 Ubuntu 下使用systemctl status命令查看:

$ systemctl status NetworkManager
● NetworkManager.service - Network Manager
     Loaded: loaded (/lib/systemd/system/NetworkManager.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-05-25 15:18:22 EEST; 42min ago

结果,我们在命令的输出中看到了*active (running)*状态。

3.3. 与其他网络服务的关系

事实上,Network Manager 可以与 Linux 系统中的其他网络工具共存。但是,当其他此类服务(如networkd)正在运行时,我们可能不会启用它的服务。因此,最好事先停止或禁用它们以避免冲突。

3.4. 配置文件

Network Manager 的配置文件位于/etc/NetworkManager*中。此外,连接设置存储在系统连接子文件夹中。大多数情况下,我们将使用nmcli*命令来配置我们的网络设备。由于它保留了配置文件中的更改,因此我们不必手动编辑任何内容。

4. 显示Linux机器的网络状态

获取网络设备、连接和一般网络状态的列表很有帮助。例如,网络设备主要由网卡组成,而连接是分配给网络设备的配置。

在实践中,连接处理 IP 和链路层细节。例如,有IP 地址DNS 服务器和网关 设置。

4.1. 显示所有网络设备的列表

让我们使用nmcli device获取 Linux 机器中所有网络设备的列表:

$ nmcli device
DEVICE  TYPE      STATE            CONNECTION
wlp5s0  wifi      connected     MY_WIRELESS_CONN
enp0s3  ethernet  unavailable                 --
lo      loopback  unmanaged                   --

在这里,我们在输出中看到三个设备。第一个是启动并运行的 Wi-Fi 网络适配器。第二个是不活动的以太网 适配器。在最后一行,我们看到了环回网络接口。

4.2. 显示设备的 IP 地址

命令nmcli device show打印设备的 IP 地址等属性:

$ nmcli device show wlp5s0
GENERAL.DEVICE:                         wlp5s0
GENERAL.TYPE:                           wifi
GENERAL.HWADDR:                         00:18:DE:CE:4A:02
GENERAL.MTU:                            0
GENERAL.STATE:                          100 (connected)
GENERAL.CONNECTION:                     MY_WIRELESS_CONN 1
GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/ActiveConnection/0
IP4.ADDRESS[1]:                         192.168.2.8/24
IP4.GATEWAY:                            192.168.2.1
IP4.ROUTE[1]:                           dst = 169.254.0.0/16, nh = 0.0.0.0, mt = 1000
IP4.DNS[1]:                             192.168.2.1
IP4.DOMAIN[1]:                          station
IP6.ADDRESS[1]:                         fe80::50d0:5ec7:546f:d9f0/64
IP6.GATEWAY:

在这里,我们打印了有关设备*wlp5s0 的数据。*除了 IP 地址之外,该命令还会打印许多其他属性。例如 DNS 服务器、MAC 地址和网关。

4.3. 显示现有连接列表

我们可以使用nmcli connection获取现有的网络连接:

$ nmcli connection
NAME                  UUID                                 TYPE            DEVICE
MY_WIRELLESS_CONN     db1479d2-3ddf-42de-8d54-754e17a4d93b 802-11-wireless wlp5s0

该命令输出一个与无线适配器wlp5s0配对的连接。

4.4. 显示连接的属性

我们还可以打印连接的属性:

$ nmcli connection show id my-ethernet
connection.id:                          my-ethernet
connection.uuid:                        b07d9672-0b01-4e8e-a7ff-b196ee8d95c0
connection.stable-id:                   --
connection.type:                        802-3-ethernet
connection.interface-name:              --
connection.autoconnect:                 yes
connection.autoconnect-priority:        0
connection.autoconnect-retries:         -1 (default)
connection.multi-connect:               0 (default)
connection.auth-retries:                -1
connection.timestamp:                   0
...

我们使用id my-ethernet来获取该连接的属性。为简洁起见,我们排除了部分输出。请注意,如果我们不设置特定的id ,我们可以打印所有连接。

4.5. 显示无线适配器的状态

nmcli radio命令打印无线适配器的状态:

$ nmcli radio
WIFI-HW     WIFI          WWAN-HW     WWAN
enabled    enabled        enabled     enabled

如上所示,我们观察到无线广域网 (WWAN) 和 Wi-Fi 适配器已启用。

5. 配置以太网适配器

尽管 WiFi 在家里被广泛使用,但以太网适配器在工作中仍然很受欢迎。此外,我们的计算机可能会通过DHCP 从工作服务器接收其网络设置。另一方面,如果没有 DHCP 服务器,我们必须自己设置网络详细信息,如 IP 地址、DNS 服务器和默认网关。

在所有情况下,我们都使用nmcli命令的连接(缩写为con或仅c)对象。

5.1. 使用静态 IP 地址配置以太网适配器

我们通过使用nmcli connection add命令创建新连接来配置以太网适配器

$ nmcli connection add type ethernet ifname enp7s8 con-name my_ethernet ip4 192.168.2.138/24 gw4 192.168.2.1
Connection 'my_ethernet' (514c394d-0fe2-4c3c-80f5-693ba65b1db3) successfully added.

在上面的例子中,我们设置了几个选项。

首先,我们将连接type设置为ethernet 。 其次,我们在ifname之后设置接口名称。 第三,我们将con-name设置为新连接的名称。 接下来,ip4指定 IP 地址。 最后,默认IPv4 网关在gw4之后。 或者,我们可以使用ip6 和gw6选项设置IPv6 详细信息。

5.2. 使用动态 IP 地址配置以太网适配器

如果有 DHCP 服务器,我们可以使用动态 IP 创建新连接。与上一节一样,我们使用nmcli connection add命令执行此操作,但细节较少:

$ sudo nmcli connection add type ethernet ifname enp7s8 con-name my_ethernet
Connection 'my_ethernet' (cd4ff4e0-ade3-47a4-8e1b-16df2ce9f366) successfully added.

请注意,我们没有设置任何 IP 地址或默认网关

5.3. 修改连接

我们使用modify子命令来更新连接的属性

$ sudo nmcli connection modify my_ethernet ipv4.DNS 192.168.2.1

在这里,我们将 DNS 服务器设置为值 192.168.2.1。我们可以使用命令nmcli connection show来获取可用设置的列表。

5.4. 启用和禁用连接

启用和禁用连接是网络配置的一项重要任务。所以,让我们禁用我们创建的连接:

$ nmcli connection down my_ethernet
Connection 'my_ethernet' successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/4)

结果,我们使用子命令down禁用了连接。另一方面,要再次启用它,我们可以使用子命令up

$ nmcli connection up my_ethernet
Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)

如我们所见,我们启用了IDmy_ethernet的连接。D-Bus active path出现在命令的输出中。 也就是说,D-BUS API 允许其他应用程序使用我们的连接。

6. 配置无线设备

尽管如此,许多家庭用户还是通过其 DSL路由器 的 Wi-Fi 连接到互联网。事实上,nmcli命令确实在该设置中很有帮助。

为此,我们可以将流程分为两个任务:

  • 列出我们地区的无线网络
  • 连接到列出的无线网络之一

让我们来看看这两个步骤。

6.1. 列出无线网络

首先,我们使用nmcli device wifi list命令列出我们所在区域的无线网络:

$ nmcli device wifi list
*  SSID                           MODE  CHAN    RATE    SIGNAL     BARS  SECURITY  
   MY_WIRELESS_NET               Infra  11    54 Mbit/s  100     ▂▄▆█  WPA1 WPA2 
   ANOTHER_WIRELLESS_NET         Infra  52    54 Mbit/s  100     ▂▄▆█  WPA1 WPA2 
   YET_ANOTHER_WIR_NET           Infra  6     54 Mbit/s  55      ▂▄__   WPA2      

可以看出,我们得到了一个网络列表。其中,每条记录都包含 SSID、速率、信号功率和安全类型等。

6.2. 连接到无线网络

然后我们可以使用nmcli device wifi connect命令连接到无线网络:

$ nmcli device wifi connect MY_WIRELESS_NET password 8ehdxhre5kkhb6g6
Device 'wlp5s0' successfully activated with 'a7c8fbf5-3e7d-456c-921b-d739de0e3c79'.

在这里,我们使用SSID MY_WIRELESS_NET连接到网络。