在 Linux 中管理 IP 地址

CompTIABeginner
立即练习

介绍

在本实验中,你将学习在 Linux 环境中管理 IP 地址的基本技能。首先,你将使用现代的 ip 命令来检查系统的网络接口。随后,你将手动配置一个静态 IP 地址,设置默认网关以实现与外部网络的通信,并使用 ping 工具验证连接。

接下来,你将探索动态 IP 配置,通过释放静态地址并使用 dhclient 命令从 DHCP 服务器自动获取新的 IP 地址。实验最后,你将使用 arptraceroute 命令进一步检查和验证网络配置,确保所有组件正常工作。

使用 ip a 检查网络接口

在此步骤中,你将学习如何检查 Linux 系统上的网络接口。在配置 IP 地址之前,必须先确定要配置的网络接口名称。无论是通过有线还是无线连接,所有连接都由网络接口管理。

在 Linux 中,查看和操作网络接口的现代标准命令是 ip。我们将使用它的 a(或 address)参数来显示所有网络接口及其分配的 IP 地址。

  1. 打开终端。你应该已经位于 ~/project 目录中。

  2. 要列出所有网络接口及其当前配置,请运行以下命令:

    ip a
    

    你将看到类似以下的输出。具体的详细信息(如接口名称 eth0enp0s5,IP 地址和 MAC 地址)在你每次启动新的实验环境时都会有所不同。

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:0f:23:a5 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        inet 172.16.50.11/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159972sec preferred_lft 1892159972sec
    3: docker0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default
        link/ether 02:42:bb:cb:56:62 brd ff:ff:ff:ff:ff:ff
        inet 172.17.0.1/16 brd 172.17.255.255 scope global docker0
           valid_lft forever preferred_lft forever
    

理解输出内容:

  • **1: lo**:这是 **回环接口 (loopback interface)**,系统用于与自身通信的虚拟接口。它的 IP 地址始终为 127.0.0.1
  • **2: eth0**:这是你的主要 以太网 (有线) 接口。你的接口名称可能不同,或者显示 altname(别名),如 enp0s5。这就是我们将要操作的接口。
  • **3: docker0**:你可能会看到其他接口,如 docker0,这是 Docker 容器引擎使用的接口。在本实验中可以忽略它。
  • **inet 172.16.50.11/24**:这是分配给接口的 IPv4 地址。你看到的地址会有所不同。正是这个地址让你能够连接到这个远程实验环境。
  • **link/ether ...**:这是接口的 MAC 地址,即唯一的硬件标识符。

现在你已经可以识别出主要的网络接口(eth0),准备好学习如何配置它了。

配置辅助静态 IP 地址

在此步骤中,你将手动为网络接口分配一个额外的静态 IP 地址。静态 IP 对于需要始终在同一地址被访问的服务器非常有用。

重要提示: 由于你处于远程实验会话中,切勿删除现有的 IP 地址或关闭网络接口,否则会导致连接中断。我们将改为向接口 添加第二个 IP 地址,这是一种常见且安全的做法。

  1. eth0 接口分配新的静态 IP 地址 192.168.1.10,子网掩码为 /24。如果你的接口名称不同,请使用相应的名称。

    sudo ip addr add 192.168.1.10/24 dev eth0
    

    此命令在不影响现有地址的情况下添加了新地址。如果成功,不会有任何输出。

  2. 最后,验证新 IP 地址是否已分配。再次使用 ip a 命令,并指定 eth0 接口。

    ip a show eth0
    

    现在你应该看到 eth0 接口同时列出了原始的动态 IP 地址和新的静态 IP 地址。

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:0f:23:a5 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        inet 172.16.50.11/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159595sec preferred_lft 1892159595sec
        inet 192.168.1.10/24 scope global eth0
           valid_lft forever preferred_lft forever
        inet6 fe80::216:3eff:fe0f:23a5/64 scope link
           valid_lft forever preferred_lft forever
    

    注意,现在第二个 inet 字段显示了 192.168.1.10/24。你已成功添加了一个临时的静态 IP 地址,同时保持了连接畅通。

设置默认网关并使用 ping 验证连通性

