如何在 Linux 中使用“nmcli”配置 IP 网络
作为 Linux 管理员,您可以使用各种工具来配置网络连接,例如 nmtui、带有 GNOME 图形用户界面的 NetworkManager,当然还有 >nmcli(网络管理器命令行工具)。
我观察到许多管理员使用 nmtui 因为它的简单性。然而,使用 nmcli 可以节省您的时间、增强您的信心、允许集成到脚本中,并且是排除 Linux 服务器网络故障、快速恢复其功能的主要工具。
注意到许多寻求 nmcli 帮助的评论,我决定写这篇文章。当然,您应该始终仔细阅读手册页(它们是您的第一资源)。我的目的是节省您的时间并为您提供一些有用的提示。
nmcli 命令语法
nmcli 的语法是:
nmcli [OPTIONS] OBJECT {COMMAND | help}
其中 OBJECT 是常规、网络、无线电、连接、设备和代理之一。
检查 Linux 中的网络设备状态
一个好的起点是检查我们的设备:
nmcli dev status
DEVICE TYPE STATE CONNECTION
docker0 bridge connected docker0
virbr0 bridge connected virbr0
enp0s3 ethernet connected enp0s3
virbr0-nic ethernet disconnected --
lo loopback unmanaged --
正如我们在第一列中看到的,有一个我们的网络设备列表。我们有一张名为 enp0s3
的网卡。在您的计算机上,您可能会看到不同的名称。
命名取决于网卡的类型(是否是板载网卡、PCI 卡等)。在最后一列中,我们看到我们的配置文件,我们的设备使用这些文件连接到网络
很容易理解,我们的设备本身无能为力。他们需要我们创建一个配置文件来指导他们如何实现网络连接。这些文件也称为“连接配置文件”,我们可以在 /etc/sysconfig/network-scripts 目录中找到它们。
cd /etc/sysconfig/network-scripts/
ls
样本输出
ifcfg-enp0s3 ifdown-isdn ifup ifup-plip ifup-tunnel
ifcfg-lo ifdown-post ifup-aliases ifup-plusb ifup-wireless
ifdown ifdown-ppp ifup-bnep ifup-post init.ipv6-global
ifdown-bnep ifdown-routes ifup-eth ifup-ppp network-functions
ifdown-eth ifdown-sit ifup-ib ifup-routes network-functions-ipv6
ifdown-ib ifdown-Team ifup-ippp ifup-sit
ifdown-ippp ifdown-TeamPort ifup-ipv6 ifup-Team
ifdown-ipv6 ifdown-tunnel ifup-isdn ifup-TeamPort
正如您在此处看到的,名称以 'ifcfg-'
(接口配置)开头的文件是连接配置文件。当我们使用 nmcli 或 nmtui 创建新连接或修改现有连接时,结果将作为连接配置文件保存在此处。
我将向您展示我机器上的其中两个,一个具有 dhcp 配置,另一个具有静态 IP。
cat ifcfg-static1
cat ifcfg-Myoffice1
我们意识到某些属性具有不同的值,而另一些属性如果没有必要则不存在。
让我们快速浏览一下最重要的内容。
TYPE
– 我们这里有以太网类型。我们还可以有 WiFi、团队、债券等。DEVICE
– 与此配置文件关联的网络设备的名称。BOOTPROTO
– 如果它的值为“dhcp”,那么我们的连接配置文件将从 DHCP 服务器获取动态 IP。如果它的值为“none”,那么它不使用动态IP,我们可能会分配一个静态IP。IPADDR
– 是我们分配给我们的配置文件的静态IP。PREFIX
– 子网掩码。值 24 表示 255.255.255.0。通过写下子网掩码的二进制格式,您可以更好地理解子网掩码。例如,值 16、24 和 26 表示前一个 16、24<或26位分别设置为1,其余为0。这定义了网络地址和可以分配的IP地址范围。GATEWAY
– 网关 IP。DNS1
、DNS2
– 我们要使用的两个 DNS 服务器。ONBOOT
– 如果它的值为“yes”,则表示在启动时我们的计算机将读取此配置文件并尝试将其分配给其设备。
检查 Linux 中的网络连接
现在,让我们继续检查我们的连接:
nmcli con show
最后一列设备可帮助我们了解哪个连接处于“UP”状态且正在运行,哪个连接未运行。在上图中,您可以看到两个活动连接:Myoffice1 和 enp0s8。
提示:如果您只想查看活动连接,请键入:
nmcli con show -a
提示:使用nmcli时可以使用自动完成点击Tab
,但最好使用命令的最小格式。
因此,以下命令是相同的:
nmcli connection show
nmcli con show
nmcli c s
在 Linux 中检查 IP 地址
如果我检查我的设备的 IP 地址:
ip a
我看到我的设备 enp0s3
从 dhcp 服务器获取了 192.168.1.6 IP,因为已启动的连接配置文件 Myoffice1
具有 dhcp 配置。
如果我“up”
我的连接配置文件名为static1
,那么我的设备将采用静态IP192.168.1.40,因为它在连接配置文件。
nmcli con down Myoffice1 ; nmcli con up static1
nmcli con show
让我们再次查看 IP 地址:
ip a
我们可以制作第一个连接配置文件。我们必须定义的最少属性是 type、ifname 和 con-name:
type
– 连接类型。ifname
– 分配给我们连接的设备名称。con-name
– 连接名称。
在 Linux 中创建新的以太网连接
让我们建立一个名为 Myhome1
的新以太网连接,并将其分配给设备 enp0s3
:
nmcli con add type ethernet con-name Myhome1 ifname enp0s3
检查其配置:
cat ifcfg-Myhome1
正如你所看到的,它有 BOOTPROTO=dhcp
,因为我们没有提供任何静态 IP 地址。
提示:我们可以使用“nmcli con mod”
命令修改任何连接。但是,如果您修改 dhcp 连接并将其更改为静态,请不要忘记将其 “ipv4.method ”
从 “auto ”
更改为 “manual ”
。否则,您最终将得到两个 IP 地址:一个来自 dhcp 服务器,另一个是静态 IP 地址。
让我们创建一个名为 static2
的新以太网连接配置文件,它将分配给设备 enp0s3
,具有静态 IP 192.168.1.50、子网掩码255.255.255.0=24,和网关192.168.1.1。
nmcli con add type ethernet con-name static2 ifname enp0s3 ip4 192.168.1.50/24 gw4 192.168.1.1
检查其配置:
cat ifcfg-static2
修改Linux中的DNS服务器
让我们修改最后一个连接配置文件并添加两个 dns 服务器。
nmcli con mod static2 ipv4.dns “8.8.8.8 8.8.4.4”
提示:这里必须注意一点:添加和修改连接时,IP 地址和网关属性的名称不同。添加连接时,您使用 “ip4 ”
和 “gw4 ”
,而修改连接时,您使用 “ipv4 ”
和 “ gwv4”
。
在 Linux 中建立以太网连接
现在让我们打开这个连接配置文件:
nmcli con down static1 ; nmcli con up static2
如您所见,设备 enp0s3
现在的 IP 地址为 192.168.1.50。
ip a
提示:有很多属性可以修改。如果您没有记住它们,您可以通过输入“nmcli con show”来帮助自己,然后输入连接名称:
nmcli con show static2
您可以修改所有以小写形式编写的属性。
例如:当您关闭某个连接配置文件时,NetworkManager 会搜索另一个连接配置文件并自动将其打开。 (我将其作为练习来检查)。如果您不希望连接配置文件自动连接:
nmcli con mod static2 connection.autoconnect no
最后一个练习非常有用:您创建了一个连接配置文件,但您希望它由特定用户使用。对用户进行分类是件好事!
在Linux中为用户设置以太网连接权限
我们只允许用户 stella 使用此配置文件:
nmcli con mod static2 connection.permissions stella
提示:如果您想向多个用户授予权限,则必须键入user:user1,user2
,且各个用户之间不留空格:
nmcli con mod static2 connection.permissions user:stella,john
如果您以其他用户身份登录,则无法“启动”此连接配置文件:
nmcli con show
nmcli con up static2
ls /etc/sysconfig/network-scripts
错误消息表明连接‘static2’不存在,即使我们看到它存在。这是因为当前用户无权建立此连接。
结论:不要犹豫,使用 nmcli。这很简单而且很有帮助。