ip

ip 命令是 Linux 中用于网络配置和管理的核心工具,它取代了传统的 ifconfigroutearp 等命令。ip 命令结构统一、功能强大且效率更高。

ip 命令的基本语法格式为:

Bash

1
ip [ OPTIONS ] OBJECT { COMMAND | help }

其中:

  • **OBJECT**:指定要操作的网络对象,这是分类的核心。
  • **COMMAND**:指定对该对象执行的具体操作(如 adddelshowflush)。

下面是 ip 命令的主要对象分类及详细功能介绍:


1. ip link:网络设备(接口)管理

ip link 用于管理网络设备的属性,例如查看接口状态、配置 MAC 地址、启用/禁用接口等。

命令分类常用命令 (简写)功能描述
显示ip link show (ip l)显示所有网络设备的简要信息。
显示详细ip -s link show (ip -s l)显示更详细的统计信息 (如收发包计数、错误)。
启用/禁用ip link set dev eth0 up启用(激活)指定的网络接口。
ip link set dev eth0 down禁用(关闭)指定的网络接口。
设置ip link set dev eth0 name newname更改设备名称。
ip link set dev eth0 mtu 1500设置接口的MTU (最大传输单元)。
ip link set dev eth0 address xx:xx:xx:xx:xx:xx更改接口的MAC地址。

2. ip addr:地址(IP地址)管理

ip addr 用于管理网络接口上的 IP 地址(包括 IPv4 和 IPv6)。

命令分类常用命令 (简写)功能描述
显示ip addr show (ip a)显示所有接口的 IP 地址信息。
显示特定ip addr show dev eth0 (ip a sh dev eth0)仅显示指定接口的 IP 地址信息。
添加ip addr add 192.168.1.10/24 dev eth0为接口添加一个 IP 地址和子网掩码。
删除ip addr del 192.168.1.10/24 dev eth0从接口上删除一个 IP 地址。
刷新ip addr flush dev eth0删除接口上的所有 IP 地址 (谨慎使用)。

3. ip route:路由表管理

在 IP 网络中,路由是决定数据包从源地址到目标地址所经过路径的过程。

  1. 路由表(Routing Table)

Linux 内核维护一个或多个路由表,它是一个数据库,记录了“去往哪个目标,应该从哪个接口发送,并且交给谁(下一跳)”的规则。

当一个数据包到达网卡或需要从本机发出时,内核会根据以下信息查询路由表:

  • **目标地址 (Destination)**:数据包要去的网络或主机地址。
  • **网关 (Gateway/Next Hop)**:下一跳路由器或主机(如果目标不在本地子网)。
  • **接口 (Device/Dev)**:数据包应该从哪个网络接口(如 eth0)发出。
  • **度量值 (Metric)**:路由的优先级,值越小优先级越高。
  1. 路由匹配规则

数据包的目标地址会与路由表中的条目进行匹配:

  1. **最长前缀匹配 (Longest Prefix Match)**:内核会选择与目标地址匹配最精确、子网掩码最长(即前缀最长)的路由条目。
    • 例如,去往 192.168.1.10 的数据包,路由表中有 192.168.1.0/24192.168.1.8/29,内核会选择后者。
  2. 默认路由 (Default Route):如果没有找到任何匹配的特定路由,内核会使用默认路由 (default0.0.0.0/0) 作为最后的选择

ip route 用于查看、添加、删除内核的路由表条目,决定数据包的发送路径。

命令分类常用命令 (简写)功能描述
显示ip route show (ip r)显示所有路由表条目。
添加ip route add default via 192.168.1.1添加默认网关路由。
ip route add 10.0.0.0/8 via 192.168.1.2 dev eth0添加特定网络的路由。
删除ip route del default删除默认网关路由。
ip route del 10.0.0.0/8删除特定网络的路由。
刷新ip route flush table main清空主路由表 (谨慎使用)。
缓存ip route show cache显示路由缓存信息 (在某些新版本内核中可能已被移除)。

1. 查看路由 (Show Routes)

这是最常用的功能,用于诊断网络连通性问题。

语法示例作用
ip route showip rip r显示内核主路由表中的所有路由条目。
ip route get <IP>ip r get 8.8.8.8模拟一个数据包去往特定 IP 地址,显示内核会选择哪条路由。(非常重要!)
ip route show table <ID/Name>ip r show table 100显示非默认路由表中的路由。

输出示例解析:

1
2
default via 192.168.1.1 dev eth0 proto dhcp metric 100 
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10 metric 100
  • default: 目标是所有未匹配的地址(即 0.0.0.0/0)。
  • via 192.168.1.1: 下一跳(网关)是 192.168.1.1
  • dev eth0: 通过 eth0 接口发送。
  • proto dhcp: 这条路由是通过 DHCP 协议添加的。
  • metric 100: 路由的优先级度量值。
  • 192.168.1.0/24: 目标是本地连接的网络段。
  • scope link: 目标地址在本地子网内(不需要网关)。
  • src 192.168.1.10: 从这个源 IP 地址发出。

2. 添加路由 (Add Routes)

用于建立新的网络连接路径。

