跳至内容

实验 5 - 网络基础

目标

完成此实验后,您将能够

  • 创建虚拟网络设备
  • 使用 iproute2 (ip) 工具包在 Linux 系统上管理网络设备和设置
  • 使用 NetworkManager (nmcli) 工具包在 Linux 系统上管理网络设备和设置
  • 排除常见的网络故障

完成此实验的估计时间:60 分钟

概述

本次网络基础实验涵盖了 Linux 服务器上的各种网络配置和故障排除练习。您将能够更好地使用 Linux 系统上现成的常用网络工具来管理和排除网络设置的故障。

使用的命令简介

iproute2 命令是一套用于在 Linux 系统上配置和管理网络的先进实用程序,它被开发出来以取代传统的net-tools套件(如ifconfigroutearp)。
iproute2 被设计用来管理现代 Linux 内核特性,包括命名空间、策略路由和高级 QoS。它现在是现代 Linux 发行版中进行网络管理的推荐工具。

ip 命令是网络管理和配置的重要工具。它是 iproute2 包的一部分,可以对网络接口、IP 地址、路由表、隧道等进行高级控制。
得益于其灵活的语法和选项,它使系统管理员能够高效地监控、修改和解决连接问题。
其模块化结构允许您一致地管理网络配置的各个方面,从而简化了管理。

nmcli 命令是 NetworkManager 中包含的一个强大而多功能的工具,旨在直接从终端管理 Linux 系统上的网络连接。与图形工具不同,nmcli 允许您在本地和远程计算机上高效地配置、监控和控制网络接口,这对于系统管理员和高级用户尤其有用。
它支持广泛的功能,包括有线、无线和 VPN 连接的配置、移动网络管理以及网络状态调试。

练习

1. 更改主机名

有许多方法可以识别或引用计算机。其中一些方法保证了唯一性(尤其是在网络上),而另一些则不保证。计算机主机名可以被视为一种人类易于理解的名称。计算机主机名应该是唯一的,具体取决于它们是如何管理和分配的。但是,由于拥有系统管理员权限的任何人都可以单方面地为系统分配任何他们想要的主机名,因此**唯一性并不总是得到保证**。

第一个练习将引导您了解一些用于管理计算机主机名的标准工具。

更改系统的名称

  1. 在登录到系统后,使用流行的 hostname 实用程序查看当前主机名。输入

    hostname
    
  2. 再次运行 hostname 实用程序,但使用不同的选项来查看服务器的 FQDN(完全限定域名)。

    hostname --fqdn
    

    问题

    FQDN 代表什么?为什么您的服务器的纯服务器主机名与其 FQDN 不同?

  3. 使用 hostnamectl 实用程序查看当前主机名。输入

    hostnamectl
    

这信息量太大了!

  1. hostnamectl 命令添加 --static 选项以查看您服务器的静态主机名。输入

    hostnamectl --static
    
  2. hostnamectl 命令添加 --transient 选项以查看您服务器的临时主机名。

  3. 现在尝试使用 --pretty 选项运行 hostnamectl 命令,以查看您服务器的“美观”主机名。

  4. 为您的服务器设置新的临时主机名。输入

    hostnamectl --transient set-hostname my-temp-server1 
    
  5. 验证临时主机名更改。输入

    hostnamectl --transient
    
  6. 为您的服务器设置新的静态主机名。输入

    hostnamectl set-hostname my-static-hostname1
    
  7. 验证静态主机名更改。

    问题

    查阅 hostnamectl 的 man 手册页。美观临时静态主机名之间有什么区别?

2. 创建虚拟设备

在继续进行此网络实验的其他练习之前,您需要完成的关键第一步是创建一个特殊的虚拟网络接口,称为MACVTAP 设备

MACVTAP 设备是虚拟设备,它结合了纯软件接口(称为TAP 设备)的属性和MACVLAN 驱动程序的属性。

创建和使用这些 MACVTAP 设备将使您能够安全地测试、更改和配置各种与网络配置相关的任务。这些虚拟网络接口将在各种练习中使用,而不会干扰现有的网络配置。

技巧

TAP 设备提供了一个纯软件接口,允许用户空间应用程序轻松访问。TAP 设备发送和接收原始以太网帧。
MACVLAN 用于创建附加到物理网络接口的虚拟网络接口。
MACVTAP 设备拥有自己独特的 MAC 地址,与它们所关联的底层物理网卡的 MAC 地址不同。

创建 MACVTAP 接口

