在 Linux 中管理 IP 地址

LinuxBeginner
立即练习

介绍

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

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

使用 ip a 检查网络接口

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

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

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

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

    ip a
    

    你将看到类似以下的输出。具体的详细信息(如接口名称 eth0、enp0s5,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.x 或 172.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 租约。

使用 arp 和 traceroute 验证网络配置

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

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

  1. 安装 net-tools 和 traceroute:

    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 地址,以及使用 ping、arp 和 traceroute 等关键工具来验证和排查网络故障。

总结

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

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