语法示例作用
默认路由ip r add default via 192.168.1.1 dev eth0设置默认网关。
网络路由ip r add 172.16.0.0/16 via 10.0.0.1 dev eth1添加一条静态路由:去往 172.16.x.x 网络的数据包,通过 eth1 发送给网关 10.0.0.1
主机路由ip r add 10.1.1.1/32 via 192.168.1.1添加一条特定主机的路由 (/32 表示主机)。
本地连接ip r add 192.168.2.0/24 dev eth2无需网关:直接将包发往 eth2,目标主机必须在本地子网内。

3. 删除路由 (Delete Routes)

用于移除不再需要的路由条目。

语法示例作用
删除默认ip r del default删除当前的默认网关。
删除特定ip r del 172.16.0.0/16删除先前添加的网络路由条目。

4. ip neigh:邻居表(ARP/NDP)管理

ip neigh (或 ip neighbour) 用于管理 ARP 表(IPv4)和 NDP 邻居缓存表(IPv6),即 IP 地址到 MAC 地址的映射。

命令分类常用命令 (简写)功能描述
显示ip neigh show (ip n)显示邻居表中的所有条目。
添加ip neigh add 192.168.1.10 lladdr xx:xx:xx:xx:xx:xx dev eth0强制添加一个静态 ARP 条目 (MAC地址)。
删除ip neigh del 192.168.1.10 dev eth0删除指定的邻居条目。
刷新ip neigh flush all清空邻居表缓存 (谨慎使用)。

5. ip rule:策略路由管理 (Policy Routing)

ip rule 用于管理策略路由规则,允许根据源地址、目标地址、服务类型等更多条件来选择不同的路由表。

命令分类常用命令 (简写)功能描述
显示ip rule show显示当前的策略路由规则。
添加ip rule add from 192.168.1.0/24 table 100添加一条规则:源地址匹配时使用路由表 100。
删除ip rule del from 192.168.1.0/24删除指定的策略路由规则。
刷新ip rule flush删除所有非默认的策略路由规则。

1. 策略路由(Policy Routing)

策略路由允许您根据更多的条件(而不仅仅是目标地址)来决定路由,例如根据数据包的源地址或**服务类型 (ToS)**。

核心概念:路由表 vs 路由规则

  • **路由表 (Routing Table)**:存储实际的转发路径(使用 ip route 命令管理)。
  • **路由规则 (Routing Rule)**:定义了查询路由表的策略(使用 ip rule 命令管理)。

Linux 默认有 3 个路由表:

表 ID表名作用
255local本地表:存储本地、广播、多播地址,不能修改。
254main主表:默认路由表,所有常规路由都在此。
253default默认表:为空,留给 DHCP 等程序使用。
<1-252><自定义>自定义表:用于策略路由。

ip rule 使用流程:

  1. 创建自定义路由表

    1
    2
    # 在 /etc/iproute2/rt_tables 中定义表名 (可选)
    echo "100 isp1" >> /etc/iproute2/rt_tables
  2. 向自定义表添加路由

    1
    2
    # 向 isp1 (ID 100) 表中添加默认路由,指向 ISP1 网关
    ip route add default via 1.1.1.1 dev eth1 table 100
  3. 创建路由规则

    1
    2
    # 添加规则:所有源自 192.168.1.0/24 的流量,查询表 100
    ip rule add from 192.168.1.0/24 table 100

    现在,来自 192.168.1.x 的流量将使用 1.1.1.1 作为网关。

2. 多路径路由 (ECMP / Load Balancing)

ECMP (Equal-Cost Multi-Path) 允许将流量平均分配到多条成本相同的路径上,实现负载均衡和冗余。

1
2
3
4
# 添加两条去往同一目标、成本相同的路由
ip route add 10.0.0.0/24 \
nexthop via 192.168.1.1 dev eth0 weight 1 \
nexthop via 192.168.2.1 dev eth1 weight 1
  • nexthop via ... weight 1: 定义多条下一跳,Linux 内核会自动对数据包进行哈希计算,将流量分散到这两条路径上。

3. 路由缓存(Route Cache)

在旧版内核中,路由信息会被缓存以加速查询。虽然现代内核已转向无缓存设计,但了解 ip route get 如何模拟查询过程仍很重要。ip route get 可以告诉您内核当前将如何转发特定数据包。


6. 其他辅助对象

除了上述核心对象,ip 命令还支持一些其他用于高级网络配置的对象:

命令对象简写主要用途
ip tunnelip t管理和配置 IP 隧道 (如 IPIP, GRE)。
ip maddressip m管理和配置多播地址 (Multicast Address)。
ip monitorip m实时监控网络设备、地址、路由等的变化。
ip xfrm管理 IPsec 策略和状态 (用于加密和身份验证)。

关键的通用操作命令:

  • showlist (sl): 显示对象的信息。
  • add (a): 添加一个新的条目(如 IP 地址、路由)。
  • del (d): 删除一个条目。
  • set: 修改现有对象的属性(主要用于 ip link)。
  • flush: 清空或删除所有或部分条目。

掌握 ip 命令,特别是 ip linkip addrip route,是 Linux 网络管理的关键。