此练习从创建所需的 MACVTAP 虚拟网络接口开始。这将使您能够安全地测试、更改和配置各种与网络配置相关的任务。这些虚拟网络接口将在各种练习中使用,而不会干扰现有的网络配置。

列出系统中所有的网络接口

  1. 确保您已登录到服务器。

  2. 使用 ip 程序查看系统上现有的网络接口。输入

    ip link show
    
  3. 尝试使用 nmcli 命令列出所有网络设备。输入

     nmcli -f DEVICE device
    
  4. 手动查询低级别的 /sys 虚拟文件系统以枚举服务器上可用的所有网络接口。输入

     ls -l /sys/class/net/ | grep -v 'total' | awk '{print $9}'
    

创建 macvtap 接口

  1. 确保您已作为具有管理员权限的用户登录到系统。

  2. 您需要查询并识别服务器上可用的合适网络设备类型,才能与 macvtap 设备关联。输入

     ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}'
     eno2
    

    示例演示系统上的输出显示了一个名为 eno2 的合适接口。

  3. 再次运行命令以识别设备,但这次将返回的值存储在名为 $DEVICE1 的变量中。使用 echo 仔细检查 $DEVICE1 的值。输入以下 2 条单独的命令来完成此操作

    DEVICE1=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}')
    echo $DEVICE1
    
  4. 现在,创建一个名为 macvtap1 的 MACVTAP 接口。新接口将与 $DEVICE1 相关联。输入

    ip link add link $DEVICE1 name macvtap1 type macvtap mode bridge
    
  5. 验证 macvtap1 接口的创建。输入

    ip --brief link show macvtap1
    

    注意 macvtap 接口在输出中的DOWN状态。

  6. 查看系统中所有MACVTAP 类型网络设备的详细信息。输入

    ip --detail link show type macvtap
    
  7. 运行命令查看服务器上的所有网络接口,并将输出与之前“列出系统中所有网络接口”部分中的类似命令的输出进行比较。

启用/禁用网络接口

  1. 检查 macvtap1 网络接口的状态。输入

    ip link show macvtap1
    
  2. 启用 macvtap1 网络接口(如果当前处于禁用状态)。运行

    ip link set macvtap1 up
    
  3. 通过运行以下命令验证状态更改

    ip -br link show macvtap1
    

    技巧

    如果您需要禁用网络接口,用于此操作的 ip 命令语法是 ip link set <IFNAME> down
    例如,要禁用名为 macvtap7 的网络接口,您将运行

    ip link set macvtap7 down
    

现在您已经设置好了 macvtap 接口,可以安全地执行剩余练习中的各种网络配置和故障排除任务。

3. 分配 IP 地址

IPInternet Protocol)地址是分配给连接到使用 IP 协议进行通信的网络的每个设备的唯一数字标识符。它充当数字“地址”,允许设备在本地(LAN)或全局(Internet)网络上传输和接收数据。

macvtap 接口设置 IPv4 地址

  1. 查看服务器上所有网络接口的 IP 地址。输入

    ip address show
    
  2. 将 IPv4 地址 - 172.16.99.100 - 分配给 macvtap1。输入

    ip address add 172.16.99.100/24 dev macvtap1
    
  3. 验证 macvtap1 的 IPv4 地址分配

    ip address show macvtap1
    
  4. 使用 nmcli 命令查看系统中所有接口的 IPv4 地址。输入

    nmcli --get-values IP4.ADDRESS,GENERAL.DEVICE device show
    

macvtap 接口设置 IPv6 地址

  1. macvtap1 开始,通过运行以下命令将 2001:db8::1/64 IPv6 地址分配给 macvtap1

     ip -6 address add 2001:db8::1/64 dev macvtap1
    
  2. 验证 IPv6 地址分配,输入

    ip --brief -6 address show macvtap1 && ip -br -6 address show macvtap1
    
  3. 使用 nmcli 查看系统中所有接口的 IPv6 地址。输入

    nmcli --get-values IP6.ADDRESS,GENERAL.DEVICE device show
    

5. 路由管理

Linux 中的路由是一种机制,它使操作系统能够通过将数据包导向预期的目的地来管理网络流量。Linux 内核使用路由表,根据IP 地址子网掩码网关来确定数据包应遵循的最佳路径。
此功能对于家庭环境和复杂的企业网络都至关重要,在这些环境中,多个网络接口和设备需要相互通信。