在此步骤中,你将设置一个默认网关并测试网络连通性。默认网关 (default gateway) 是当目标位于其他网络(如互联网)时,系统发送流量所经过的路由器。

你的系统已经由实验环境提供了一个默认网关。更改或删除它会中断你的连接。为了安全地练习此命令,我们将添加第二个具有更高 度量值 (metric) 的默认路由。度量值越高,优先级越低,因此系统不会将其用于实际流量,从而保证我们的连接安全。

  1. 让我们为 192.168.1.0/24 网络添加一个默认网关路由。我们将网关 IP 设置为 192.168.1.1,并将其 metric 设置为 200

    sudo ip route add default via 192.168.1.1 dev eth0 metric 200
    
    • default:指定这是默认路由。
    • via 192.168.1.1:网关路由器的 IP。
    • dev eth0:该路由通过 eth0 接口访问。
    • metric 200:使该路由的优先级低于现有的主要路由(其度量值较低)。
  2. 通过显示路由表来验证路由是否已添加。

    ip route
    

    输出内容会比较复杂且因环境而异,但现在应该包含两行以 default 开头的记录。你原来的网关度量值较低(例如 100),而我们新添加的网关度量值为 200。

    default via 172.16.50.253 dev eth0 proto dhcp src 172.16.50.11 metric 100
    default via 192.168.1.1 dev eth0 metric 200
    172.16.50.0/24 dev eth0 proto kernel scope link src 172.16.50.11 metric 100
    192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
    ... (可能存在其他路由)
    
  3. 现在,让我们使用 ping 测试连通性。它向主机发送 ICMP “回显请求”以查看其是否可达。让我们尝试 ping 我们刚才为虚拟网络配置的网关。

    ping -c 3 192.168.1.1
    

    预期结果: 此命令 预期会失败。由于我们将 192.168.1.10/24 添加到了 eth0,系统认为 192.168.1.1 位于同一本地网络。它会尝试直接访问它,但不存在具有该地址的设备,因此你将看到“目标主机不可达 (Destination Host Unreachable)”。

    PING 192.168.1.1 (192.168.1.1) 56(84) bytes of data.
    From 192.168.1.10 icmp_seq=1 Destination Host Unreachable
    From 192.168.1.10 icmp_seq=2 Destination Host Unreachable
    From 192.168.1.10 icmp_seq=3 Destination Host Unreachable
    
    --- 192.168.1.1 ping statistics ---
    3 packets transmitted, 0 received, +3 errors, 100% packet loss, time 2039ms
    

    这是正确且预期的结果。你已经学会了如何添加默认路由并使用 ping 进行测试。

使用 dhclient 恢复为动态 IP 地址

在此步骤中,你将删除创建的静态配置,然后使用 dhclient 从 DHCP 服务器刷新动态 IP 租约。

首先,dhclient 工具(属于 isc-dhcp-client 软件包)可能默认未安装。让我们确保它可用。

  1. 更新系统的软件包列表并安装 DHCP 客户端:

    sudo apt-get update
    sudo apt-get install -y isc-dhcp-client
    

    现在,让我们在不中断连接的情况下安全地删除之前步骤中添加的静态 IP 和路由。

  2. eth0 删除静态 IP 地址:

    sudo ip addr del 192.168.1.10/24 dev eth0
    
  3. 删除我们添加的静态默认路由:

    sudo ip route del default via 192.168.1.1 dev eth0
    

    现在你的网络配置已恢复到原始状态。为了演示 dhclient,让我们请求从 DHCP 服务器刷新 IP 地址。

  4. 首先,释放当前的 DHCP 租约。

    sudo dhclient -r eth0
    
  5. 接下来,从 DHCP 服务器请求新租约。

    sudo dhclient eth0
    

    你可能会看到消息 RTNETLINK answers: File exists。这是正常的。它仅表示 dhclient 正在尝试添加已经存在的路由,因此无需更改。你的连接将保持稳定。

  6. 通过再次查看 eth0 接口来验证你的配置。

    ip a show eth0
    

    输出现在应该只显示来自实验环境的原始动态 IP 地址,例如 10.x.x.x172.16.x.x 私有地址。静态 IP 192.168.1.10 应该已经消失。

    2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
        link/ether 00:16:3e:0f:23:a5 brd ff:ff:ff:ff:ff:ff
        altname enp0s5
        inet 172.16.50.11/24 metric 100 brd 172.16.50.255 scope global dynamic eth0
           valid_lft 1892159460sec preferred_lft 1892159460sec
        inet6 fe80::216:3eff:fe0f:23a5/64 scope link
           valid_lft forever preferred_lft forever
    

    你已成功清理了静态配置并刷新了动态 IP 租约。

