路由
下面是基于官方 iproute2 手册、协议定义文件以及常见路由行为整理的 Linux 路由表字段大全(尽可能 100% 全),重点覆盖 proto、scope、type、字段含义及常见值(包括自动 vs 手动来源)——这是一个系统级文档级别的总结,可作为运维 & 核心路由理解参考:
📌 一、路由条目核心字段结构(来自 ip-route(8) 手册)
Linux 路由条目大致由以下字段组成(详见官方 manpage):(man7.org)
[to PREFIX] [dev IFACE] [via NEXTHOP] [proto RTPROTO]
[scope SCOPE_VAL] [metric NUM] [table TABLEID] [type TYPE_VAL]
[src SRC_ADDR] [other optional flags…]
-
PREFIX:目的地址/前缀
-
dev IFACE:绑定网卡接口
-
via NEXTHOP:下一跳网关(非直连)
-
src:首选源地址
-
metric:路由优先级数字
-
table:路由表标识符(如
main,local, 自定义等) -
type:路由类型
-
proto:路由来源协议标识
-
scope:路由作用域
(字段定义详见 man 页)(man7.org)
📌 二、Protocol(proto)——路由来源标识
proto 表示 哪个实体创建了这条路由。如果未显式指定,ip 命令默认为 boot:(man7.org)
| 值 | 含义 | 来源 | 是否自动 |
|---|---|---|---|
| kernel | 内核自动添加 | 内核配置 & 地址上线 | ✅自动 |
| boot | 启动时由系统脚本添加 | 系统启动网络配置 | ⚠ 引导自动 |
| static | 手工静态路由 | 管理员通过 ip route add 或配置文件添加 |
✋ 手动 |
| redirect | ICMP 重定向 | 内核根据 ICMP redirect 添加 | ⬆ 自动 |
| ra | IPv6 Router Advertisement | Router Discovery | ⬆ 自动 |
| dhcp | DHCP 客户端添加(数字值) | DHCP 客户端 | ⚠ 自动但外部工具 |
| 其他数字或自定义 | 来源自 /etc/iproute2/rt_protos |
可扩展 | 取决定义 |
📌 说明:RTPROTO 的名称和值是从文件 /etc/iproute2/rt_protos 映射来的,系统可自定义协议编号/名称(proto 字段也可以是数字)。(man7.org)
自动 vs 手动判断:
-
kernel,redirect,ra,dhcp→ 自动由系统或网络组件产生 -
static→ 手动由管理员配置 -
boot→ 系统启动自动产生(在守护进程运行后可能被清理)
📌 三、Scope(作用域)
scope 决定路由的 有效性范围。Linux 默认有三个保留的作用域:(man7.org)
| scope | 含义 | 典型用途 |
|---|---|---|
| host | 仅在本机有效 | 本地接口地址(/32) |
| link | 仅在本链路有效 | 直连网段(无需网关) |
| global | 全球有效 | 默认路由、非直连路由 |
| site | IPv6 站点本地 | IPv6 特殊场景(稀少) |
📌 如果未显式指定 scope,ip route 默认根据路径类型推断:
-
gatewayed unicast →
global -
direct unicast & broadcast →
link -
local host routes →
host(man7.org)
📌 四、Type(类型)
type 用来指定路由的处理方式。一条路由具有一个 type(默认为 unicast):(DEV Community)
| type | 含义 |
|---|---|
| unicast | 普通单播路由 |
| local | 本地地址路由 |
| broadcast | 广播地址路由 |
| multicast | 组播 |
| blackhole | 丢弃数据包 |
| prohibit | 禁止访问 |
| unreachable | 不可达 |
| throw | 强制让路由策略继续查找 |
📌 五、Routing Tables(路由表)
Linux 支持多张表,由 /etc/iproute2/rt_tables 定义:(man7.org)
| 表编号 | 名称 | 说明 |
|---|---|---|
| 0 | unspec | 未指定 |
| 255 | local | 系统本地地址 &广播路由 |
| 254 | main | 主路由表(默认) |
| 253 | default | 默认表 |
| 1–252 | 用户可定义 | 策略路由表等 |
📌 六、完整路由条目典型组合(含 proto + scope)
✔ 内核自动生成(proto=kernel / redirect / ra)
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.10
127.0.0.1/32 dev lo proto kernel scope host
fe80::/64 dev eth0 proto kernel scope link
(直连网段、本机/IPv6 链路本地)(Ubuntu 手册)
✔ 系统引导或网络初始化(proto=boot)
10.0.0.0/8 via 10.0.0.1 dev eth0 proto boot
✔ 管理员手动静态路由(proto=static)
ip route add 172.16.0.0/16 via 192.168.1.1 dev eth0 proto static
✔ DHCP 客户端添加(proto=dhcp)
default via 192.168.1.1 dev wlan0 proto dhcp src 192.168.1.100 metric 600
📌 七、哪些是 100% 自动 vs 手动
| 路由来源 | proto 值 | 是否自动 | 什么时候生成 |
|---|---|---|---|
| 本地地址 /broadcast | kernel | ✅ 自动 | 分配 IP 时内核自动 |
| 直连网络 | kernel | ✅ 自动 | 接口 up & IP 分配 |
| IPv6 Router Advertised | ra | ✅ 自动 | SLAAC/Router Advertisement |
| ICMP Redirect 添加 | redirect | ✅ 自动 | 收到 ICMP redirect |
| DHCP 客户端 | dhcp | ⚠ 自动 | DHCP client 执行时 |
| 引导时静态 | boot | ⚠ 自动 | 系统启动脚本 |
| 管理员静态 | static | ✋ 手动 | 显式 ip route add |
📌 八、实践技巧:查看路由详细信息
输出所有路由及源码协议细节:
ip route show table all
ip route show proto kernel
ip route show proto static
显示不同 scope 的路由:
ip route show scope link
ip route show scope host
ip route show scope global
📌 九、可自定义扩展
因为 proto、scope 名称来自文本文件:
-
/etc/iproute2/rt_protos→ 自定义协议标识 -
/etc/iproute2/rt_scopes→ 可添加 scope 名称
内核不会限制这些名称,只要在映射文件中定义即可。(man7.org)
📌 参考官方定义来源
-
官方
ip-route(8)文档(完整字段 &默认行为定义)(man7.org) -
rt_protos/rt_scopes映射说明(用户可扩展)(man7.org) -
Linux 路由行为概述(自动 vs 手动的行为解释)(CSDN博客)
如果你需要,我还能提供 /etc/iproute2/rt_protos 和 /etc/iproute2/rt_scopes 模板清单(默认内容 +各协议编号) 以及一个 Mind‑Map 格式的可视化图表来体现字段之间的关系。
