Network configuration and management
ip
ip 命令是 Linux 中用于网络配置和管理的核心工具,它取代了传统的 ifconfig、route 和 arp 等命令。ip 命令结构统一、功能强大且效率更高。
ip 命令的基本语法格式为:
Bash
1 | ip [ OPTIONS ] OBJECT { COMMAND | help } |
其中:
- **
OBJECT**:指定要操作的网络对象,这是分类的核心。 - **
COMMAND**:指定对该对象执行的具体操作(如add、del、show、flush)。
下面是 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 网络中,路由是决定数据包从源地址到目标地址所经过路径的过程。
- 路由表(Routing Table)
Linux 内核维护一个或多个路由表,它是一个数据库,记录了“去往哪个目标,应该从哪个接口发送,并且交给谁(下一跳)”的规则。
当一个数据包到达网卡或需要从本机发出时,内核会根据以下信息查询路由表:
- **目标地址 (Destination)**:数据包要去的网络或主机地址。
- **网关 (Gateway/Next Hop)**:下一跳路由器或主机(如果目标不在本地子网)。
- **接口 (Device/Dev)**:数据包应该从哪个网络接口(如
eth0)发出。 - **度量值 (Metric)**:路由的优先级,值越小优先级越高。
- 路由匹配规则
数据包的目标地址会与路由表中的条目进行匹配:
- **最长前缀匹配 (Longest Prefix Match)**:内核会选择与目标地址匹配最精确、子网掩码最长(即前缀最长)的路由条目。
- 例如,去往
192.168.1.10的数据包,路由表中有192.168.1.0/24和192.168.1.8/29,内核会选择后者。
- 例如,去往
- 默认路由 (Default Route):如果没有找到任何匹配的特定路由,内核会使用默认路由 (
default或0.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 show 或 ip r | ip 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 | default via 192.168.1.1 dev eth0 proto dhcp 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 | 表名 | 作用 |
|---|---|---|
| 255 | local | 本地表:存储本地、广播、多播地址,不能修改。 |
| 254 | main | 主表:默认路由表,所有常规路由都在此。 |
| 253 | default | 默认表:为空,留给 DHCP 等程序使用。 |
<1-252> | <自定义> | 自定义表:用于策略路由。 |
ip rule 使用流程:
创建自定义路由表:
1
2# 在 /etc/iproute2/rt_tables 中定义表名 (可选)
echo "100 isp1" >> /etc/iproute2/rt_tables向自定义表添加路由:
1
2# 向 isp1 (ID 100) 表中添加默认路由,指向 ISP1 网关
ip route add default via 1.1.1.1 dev eth1 table 100创建路由规则:
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 | # 添加两条去往同一目标、成本相同的路由 |
nexthop via ... weight 1: 定义多条下一跳,Linux 内核会自动对数据包进行哈希计算,将流量分散到这两条路径上。
3. 路由缓存(Route Cache)
在旧版内核中,路由信息会被缓存以加速查询。虽然现代内核已转向无缓存设计,但了解 ip route get 如何模拟查询过程仍很重要。ip route get 可以告诉您内核当前将如何转发特定数据包。
6. 其他辅助对象
除了上述核心对象,ip 命令还支持一些其他用于高级网络配置的对象:
| 命令对象 | 简写 | 主要用途 |
|---|---|---|
ip tunnel | ip t | 管理和配置 IP 隧道 (如 IPIP, GRE)。 |
ip maddress | ip m | 管理和配置多播地址 (Multicast Address)。 |
ip monitor | ip m | 实时监控网络设备、地址、路由等的变化。 |
ip xfrm | 管理 IPsec 策略和状态 (用于加密和身份验证)。 |
关键的通用操作命令:
show或list(s或l): 显示对象的信息。add(a): 添加一个新的条目(如 IP 地址、路由)。del(d): 删除一个条目。set: 修改现有对象的属性(主要用于ip link)。flush: 清空或删除所有或部分条目。
掌握 ip 命令,特别是 ip link、ip addr 和 ip route,是 Linux 网络管理的关键。