查看系统路由表

  1. 显示系统的当前路由表。输入

    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
    
  2. 使用上一个命令输出的左侧列中显示的某个网络作为参数,显示该网络的路由表条目。例如,要显示 10.99.99.0/24 网络的内核路由表条目,请键入

    ip route show 10.99.99.0/24
    
  3. 查询系统以查看将用于到达示例任意目的地的路由。例如,要查看到达目的地 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
    

    以下是对输出的简单解释:

    • Destination IP Address(目的地 IP 地址):8.8.8.8 是我们试图到达的 IP 地址。
    • Via(通过):192.168.2.1 是数据包将发送到的下一个跳跃 IP 地址,以到达目的地。
    • Device(设备):enp1s0 是将用于发送数据包的网络接口。
    • Source IP Address(源 IP 地址):192.168.2.121 是将用作数据包源地址的网络接口的 IP 地址。
    • UID(用户 ID):0 是启动此命令的进程的用户 ID。
    • Cache(缓存):此字段指示此路由是否已缓存到内核路由表中。
  4. 现在查看系统将如何路由一个 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>
    

配置系统的默认网关

在 Linux 系统中,默认网关代表默认访问点,通过该访问点,网络流量将被路由到与本地接口不直接连接的外部网络。
其正确配置对于确保系统的远程网络和外部服务连接至关重要。

  1. 使用 ip 查询并列出您系统上的当前默认网关。输入

     ip route show default
    
  2. 通过 macvtap1 接口设置默认网关。输入

    ip route add default via 192.168.1.1
    
  3. 验证新的默认网关配置

    ip route show default
    

向路由表中添加静态路由

  1. 通过 192.168.1.2 为一个虚构的 172.16.0.0/16 网络添加一个演示静态路由。输入

    ip route add 172.16.0.0/16 via 192.168.1.2
    
  2. 通过运行以下命令验证静态路由的添加

    ip route show 172.16.0.0/16
    

从路由表中删除静态路由

  1. 删除 10.0.0.0/24 的静态路由

    ip route del 10.0.0.0/24 via 192.168.1.2
    
  2. 验证静态路由的删除

    ip route show
    

6. 删除 IP 地址

从服务器中删除 IP 地址是管理网络安全和资源的基本操作。此过程可能出于多种原因而必要:减轻 DDoS 攻击、撤销对恶意用户的访问、释放不再使用的 IP 地址或遵守公司安全策略。
本练习将引导您了解如何在网络接口上删除已配置的 IP(IPv4IPv6)地址。

从网络接口中删除已分配的 IPv4 地址

  1. 删除 macvtap1 上的 IP 地址。输入

    ip address del 172.16.99.100/24 dev macvtap1
    
  2. 通过运行以下命令验证 IP 地址的删除

    ip address show macvtap1
    

从网络接口中删除已分配的 IPv6 地址

  1. 使用此命令删除 macvtap1 上的 IPv6 地址

    ip -6 address del 2001:db8::1/64 dev macvtap1
    
  2. 使用以下命令验证 IPv6 地址的删除

    ip -6 address show macvtap1
    

7. 通过 nmcli 配置网络接口

nmcliNetworkManager Command Line Interface)命令是用于管理网络连接的工具。它旨在与 NetworkManager 交互,允许您直接从终端高效地控制、配置和监控网络,而无需图形界面。
本练习将展示如何使用 NetworkManager 工具配置网络接口。

注意

默认情况下,使用 nmcli 所做的任何网络配置更改在系统重启后都会保留。这与使用 ip 实用程序进行的配置更改不同。

使用 nmcli 创建 macvtap 接口

  1. 首先运行以下命令列出所有可用的网络设备

    nmcli device
    
  2. 接下来,识别一个底层网络设备,用于关联新的MACVTAP 接口。将已识别设备的值存储在变量 $DEVICE2 中。输入

    DEVICE2=$(ls -l /sys/class/net/ | grep -v 'virtual\|total' | tail -n 1 | awk '{print $9}')
    
  3. 现在,创建一个名为 macvtap2 的新NetworkManager 连接和一个关联的 MACVTAP 接口,名称为 - macvtap2。新接口将与 $DEVICE2 相关联。输入

    nmcli con add con-name macvtap2 type macvlan mode bridge tap yes dev $DEVICE2 ifname macvtap2
    
  4. 使用 nmcli 验证 macvtap2 接口的创建。输入

    nmcli device show macvtap2
    
  5. 使用 nmcli 验证 macvtap2 连接的创建。输入

    nmcli connection show macvtap2
    
  6. 同样,使用 ip 验证 macvtap2 接口的创建。输入

    ip --brief link show macvtap2
    

    注意输出中 macvtap 接口的UP状态。

    问题

    在 NetworkManager 中,连接设备这两个概念有什么区别?

