介绍
在这个实验(Lab)中,你将获得在 Red Hat Enterprise Linux 系统上配置网络接口和主机名设置的实践经验。你将学习必要的命令行工具和技术,以管理你的系统的网络连接和标识。
在整个实验(Lab)过程中,你将验证现有的网络接口状态和 IP 地址,添加具有静态 IP 配置的新网络连接,并练习激活和停用这些连接。此外,你将修改现有的网络设置,配置系统的 hostname 和名称解析,最后,测试网络连接和名称解析,以确保所有配置都按预期工作。
在这个实验(Lab)中,你将获得在 Red Hat Enterprise Linux 系统上配置网络接口和主机名设置的实践经验。你将学习必要的命令行工具和技术,以管理你的系统的网络连接和标识。
在整个实验(Lab)过程中,你将验证现有的网络接口状态和 IP 地址,添加具有静态 IP 配置的新网络连接,并练习激活和停用这些连接。此外,你将修改现有的网络设置,配置系统的 hostname 和名称解析,最后,测试网络连接和名称解析,以确保所有配置都按预期工作。
在这一步中,你将学习如何使用命令行工具验证 Red Hat Enterprise Linux 系统上的网络接口状态和 IP 地址。了解你的网络配置对于排除连接问题和管理网络服务至关重要。
首先,让我们探索 ip link 命令,该命令列出系统上所有可用的网络接口。此命令提供了网络适配器的高级概述,包括它们的状态(UP/DOWN)、MAC 地址和 MTU(最大传输单元)。
打开你的终端。你应该会看到类似于 [labex@host ~]$ 的提示符。
ip link show
你将看到类似这样的输出,显示诸如 lo(环回)、eth0 和 eth1(以太网接口,具有备用名称)之类的接口:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:0f:9e:4e brd ff:ff:ff:ff:ff:ff
altname enp0s6
altname ens6
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:0f:9e:51 brd ff:ff:ff:ff:ff:ff
altname enp0s7
altname ens7
请注意,你的系统有两个以太网接口(eth0 和 eth1),具有备用名称(分别为 enp0s6/ens6 和 enp0s7/ens7)。qdisc mq 表示正在使用多队列网络调度程序以获得更好的性能。
接下来,我们将使用 ip addr 命令来查看特定网络接口的详细设备和地址信息。此命令提供有关已分配的 IP 地址(IPv4 和 IPv6)、广播地址和子网掩码的信息。
让我们检查你的 eth0 接口的详细信息:
ip addr show eth0
输出将显示分配给 eth0 的 IP 地址,包括 IPv4 和 IPv6 地址(如果已配置):
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:0f:9e:4e brd ff:ff:ff:ff:ff:ff
altname enp0s6
altname ens6
inet 172.16.50.116/24 brd 172.16.50.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe0f:9e4e/64 scope link
valid_lft forever preferred_lft forever
请注意,eth0 的 IP 地址为 172.16.50.116/24,带有 noprefixroute 标志,这表明 NetworkManager 正在管理此接口的路由。
ip -s link show 命令还可以显示有关网络性能的统计信息,例如已发送和接收的字节数和数据包数,以及任何错误或丢弃的数据包。这对于快速检查网络流量很有用。
ip -s link show eth0
你将看到 eth0 接口的统计信息:
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DEFAULT group default qlen 1000
link/ether 00:16:3e:0f:9e:4e brd ff:ff:ff:ff:ff:ff
RX: bytes packets errors dropped missed mcast
90512 884 0 0 0 0
TX: bytes packets errors dropped carrier collsns
1430185 1069 0 0 0 0
altname enp0s6
altname ens6
最后,让我们使用 ip route 命令验证路由表。路由表确定网络流量如何定向到其目的地。
ip route
此命令将显示 IPv4 路由表,显示默认路由和特定网络的路由。由于你有两个网络接口,你将看到多个路由:
default via 172.16.50.253 dev eth0 proto dhcp src 172.16.50.116 metric 100
default via 172.16.50.253 dev eth1 proto dhcp src 172.16.50.117 metric 200
172.16.50.0/24 dev eth0 proto kernel scope link src 172.16.50.116 metric 100
172.16.50.0/24 dev eth1 proto kernel scope link src 172.16.50.117 metric 200
请注意,有两个具有不同指标(100 和 200)的默认路由,这意味着 eth0 由于其较低的指标值而具有优先级。两个接口都连接到同一网段(172.16.50.0/24)并使用相同的网关(172.16.50.253)。eth0 接口的 IP 地址为 172.16.50.116/24,eth1 的 IP 地址为 172.16.50.117/24。
要查看 IPv6 路由表,请使用 ip -6 route 命令:
ip -6 route
你将看到两个接口的 IPv6 路由条目:
::1 dev lo proto kernel metric 256 pref medium
fe80::/64 dev eth0 proto kernel metric 256 pref medium
fe80::/64 dev eth1 proto kernel metric 256 pref medium
在这一步中,你将学习如何使用 nmcli 命令行工具添加具有静态 IP 地址的新网络连接。nmcli 是一个强大的实用程序,用于控制 NetworkManager,它管理 Red Hat Enterprise Linux 上的网络连接。
首先,让我们检查当前的网络设备状态,以识别可用的接口。这将帮助我们选择要配置的接口。
nmcli dev status
你将看到类似这样的输出,显示诸如 eth0 和 eth1 之类的设备及其各自的连接名称:
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected System eth0
eth1 ethernet connected System eth1
lo loopback connected (externally) lo
对于这个实验(Lab),我们将使用 eth0 接口来创建新的静态连接。请注意,你的系统已经具有名为 System eth0 和 System eth1 的活动连接,这些连接由 NetworkManager 自动生成。
现在,让我们向 eth0 接口添加一个名为 static-eth0 的新网络连接。我们将使用静态 IPv4 地址、子网掩码和网关来配置它。基于当前的网络环境(172.16.50.0/24),我们将使用以下详细信息:
static-eth0eth0172.16.50.200/24(这意味着 IP 地址 172.16.50.200,带有 24 位子网掩码)172.16.50.253(与当前网关相同)执行以下命令以添加新连接。请记住使用 sudo,因为网络配置更改需要 root 权限。系统不会提示你输入密码。
注意: 如果你已经使用不同的 IP 范围(例如 192.168.1.10/24)创建了 static-eth0 连接,你应该首先删除它,然后使用此环境的正确 IP 范围重新创建它:
## 如果存在具有错误 IP 范围的现有连接,则将其删除
sudo nmcli con delete static-eth0
## 使用正确的 IP 范围添加新连接
sudo nmcli con add con-name static-eth0 type ethernet ifname eth0 ipv4.addresses 172.16.50.200/24 ipv4.gateway 172.16.50.253 ipv4.method manual
执行该命令后,你应该会看到一条确认消息,表明连接已成功添加:
Connection 'static-eth0' (d4c42169-4134-4d3a-9b31-e837d62601bd) successfully added.
让我们分解一下该命令:
sudo nmcli con add:这是添加新的 NetworkManager 连接的基本命令。con-name static-eth0:这会将名称 static-eth0 分配给我们的新连接配置文件。type ethernet:指定这是一个以太网类型的连接。ifname eth0:将此连接配置文件绑定到 eth0 网络接口。ipv4.addresses 172.16.50.200/24:设置静态 IPv4 地址和子网掩码。ipv4.gateway 172.16.50.253:设置此连接的默认网关。ipv4.method manual:将 IPv4 地址分配方法配置为手动(静态),防止它尝试通过 DHCP 获取 IP 地址。现在,让我们验证是否已创建新的连接配置文件。我们可以使用 nmcli con show 列出所有可用的连接。
nmcli con show
你应该在你的连接中看到 static-eth0。请注意,它尚未激活(未分配设备),而系统生成的连接已激活:
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
System eth1 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 ethernet eth1
lo 9eac3150-dd39-47e6-a375-f7165442a8eb loopback lo
static-eth0 d4c42169-4134-4d3a-9b31-e837d62601bd ethernet --
在下一步中,我们将学习如何激活这个新创建的连接。
在这一步中,你将学习如何使用 nmcli 命令激活和停用网络连接。激活连接会启动网络接口并应用在连接配置文件中定义的配置。停用连接会关闭接口。
首先,让我们列出所有网络连接以查看它们当前的状态。这将帮助我们识别 eth0 上哪个连接处于活动状态。
nmcli con show
你将看到类似这样的输出。请注意,System eth0 当前在 eth0 上处于活动状态,而 static-eth0 未激活:
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
System eth1 9c92fad9-6ecb-3e6c-eb4d-8a47c6f50c04 ethernet eth1
lo 8fe3e894-2a2e-446f-9abc-cdf612f0d973 loopback lo
static-eth0 66094d3b-f21a-44f9-b1ef-3b2b2659e487 ethernet --
现在,让我们激活你在上一步中创建的 static-eth0 连接。
重要提示: 由于我们正在远程环境中工作,因此在主接口(eth0)上激活具有不同 IP 地址的连接可能会导致你的远程连接中断。在生产环境中,你通常会:
对于这个实验(Lab),我们将使用 eth1 而不是 eth0 以避免连接中断。让我们首先为 eth1 创建一个静态连接:
sudo nmcli con add con-name static-eth1 type ethernet ifname eth1 ipv4.addresses 172.16.50.201/24 ipv4.gateway 172.16.50.253 ipv4.method manual
现在激活 static-eth1 连接:
sudo nmcli con up static-eth1
你应该会看到一条确认消息,表明连接已成功激活:
Connection 'static-eth1' successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/X)
激活 static-eth1 后,原始的 System eth1 连接将自动停用,因为每个设备只能有一个连接处于活动状态。让我们再次验证你的网络设备和连接的状态。
nmcli dev status
你现在应该看到 eth1 与 static-eth1 连接相关联,而 eth0 仍保持其原始连接:
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected System eth0
eth1 ethernet connected static-eth1
lo loopback connected lo
让我们再次检查连接列表以确认 static-eth1 处于活动状态:
nmcli con show --active
你应该看到 static-eth1 被列为活动连接,以及其他活动连接:
NAME UUID TYPE DEVICE
System eth0 5fb06bd0-0bb0-7ffb-45f1-d6edd65f3e03 ethernet eth0
lo 9eac3150-dd39-47e6-a375-f7165442a8eb loopback lo
static-eth1 xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ethernet eth1
现在,让我们验证 eth1 接口是否具有你配置的静态 IP 地址。
ip addr show eth1
输出现在应该显示 172.16.50.201/24 作为 eth1 的 IPv4 地址:
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:0f:9e:51 brd ff:ff:ff:ff:ff:ff
altname enp0s7
altname ens7
inet 172.16.50.201/24 brd 172.16.50.255 scope global eth1
valid_lft forever preferred_lft forever
inet6 fe80::216:3eff:fe0f:9e51/64 scope link
valid_lft forever preferred_lft forever
最后,让我们学习如何停用网络连接。你可以断开设备连接,这将关闭该设备上的活动连接。
sudo nmcli dev disconnect eth1
你应该会看到一条确认消息:
Device 'eth1' successfully disconnected.
再次验证设备状态。eth1 现在应该处于 disconnected 状态。
nmcli dev status
DEVICE TYPE STATE CONNECTION
eth0 ethernet connected System eth0
eth1 ethernet disconnected --
lo loopback connected lo
请注意,断开设备连接也将停用先前在该设备上处于活动状态的连接。如果你想恢复原始的 System eth1 连接,你将再次使用 sudo nmcli con up "System eth1" 激活它(请注意,由于空格,连接名称周围有引号)。对于这个实验(Lab),我们暂时将 eth1 保持断开状态。
在这一步中,你将学习如何使用 nmcli 命令修改现有网络连接的设置。当你需要更新 IP 地址、DNS 服务器或其他网络参数时,这是一项常见的任务。
首先,让我们确保我们的 static-eth1 连接处于活动状态,因为我们将修改其设置。如果它未激活,请立即激活它。
sudo nmcli con up static-eth1
如果它被激活,你应该会看到一条确认消息,或者一条表明它已经处于活动状态的消息。
Connection 'static-eth1' successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/X)
现在,让我们查看 static-eth1 连接的当前设置。此命令将显示连接的所有已配置属性。
nmcli con show static-eth1
你将看到连接属性的详细输出。请注意 ipv4.addresses 和 ipv4.gateway 行。
connection.id: static-eth1
connection.uuid: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
connection.interface-name: eth1
...
ipv4.addresses: { ip = 172.16.50.201/24, gw = 172.16.50.253 }
ipv4.gateway: 172.16.50.253
...
让我们将 static-eth1 的 IPv4 地址修改为 172.16.50.221/24,并保持相同的网关 172.16.50.253。
sudo nmcli con mod static-eth1 ipv4.addresses 172.16.50.221/24 ipv4.gateway 172.16.50.253
此命令将修改连接配置文件。但是,要使更改生效,你需要停用然后重新激活连接。
首先,停用 eth1 设备:
sudo nmcli dev disconnect eth1
你应该会看到:
Device 'eth1' successfully disconnected.
然后,重新激活 static-eth1 连接:
sudo nmcli con up static-eth1
你应该会看到:
Connection 'static-eth1' successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/X)
现在,让我们验证 IP 地址和网关是否已更新。
ip addr show eth1
输出现在应该反映新的 IP 地址 172.16.50.221/24。请注意,你可能还会看到来自先前配置的辅助 IP 地址:
3: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:16:3e:0f:a2:70 brd ff:ff:ff:ff:ff:ff
altname enp0s7
altname ens7
inet 172.16.50.221/24 brd 172.16.50.255 scope global noprefixroute eth1
valid_lft forever preferred_lft forever
inet 172.16.50.122/24 brd 172.16.50.255 scope global secondary noprefixroute eth1
valid_lft forever preferred_lft forever
并检查路由表以确认网关:
ip route
你应该会看到两个接口的路由,其中 eth1 具有新的 IP 地址。请注意,如果存在辅助 IP 地址,你可能会看到其他路由:
default via 172.16.50.253 dev eth0 proto dhcp src 172.16.50.121 metric 100
default via 172.16.50.253 dev eth1 proto static metric 101
172.16.50.0/24 dev eth0 proto kernel scope link src 172.16.50.121 metric 100
172.16.50.0/24 dev eth1 proto kernel scope link src 172.16.50.221 metric 101
172.16.50.0/24 dev eth1 proto kernel scope link src 172.16.50.122 metric 101
你还可以从多值设置(如 DNS 服务器)中添加或删除特定值。让我们向我们的 static-eth1 连接添加一个 DNS 服务器 8.8.8.8。
sudo nmcli con mod static-eth1 +ipv4.dns 8.8.8.8
要应用此更改,你需要再次停用并重新激活连接。你可以在单独的行上运行这些命令,也可以将它们组合起来:
sudo nmcli dev disconnect eth1
sudo nmcli con up static-eth1
验证 DNS 设置:
nmcli con show static-eth1 | grep ipv4.dns
你应该看到 8.8.8.8 被列为 DNS 服务器:
ipv4.dns: 8.8.8.8
在这一步中,你将学习如何配置你的系统的主机名并管理名称解析设置。主机名是在网络上标识你的系统的唯一名称,而名称解析是将主机名转换为 IP 地址,反之亦然的过程。
首先,让我们使用 hostname 命令检查你系统的当前主机名。
hostname
你将看到当前的主机名,它可能是一个默认值,例如 host 或 localhost.localdomain。
host
要设置静态主机名,我们使用 hostnamectl 命令。此命令修改 /etc/hostname 文件,该文件在重新启动后保留主机名。让我们将主机名设置为 server.labex.example.com。
sudo hostnamectl set-hostname server.labex.example.com
设置主机名后,你可以使用 hostnamectl status 验证它。
hostnamectl status
你应该看到列出的新的静态主机名:
Static hostname: server.labex.example.com
Icon name: computer-vm
Chassis: vm 🖴
Machine ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Boot ID: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Virtualization: kvm
Operating System: Red Hat Enterprise Linux 9.6 (Plow)
CPE OS Name: cpe:/o:redhat:enterprise_linux:9::baseos
Kernel: Linux 5.14.0-xxx.el9.x86_64
Architecture: x86-64
Hardware Vendor: Alibaba Cloud
Hardware Model: Alibaba Cloud ECS
你也可以直接检查 /etc/hostname 文件的内容:
cat /etc/hostname
这将显示你的新主机名:
server.labex.example.com
接下来,让我们配置名称解析。Linux 系统通常在查询 DNS 服务器之前使用 /etc/hosts 文件进行本地主机名到 IP 地址的映射。让我们为虚构的服务器 webserver.labex.example.com 添加一个条目到 /etc/hosts,其 IP 地址为 192.168.1.100。
我们将使用 sudo nano 编辑 /etc/hosts 文件。
sudo nano /etc/hosts
在文件末尾添加以下行:
192.168.1.100 webserver.labex.example.com
按 Ctrl+X,然后按 Y 保存,再按 Enter 确认文件名。
现在,让我们验证该条目是否存在于 /etc/hosts 中:
cat /etc/hosts
你应该看到你添加的条目:
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.1.100 webserver.labex.example.com
要使用 /etc/hosts 文件测试主机名解析,你可以使用 getent hosts 命令。此命令查询名称服务切换(NSS,Name Service Switch)配置,其中包括 /etc/hosts。
getent hosts webserver.labex.example.com
你应该看到从你的 /etc/hosts 文件解析的 IP 地址:
192.168.1.100 webserver.labex.example.com
最后,让我们看看 /etc/resolv.conf 文件,它控制如何执行 DNS 查询。NetworkManager 通常管理此文件。在上一步中,你将 8.8.8.8 作为 DNS 服务器添加到你的 static-eth1 连接。让我们验证它是否出现在 /etc/resolv.conf 中。
cat /etc/resolv.conf
你应该看到 nameserver 8.8.8.8 与其他系统名称服务器一起列出:
## Generated by NetworkManager
search labex.example.com
nameserver 100.100.2.136
nameserver 100.100.2.138
nameserver 8.8.8.8
注意:search 指令和系统名称服务器可能会根据你的环境而有所不同。重要的是 8.8.8.8 出现在列表中。
在最后一步中,你将使用各种命令行工具测试网络连接和名称解析。这将帮助你确认你的网络配置是否按预期工作。
首先,让我们使用 ping 命令测试到已知 IP 地址的基本网络连接。我们将 ping 在上一步中配置的网关 172.16.50.253。-c3 选项仅发送 3 个数据包。
ping -c3 172.16.50.253
你应该看到成功的回复,表明与你的网关的连接:
PING 172.16.50.253 (172.16.50.253) 56(84) bytes of data.
64 bytes from 172.16.50.253: icmp_seq=1 ttl=64 time=0.052 ms
64 bytes from 172.16.50.253: icmp_seq=2 ttl=64 time=0.049 ms
64 bytes from 172.16.50.253: icmp_seq=3 ttl=64 time=0.045 ms
--- 172.16.50.253 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2000ms
rtt min/avg/max/mdev = 0.045/0.049/0.052/0.003 ms
注意:如果需要,你可以随时按 Ctrl+C 中断 ping 命令。
接下来,让我们测试你添加到 /etc/hosts 的 webserver.labex.example.com 条目的名称解析。我们将再次使用 getent hosts,因为它首先咨询 /etc/hosts。
getent hosts webserver.labex.example.com
你应该看到返回的 IP 地址 192.168.1.100:
192.168.1.100 webserver.labex.example.com
现在,让我们使用 host 命令测试外部主机名(如 google.com)的 DNS 解析。此命令查询你配置的 DNS 服务器(其中应该包括来自你的 static-eth0 连接的 8.8.8.8)。
host google.com
你应该看到 google.com 的 IP 地址:
google.com has address 142.251.46.174
google.com has IPv6 address 2607:f8b0:4005:802::200e
google.com mail is handled by 10 smtp.google.com.
dig 命令是另一个用于查询 DNS 名称服务器的强大工具。它提供了关于 DNS 查询的更详细信息。
dig google.com
你将看到更详细的输出,包括响应的 DNS 服务器和查询详细信息:
; <<>> DiG 9.16.23-RH <<>> google.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 21983
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;google.com. IN A
;; ANSWER SECTION:
google.com. 1 IN A 142.251.46.174
;; Query time: 1 msec
;; SERVER: 100.100.2.136#53(100.100.2.136)
;; WHEN: Mon Jun 16 10:18:26 CST 2025
;; MSG SIZE rcvd: 44
最后,让我们使用 ss 命令显示套接字统计信息并确认活动网络连接。我们将使用 -t 表示 TCP 套接字,-a 表示所有(监听和已建立)套接字。
ss -ta
你将看到系统上 TCP 连接和监听端口的列表:
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:exlm-agent 0.0.0.0:*
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:*
ESTAB 0 0 172.16.50.121:exlm-agent 172.16.50.251:36354
LISTEN 0 128 [::]:ssh [::]:*
这结束了关于管理网络的实验。你已成功验证了网络配置,添加和修改了连接,配置了主机名和名称解析,并测试了连接性。
在这个实验中,我们获得了在 Red Hat Enterprise Linux 系统上管理网络接口和主机名配置的实践经验。我们首先使用 ip link 和 ip addr 命令验证了网络接口状态和 IP 地址,了解了如何解释它们的输出来进行网络诊断。
随后,我们学习了如何添加具有静态 IP 地址的新网络连接,激活和停用这些连接,以及修改现有的网络设置,展示了使用 nmcli 进行网络管理的熟练程度。最后,我们配置了系统主机名和名称解析,并验证了网络连接和名称解析,巩固了我们对基本 Linux 网络概念的理解。