跳至内容

实验 5: 网络基础

目标

完成本实验后,您将能够

  • 创建虚拟网络设备
  • 使用 iproute2 (ip) 工具集管理 Linux 系统上的网络设备和设置
  • 使用 NetworkManager (nmcli) 工具集管理 Linux 系统上的网络设备和设置
  • 排查常见的网络问题

完成本实验的预计时间:60 分钟

概述

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

练习 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 的手册页。漂亮主机名、临时主机名和静态主机名之间有什么区别?

练习 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 地址

在网络接口上设置 IP 地址

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

    ip address show   
    
  2. 将 IP 地址 172.16.99.100 分配给 macvtap1。键入

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

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

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

练习 4

配置 IPv6 地址

将 IPv6 地址分配给 macvtap 接口

  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

路由管理

查看系统的路由表

  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
    

    以下是输出的直白解释

    • 目标 IP 地址:8.8.8.8 是我们要尝试到达的 IP 地址
    • 通过:192.168.2.1 是数据包将发送到以到达目的地的下一个跃点 IP 地址
    • 设备:enp1s0 是将用于发送数据包的网络接口
    • 源 IP 地址:192.168.2.121 是将用作数据包源地址的网络接口的 IP 地址
    • UID:0 是启动此命令的进程的用户 ID
    • 缓存:此字段指示此路由是否缓存在内核的路由表中
  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>
    

设置默认网关

为系统配置默认网关

  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(IPv4 和 IPv6)地址。

删除 IPv4 地址

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

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

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

    ip address show macvtap1
    

删除 IPv6 地址

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

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

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

    ip -6 address show macvtap1
    

练习 7

通过 nmcli 配置网络接口

本练习演示如何使用 NetworkManager 工具配置网络接口。

注意

默认情况下,使用 nmcli(NetworkManager)进行的任何网络配置更改都将在系统重新启动之间保留。这与使用 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 连接以及一个名为 macvtap2 的关联 MACVTAP 接口。新接口将与 $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 方法 = 手动
    • 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
    
  3. 通过运行以下命令验证新的 IPv4 地址设置

    nmcli -f ipv4.addresses con show macvtap2
    
  4. 运行之前命令的略微不同的变体以包括给定设置的运行时配置。键入

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

    问题

    NetworkManager 属性 ipv4.addresses 和 IP4.ADDRESS 之间有什么区别?

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

    ip -br address show  dev macvtap2
    
  6. 要正确应用新设置并使其成为新的运行时值,请使用 nmcli 首先切换连接到关闭状态(即停用它)。键入

    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 服务器

为系统设置 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
    
  2. 测试与远程主机(例如,google.com)的网络连接

    ping google.com
    
  3. 尝试 ping 本地网关。输入

    ping _gateway
    

    问题

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

查看活动连接

列出所有活动的网络连接

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

    ss -tuln
    

监控网络流量

实时监控网络流量

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

    tcpdump -i macvtap1
    

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

查看网络日志

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

    journalctl -u NetworkManager
    

作者:Wale Soyinka

贡献者:Steven Spencer,Ganna Zhyrnova