使用 nmcli 修改接口的网络配置

  1. 首先通过运行以下命令查询新 macvtap2 接口的IPv4地址

    nmcli -f ipv4.addresses con show macvtap2
    

    ipv4.addresses 属性的值应为空。

  2. 使用以下设置配置 macvtap2 连接

    • IPv4 Method(IPv4 方法)= manual
    • IPv4 Addresses(IPv4 地址)= 172.16.99.200/24
    • Gateway(网关)= 172.16.99.1
    • DNS Servers(DNS 服务器)= 8.8.8.8 和 8.8.4.4
    • DNS Search domain(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
    
  3. 通过运行以下命令验证新的 IPv4 地址设置

    nmcli -f ipv4.addresses con show macvtap2
    
  4. 运行一个与上一个命令略有不同的变体,以包含给定设置的运行时配置。输入

    nmcli -f ipv4.addresses,IP4.ADDRESS con show macvtap2
    

    问题

    NetworkManager 属性 - ipv4.addressesIP4.ADDRESS 之间有什么区别?

  5. 使用 ip 命令检查网络连接的更改。输入

    ip -br address show dev macvtap2
    
  6. 要正确应用新设置并使其成为新的运行时值,请使用 nmcli 先将连接设置为down(即停用它)。输入

    nmcli connection down macvtap2
    
    Connection macvtap2 successfully deactivated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/5)
    
  7. 现在激活新连接以应用新设置。输入

    nmcli connection up macvtap2
    
    Connection successfully activated (D-Bus active path: /org/freedesktop/NetworkManager/ActiveConnection/6)
    
  8. 使用 ip 实用程序查看最终设置。输入

    ip -br address show  dev macvtap2
    

8. 配置 DNS 服务器

DNSDomain Name System)服务是计算机网络的基本组成部分,负责将域名解析为IP 地址,反之亦然。这使得本地网络和 Internet 之间的通信成为可能。

为系统设置 DNS 服务器地址

  1. macvtap1 配置 DNS 服务器

    nmcli con mod macvtap1 ipv4.dns 8.8.8.8, 8.8.4.4
    
  2. 验证 DNS 服务器配置

    nmcli con show macvtap1 | grep DNS
    

9. 排除网络故障

计算机网络对于通信和数据交换至关重要,但它们经常遇到阻碍其正常运行的问题。各种因素,包括配置错误、硬件故障或连接干扰,都可能导致这些故障。

识别和解决常见的网络问题

监控和验证网络接口的状态对于确保连接系统的正常运行至关重要。

  1. 检查网络接口的状态

    ip link show
    

此步骤允许您验证设备是否能够到达网络上的另一个节点,无论是服务器、路由器还是其他客户端。

  1. 测试到远程主机的网络连接(例如,google.com

    ping google.com
    

Ping 本地网关是确保设备与其默认路由器之间的连接正常工作的基本测试。网关是访问外部网络的入口点,如果在此阶段出现故障,可能会阻止访问 Internet 或其他子网。

  1. 尝试 Ping 本地网关。输入

    ping _gateway
    

    问题

    您的系统是通过什么机制能够正确地将 _gateway 名称解析为您本地配置的默认网关的正确IP 地址的?

查看活动连接

活动网络连接代表您计算机与其他设备或网络上的服务之间的开放通信通道。这些连接可以是本地的(在同一台机器内)或远程的(到外部服务器或客户端)。

列出所有活动网络连接

  1. 列出所有活动网络连接

    ss -tuln
    

监控网络流量

Linux 中的网络流量代表系统与网络之间交换的数据集,包括传入和传出数据。这种信息流对于 Web、电子邮件、文件传输以及设备之间通信等服务的运行至关重要。
监控和管理这些信息对于确保安全、调试和优化网络性能至关重要。

实时监控网络流量

  1. 捕获特定接口(例如,macvtap1)上的网络流量

    tcpdump -i macvtap1
    

    分析捕获的数据包并观察网络活动。完成后,您可以通过按 Ctrl+C 来停止数据包捕获。

查看网络日志

网络日志对于监控、故障排除和系统安全至关重要。每次通过网络发送或接收数据包时,操作系统都会记录有关这些活动的详细信息。这些日志有助于系统管理员识别可疑连接、配置错误以及潜在的安全威胁。

查看 NetworkManager 守护进程日志以进行故障排除

  1. 查看与网络相关的日志

    journalctl -u NetworkManager
    

作者:Wale Soyinka

贡献者:Steven Spencer, Ganna Zhyrnova, Franco Colussi