实验 5: 网络基础¶
目标¶
完成本实验后,您将能够
- 创建虚拟网络设备
- 使用
iproute2
(ip
) 工具集管理 Linux 系统上的网络设备和设置 - 使用 NetworkManager (
nmcli
) 工具集管理 Linux 系统上的网络设备和设置 - 排查常见的网络问题
完成本实验的预计时间:60 分钟
概述¶
本网络基础实验涵盖了 Linux 服务器上的各种网络配置和故障排除练习。您将能够更好地使用 Linux 系统上常见的网络实用工具来管理和排查网络设置。
练习 1¶
更改主机名¶
有很多方法可以识别或引用计算机。其中一些方法保证唯一性(尤其是在网络上),而另一些则不保证。计算机主机名可以被视为对人类友好的名称。计算机主机名应尽可能唯一,具体取决于其管理和分配方式。但是,由于任何具有系统管理员权限的人都可以单方面分配任何主机名到系统,因此无法始终保证唯一性。
第一个练习将介绍一些常用的计算机主机名管理工具。
更改系统主机名¶
在登录系统后,使用流行的
hostname
实用工具查看当前的主机名。输入hostname
使用
hostname
实用工具再次使用不同的选项查看服务器的 FQDNhostname --fqdn
问题
FQDN 代表什么?为什么服务器的纯主机名与它的 FQDN 不同?
使用
hostnamectl
实用工具查看当前主机名。输入hostnamectl
信息太多了!
向
hostnamectl
命令中添加--static
选项以查看服务器的静态主机名。输入hostnamectl --static
向
hostnamectl
命令中添加--transient
选项以查看服务器的临时主机名。现在尝试将
--pretty
选项添加到hostnamectl
命令中以查看服务器的漂亮主机名。为服务器设置一个新的临时主机名。输入
hostnamectl --transient set-hostname my-temp-server1
验证临时主机名更改。输入
hostnamectl --transient
为服务器设置一个新的静态主机名。输入
hostnamectl set-hostname my-static-hostname1
验证静态主机名更改。
问题
参考
hostnamectl
的手册页。漂亮主机名、临时主机名和静态主机名之间有什么区别?
练习 2¶
在继续本网络实验室中的其他练习之前,您需要完成的第一个关键步骤是创建一个称为 MACVTAP 设备的特殊虚拟网络接口。
MACVTAP 设备是虚拟设备,它结合了称为 TAP 设备的纯软件接口的属性以及 MACVLAN 驱动程序的属性。
创建和使用这些 MACVTAP 设备将允许您安全地测试、更改和配置各种与网络配置相关的任务。这些虚拟网络接口将在各种练习中使用,而不会破坏现有的网络配置。
提示
TAP 设备提供了一个纯软件接口,用户空间应用程序可以轻松访问。TAP 设备发送和接收原始以太网帧。MACVLAN 用于创建连接到物理网络接口的虚拟网络接口。MACVTAP 设备拥有自己独特的 MAC 地址,与它们关联的底层物理网卡的 MAC 地址不同。
创建 MACVTAP 接口¶
本练习从创建所需的 MACVTAP 虚拟网络接口开始。这将允许您安全地测试、更改和配置各种与网络配置相关的任务。这些虚拟网络接口将在各种练习中使用,而不会破坏现有的网络配置。
列出系统上的所有网络接口¶
确保您已登录服务器。
使用
ip
程序查看系统上现有的网络接口。键入ip link show
尝试使用
nmcli
命令列出所有网络设备。键入nmcli -f DEVICE device
查询底层 /sys 虚拟文件系统以手动枚举服务器上可用的所有网络接口。键入
ls -l /sys/class/net/ | grep -v 'total' | awk '{print $9}'
创建 macvtap
接口¶
确保您已以具有管理员权限的用户身份登录系统。
您需要查询并识别服务器上可用的适当网络设备类型,以便能够与
macvtap
设备关联。键入ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}' eno2
示例演示系统上的输出显示了一个名为 eno2 的合适接口。
再次运行命令来识别设备,但这次将返回的值存储在名为 $DEVICE1 的变量中。使用 echo 再次检查 $DEVICE1 的值。键入以下 2 个独立命令来完成此操作
# DEVICE1=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}') # echo $DEVICE1
现在,创建一个名为
macvtap1
的 MACVTAP 接口。新接口将与 $DEVICE1 关联。键入ip link add link $DEVICE1 name macvtap1 type macvtap mode bridge
验证
macvtap1
接口的创建。键入ip --brief link show macvtap1
请注意输出中
macvtap
接口的 DOWN 状态。查看系统上所有 MACVTAP 类型网络设备的详细信息。键入
ip --detail link show type macvtap
运行命令以查看服务器上的所有网络接口,并将输出与之前部分“列出系统上的所有网络接口”中类似命令的输出进行比较。
启用/禁用网络接口¶
启用或禁用网络接口¶
检查
macvtap1
网络接口的状态。键入ip link show macvtap1
启用
macvtap1
网络接口(如果当前已禁用)。运行ip link set macvtap1 up
通过运行以下命令验证状态更改
ip -br link show macvtap1
提示
如果您需要禁用网络接口,
ip
命令的语法是ip link set <IFNAME> down
。例如,要禁用名为macvtap7
的网络接口,您需要运行ip link set macvtap7 down
现在您已经设置了 macvtap
接口,您可以安全地执行剩余练习中各种网络配置和故障排除任务。
练习 3¶
分配 IP 地址¶
在网络接口上设置 IP 地址¶
查看服务器上所有网络接口的 IP 地址。键入
ip address show
将 IP 地址 172.16.99.100 分配给
macvtap1
。键入ip address add 172.16.99.100/24 dev macvtap1
验证
macvtap1
的 IP 地址分配ip address show macvtap1
使用
nmcli
命令查看系统上所有接口的 IPv4 地址。键入nmcli --get-values IP4.ADDRESS,GENERAL.DEVICE device show
练习 4¶
配置 IPv6 地址¶
将 IPv6 地址分配给 macvtap
接口¶
从
macvtap1
开始,通过运行以下命令将 2001:db8::1/64 IPv6 地址分配给macvtap1
ip -6 address add 2001:db8::1/64 dev macvtap1
验证 IPv6 地址分配,键入
ip --brief -6 address show macvtap1 && ip -br -6 address show macvtap1
使用
nmcli
查看系统上所有接口的 IPv6 地址。键入nmcli --get-values IP6.ADDRESS,GENERAL.DEVICE device show
练习 5¶
路由管理¶
查看系统的路由表¶
显示系统当前的路由表。键入
ip route show default via 192.168.2.1 dev enp1s0 proto dhcp src 192.168.2.121 metric 100 10.99.99.0/24 dev tunA proto kernel scope link src 10.99.99.1 metric 450 linkdown 192.168.2.0/24 dev enp1s0 proto kernel scope link src 192.168.2.121 metric 100
使用之前命令输出中最左侧列中显示的网络之一作为参数,显示该网络的路由表条目。例如,要显示 10.99.99.0/24 网络的内核路由表条目,键入
ip route show 10.99.99.0/24
查询系统以查看将用于到达示例任意目的地的路由。例如,要查看到达目标 IP 地址 8.8.8.8 的路由详细信息,键入
ip route get 8.8.8.8 8.8.8.8 via 192.168.2.1 dev enp1s0 src 192.168.2.121 uid 0 cache
以下是输出的直白解释
- 目标 IP 地址:8.8.8.8 是我们要尝试到达的 IP 地址
- 通过:192.168.2.1 是数据包将发送到以到达目的地的下一个跃点 IP 地址
- 设备:
enp1s0
是将用于发送数据包的网络接口 - 源 IP 地址:192.168.2.121 是将用作数据包源地址的网络接口的 IP 地址
- UID:0 是启动此命令的进程的用户 ID
- 缓存:此字段指示此路由是否缓存在内核的路由表中
现在查看系统如何将数据包从一个 IP 路由到另一个目标 IP 地址。键入
ip route get from 192.168.1.1 to 192.168.1.2 local 192.168.1.2 from 192.168.1.1 dev lo uid 0 cache <local>
设置默认网关¶
为系统配置默认网关¶
使用
ip
查询并列出系统上的当前默认网关。键入ip route show default
通过
macvtap1
接口设置默认网关。键入ip route add default via 192.168.1.1
验证新的默认网关配置
ip route show default
添加静态路由¶
将静态路由添加到路由表¶
添加一个通过 192.168.1.2 的伪造 172.16.0.0/16 网络的演示静态路由。键入
ip route add 172.16.0.0/16 via 192.168.1.2
通过运行以下命令验证静态路由的添加
ip route show 172.16.0.0/16
删除静态路由¶
从路由表中删除静态路由¶
删除 10.0.0.0/24 的静态路由
ip route del 10.0.0.0/24 via 192.168.1.2
验证静态路由的删除
ip route show
练习 6¶
删除 IP 地址¶
本练习将逐步介绍如何在网络接口上删除已配置的 IP(IPv4 和 IPv6)地址。
删除 IPv4 地址¶
从网络接口中删除分配的 IP 地址¶
删除
macvtap1
上的 IP 地址。键入ip address del 172.16.99.100/24 dev macvtap1
通过运行以下命令验证 IP 地址的删除
ip address show macvtap1
删除 IPv6 地址¶
从网络接口中删除分配的 IPv6 地址¶
使用以下命令删除
macvtap1
上的 IPv6 地址ip -6 address del 2001:db8::1/64 dev macvtap1
使用以下命令验证 IPv6 地址的删除
ip -6 address show macvtap1
练习 7¶
通过 nmcli
配置网络接口¶
本练习演示如何使用 NetworkManager 工具配置网络接口。
注意
默认情况下,使用 nmcli
(NetworkManager)进行的任何网络配置更改都将在系统重新启动之间保留。这与使用 ip
实用程序进行的配置更改形成对比。
使用 nmcli
创建 macvtap
接口¶
首先,通过运行以下命令列出所有可用的网络设备
nmcli device
接下来,确定要与新 MACVTAP 接口关联的底层网络设备。将识别出的设备的值保存在变量 $DEVICE2 中。键入
DEVICE2=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}')
现在,创建一个名为
macvtap2
的新 NetworkManager 连接以及一个名为macvtap2
的关联 MACVTAP 接口。新接口将与 $DEVICE2 关联。键入nmcli con add con-name macvtap2 type macvlan mode bridge tap yes dev $DEVICE2 ifname macvtap2
使用
nmcli
验证macvtap2
接口的创建。键入nmcli device show macvtap2
使用
nmcli
验证macvtap2
连接的创建。键入nmcli connection show macvtap2
类似地,使用
ip
验证macvtap2
接口的创建。键入ip --brief link show macvtap2
请注意输出中
macvtap
接口的 UP 状态。问题
NetworkManager 中的连接和设备的概念有什么区别?
使用 nmcli
修改接口网络配置¶
首先通过运行以下命令查询新
macvtap2
接口的 IPv4 地址nmcli -f ipv4.addresses con show macvtap2
ipv4.addresses 属性的值应该是空的。
使用以下设置配置
macvtap2
连接- IPv4 方法 = 手动
- IPv4 地址 = 172.16.99.200/24
- 网关 = 172.16.99.1
- DNS 服务器 = 8.8.8.8 和 8.8.4.4
- DNS 搜索域 = example.com
键入
nmcli connection modify macvtap2 ipv4.method manual \ ipv4.addresses 172.16.99.200/24 ipv4.gateway 172.16.99.1 \ ipv4.dns 8.8.8.8,8.8.4.4 ipv4.dns-search example.com
通过运行以下命令验证新的 IPv4 地址设置
nmcli -f ipv4.addresses con show macvtap2
运行之前命令的略微不同的变体以包括给定设置的运行时配置。键入
nmcli -f ipv4.addresses,IP4.ADDRESS con show macvtap2
问题
NetworkManager 属性 ipv4.addresses 和 IP4.ADDRESS 之间有什么区别?
使用
ip
命令检查对网络连接的更改。键入ip -br address show dev macvtap2
要正确应用新设置并使其成为新的运行时值,请使用
nmcli
首先切换连接到关闭状态(即停用它)。键入nmcli connection down macvtap2 Connection macvtap2 successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
现在激活新连接以应用新设置。键入
nmcli connection up macvtap2 Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
使用 ip 实用程序查看最终设置。键入
ip -br address show dev macvtap2
练习 8¶
配置 DNS 服务器¶
为系统设置 DNS 服务器地址¶
为
macvtap1
配置 DNS 服务器nmcli con mod macvtap1 ipv4.dns 8.8.8.8, 8.8.4.4
验证 DNS 服务器配置
nmcli con show macvtap1 | grep DNS
练习 9¶
网络问题排查¶
识别和排查常见的网络问题¶
检查网络接口的状态
ip link show
测试与远程主机(例如,google.com)的网络连接
ping google.com
尝试 ping 本地网关。输入
ping _gateway
问题
您的系统通过什么机制能够正确地将名称
_gateway
解析为本地配置的默认网关的正确 IP 地址?
查看活动连接¶
列出所有活动的网络连接¶
列出所有活动的网络连接
ss -tuln
监控网络流量¶
实时监控网络流量¶
捕获特定接口(例如,
macvtap1
)上的网络流量tcpdump -i macvtap1
分析捕获的数据包并观察网络活动。完成捕获后,您可以按 Ctrl+C 停止捕获。
查看网络日志¶
查看与 NetworkManager 守护程序相关的日志以进行故障排除¶
查看与网络相关的日志
journalctl -u NetworkManager
作者:Wale Soyinka
贡献者:Steven Spencer,Ganna Zhyrnova