使用 arptraceroute 验证网络配置

在最后一步中,你将学习使用 arptraceroute 来检查网络配置。

首先,确保安装了必要的工具。arp 包含在 net-tools 中,而 traceroute 有其自己的软件包。

  1. 安装 net-toolstraceroute

    sudo apt-get update
    sudo apt-get install -y net-tools traceroute
    

使用 arp 查看 ARP 缓存

地址解析协议 (ARP) 将 IP 地址映射到本地网络上的物理 MAC 地址。结果存储在 ARP 缓存中。

  1. 要填充 ARP 缓存,首先从路由表中找到默认网关的 IP。

    ip route | grep default
    

    输出将显示网关 IP。请注意,IP 地址会有所不同。

    default via 172.16.50.253 dev eth0
    default via 172.16.50.253 dev eth0 proto dhcp src 172.16.50.11 metric 100
    
  2. 现在,ping 该网关 IP(例如上述示例中的 172.16.50.253)以产生流量。

    ping -c 1 <your-gateway-ip>
    
  3. 使用 arp -a 显示 ARP 缓存。

    arp -a
    

    你将看到网关的 IP 和 MAC 地址。你可能还会看到之前尝试 ping 的 192.168.1.1 地址显示为 <incomplete>,这是正常的。

    ? (192.168.1.1) at <incomplete> on eth0
    _gateway (172.16.50.253) at ee:ff:ff:ff:ff:ff [ether] on eth0
    

    这证实了你的系统已将网关的 IP 解析为 MAC 地址。

使用 traceroute 追踪网络路径

traceroute 命令显示数据包到达目的地所经过的路由器序列(“跳数”)。

  1. 让我们追踪到公共域名(如 google.com)的路径。

    traceroute google.com
    

    该命令将打印路径。注意: 在许多云环境中,traceroute 显示的第一跳可能是内部 IP 地址,而不是路由表中的默认网关。这是正常行为。

    traceroute to google.com (142.250.189.174), 30 hops max, 60 byte packets
     1  10.220.9.2 (10.220.9.2)  0.345 ms  ...
     2  11.73.5.1 (11.73.5.1)  1.978 ms ...
     3  ...
     8  sfo03s24-in-f14.1e100.net (142.250.189.174)  3.001 ms ...
    
    • 第一跳是实验提供商网络内部的路由器。
    • 后续跳数显示了跨越互联网到达最终目的地的路径。
    • 如果路径上的路由器不响应 traceroute 探测,可能会出现星号 (* * *),这可能是由于防火墙或其他网络策略导致的。

恭喜!你现在已经学会了如何在 Linux 系统上检查、静态配置和动态配置 IP 地址,以及使用 pingarptraceroute 等关键工具来验证和排查网络故障。

总结

在本实验中,你学习了在 Linux 环境中管理 IP 地址的基本技能。你首先使用 ip a 命令检查网络接口及其当前配置,以识别目标接口(如 eth0)。然后,你练习了使用 ip addr add 手动分配静态 IP 地址和子网掩码,并使用 ip route add 设置默认网关以实现与外部网络的通信。为了与手动配置进行对比,你还学习了如何使用 dhclient 命令从 DHCP 服务器自动获取 IP 地址、子网掩码和网关。

此外,你探索了必要的网络验证和故障排查工具。你使用 ping 命令确认了与默认网关和外部主机的基本网络连通性。为了深入了解网络层,你使用 arp 命令检查了地址解析协议 (ARP) 缓存,查看了 IP 到 MAC 地址的映射。最后,你利用 traceroute 逐跳追踪了到达目的地的网络路径,从而验证了路由配置。