ip route 是什么?
ip route 是 iproute2 软件包中的一个工具,用于显示和操作 Linux 内核的路由表,路由表是操作系统决定如何转发数据包的“地图”,当数据包需要发送到网络中的另一个地址时,内核会查询这个路由表,以确定下一跳(next-hop)应该发往哪里。

基本语法
ip route [ add | del | change | replace | show | list ] SELECTOR ROUTE
add: 添加一条新的路由规则。del: 删除一条已存在的路由规则。change: 修改一条已存在的路由规则(目标网络必须完全匹配)。replace: 替换或添加一条路由规则,如果规则已存在则替换,不存在则添加。show或list: 显示当前的路由表(默认操作,不指定时执行此命令)。SELECTOR: 用于筛选要显示、删除或修改的路由规则(to 192.168.1.0/24)。ROUTE: 要添加、删除或修改的路由规则本身。
核心概念:路由的组成部分
在深入命令之前,必须理解路由条目中的几个关键字段:
- 目标网络 (
DESTINATION): 你想要到达的网络地址,格式通常是IP_ADDRESS/PREFIX_LENGTH(168.1.0/24),这表示一个子网。 - 源地址 (
src): 可选,从本机发出的数据包,如果匹配此路由,将使用指定的源 IP 地址。 - 网关 (
via或gw): 可选,数据包的下一跳地址,如果目标地址不在本地网络,数据包将被发送到这个网关地址,网关本身必须是可达的(通常通过直连网络)。 - 输出接口 (
dev): 可选,数据包应该从哪个网络接口(网卡)发出,这通常用于直连网络。 - 跃点数 (
metric): 可选,路由的成本值,值越小,路由优先级越高,当存在到达同一目标的多条路由时,内核会选择metric值最小的那条。 - 路由类型 (
TYPE): 可选,指定路由的类型,如unicast(单播,默认)、broadcast(广播)、local(本地)、unreachable(不可达) 等。
常用命令示例
显示路由表
这是最常见的用法,不加任何参数即可。
ip route # 或者 ip route show
输出示例解析:
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.100
169.254.0.0/16 dev eth0 scope link
-
default via 192.168.1.1 dev eth0 proto dhcp metric 100:
(图片来源网络,侵删)- 目标:
default(默认路由,0.0.0/0),表示所有未知流量。 - 网关:
via 192.168.1.1。 - 接口:
dev eth0。 - 协议:
proto dhcp,表示由 DHCP 客户端自动配置。 - 跃点数:
metric 100。
- 目标:
-
168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.100:- 目标:
168.1.0/24,直连的局域网。 - 接口:
dev eth0。 - 协议:
proto kernel,由内核自动管理。 - 作用域:
scope link,表示此路由仅在直连的链路(网络)上有效。 - 源地址:
src 192.168.1.100。
- 目标:
-
254.0.0/16 dev eth0 scope link:- 这是 链路本地地址 (Link-Local),当你的机器无法通过 DHCP 获取 IP 地址,或者 DHCP 服务器不可用时,系统会自动配置一个
254.x.x地址,用于与同一局域网内其他同样配置了链路本地地址的机器通信。
- 这是 链路本地地址 (Link-Local),当你的机器无法通过 DHCP 获取 IP 地址,或者 DHCP 服务器不可用时,系统会自动配置一个
添加路由
添加默认路由
# 添加一个默认网关 sudo ip route add default via 192.168.1.254
添加到特定网络的路由

# 假设你的网络是 192.168.1.0/24,你需要访问另一个子网 10.0.0.0/24 # 该子网的网关是 192.168.1.1 sudo ip route add 10.0.0.0/24 via 192.168.1.1
通过特定接口访问网络
# 假设你有两个网卡 eth0 和 eth1 # eth0 连接 192.168.1.0/24,eth1 连接 10.10.10.0/24 # 你希望所有访问 10.10.10.0/24 的流量都从 eth1 走(即使 eth0 的网关也能到) # 这种情况通常不需要添加路由,因为直连路由优先级最高。 # 但如果 eth1 的网关是 10.10.10.1,你想让它作为 10.10.10.0/24 的出口: sudo ip route add 10.10.10.0/24 dev eth1 src 10.10.10.5
添加带有跃点数的路由(策略路由)
# 添加一个备用的默认网关,优先级低于主网关 # metric 值越大,优先级越低 sudo ip route add default via 192.168.1.253 metric 200
删除路由
删除路由的语法与添加类似,只需将 add 换成 del。
# 删除默认路由 sudo ip route del default # 删除到特定网络的路由 sudo ip route del 10.0.0.0/24 via 192.168.1.1 # 删除通过特定接口的路由 sudo ip route del 10.10.10.0/24 dev eth1
修改路由
使用 change 或 replace。
change: 要求目标网络精确匹配,如果你想修改的metric或via,但to和dev不变,change很安全。replace: 如果规则不存在,就添加它;如果存在,就替换它,可以修改规则的大部分属性。
# 假设存在一条路由: 10.0.0.0/24 via 192.168.1.1 # 现在想把它改成 via 192.168.1.50 sudo ip route change 10.0.0.0/24 via 192.168.1.50 # 使用 replace 实现同样的效果 sudo ip route replace 10.0.0.0/24 via 192.168.1.50
路由策略
ip route 也可以与 ip rule 结合,实现更复杂的策略路由,根据数据包的源地址选择不同的路由。
# 添加一个新的路由表,例如名为 'mytable' echo "200 mytable" >> /etc/iproute2/rt_tables # 为 'mytable' 添加一条路由 sudo ip route add 192.168.2.0/24 via 192.168.1.50 table mytable # 添加一条规则:所有来自 192.168.1.100 的数据包,都使用 'mytable' 进行路由查询 sudo ip rule add from 192.168.1.100 lookup mytable
永久配置 vs. 临时配置
使用 ip route 命令添加的路由在重启系统或重启网络服务后会丢失,要实现永久配置,你需要修改相应的网络配置文件。
基于发行版的配置文件
-
Ubuntu/Debian (Netplan): 编辑
/etc/netplan/01-netcfg.yaml(或类似文件)。network: version: 2 ethernets: eth0: dhcp4: yes # 添加静态路由 routes: - to: 10.0.0.0/24 via: 192.168.1.1 metric: 101然后应用配置:
sudo netplan apply -
Ubuntu/Debian (ifupdown): 编辑
/etc/network/interfaces文件。auto eth0 iface eth0 inet static address 192.168.1.100 netmask 255.255.255.0 gateway 192.168.1.1 # 添加静态路由 up ip route add 10.0.0.0/24 via 192.168.1.1 -
CentOS/RHEL/Fedora (NetworkManager / ifcfg): 编辑网卡配置文件,
/etc/sysconfig/network-scripts/ifcfg-eth0。DEVICE=eth0 BOOTPROTO=static IPADDR=192.168.1.100 NETMASK=255.255.255.0 GATEWAY=192.168.1.1 # 添加静态路由 IPV4_ROUTE0="10.0.0.0/24 via 192.168.1.1"然后重启网络服务:
sudo systemctl restart network -
Systemd-networkd: 编辑
/etc/systemd/network/eth0.network。[Match] Name=eth0 [Network] Address=192.168.1.100/24 Gateway=192.168.1.1 # 添加路由 Route=10.0.0.0/24 via 192.168.1.1然后重启
systemd-networkd服务。
总结与排错技巧
- 查看路由表:
ip route是排错网络连通性的第一步,使用ping或traceroute/traceroute6结合ip route的输出来判断数据包的走向。 traceroute的妙用:traceroute会显示数据包经过的每一跳,如果某一跳之后就断了,很可能是那个路由器之后的路由配置有问题,或者目标网络不可达。- 优先级: 路由的匹配顺序是:
- 主机路由 (
/32或/128):最精确,优先级最高。 - 网络路由 (
/24,/16等)。 - 默认路由 (
0.0.0/0):最后的选择。
- 主机路由 (
- 跃点数 (
metric): 在有多个网关或多个路径到达同一目标时,metric决定了最佳路径,手动配置时,注意不要轻易设置比默认路由更小的metric,否则可能导致默认路由失效。 arp -a: 如果网关地址配置错误,数据包无法送达,可以使用arp -a查看本地 ARP 缓存,确认网关的 MAC 地址是否正确。
掌握 ip route 命令是 Linux 系统和网络管理员的必备技能,它能帮助你精确地控制和诊断网络流量。
