linux 路由表详解
通过 route 命令查看 Linux 内核的路由表:
$route
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default _gateway 0.0.0.0 UG 0 0 0 p5p1
default _gateway 0.0.0.0 UG 100 0 0 em1
10.150.0.0 10.150.54.126 255.255.0.0 UG 0 0 0 em2
10.150.54.0 0.0.0.0 255.255.255.128 U 0 0 0 em2
link-local 0.0.0.0 255.255.0.0 U 1002 0 0 p5p1
link-local 0.0.0.0 255.255.0.0 U 1004 0 0 em1
link-local 0.0.0.0 255.255.0.0 U 1005 0 0 em2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-de7a849d77f1
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9bc222159381
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-2d803453c335
172.33.1.0 _gateway 255.255.255.0 UG 0 0 0 em1
172.33.9.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
172.33.137.0 0.0.0.0 255.255.255.0 U 0 0 0 p5p1
$route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 172.11.120.254 0.0.0.0 UG 0 0 0 p5p1
0.0.0.0 172.32.8.254 0.0.0.0 UG 100 0 0 em1
10.150.0.0 10.150.54.126 255.255.0.0 UG 0 0 0 em2
10.150.54.0 0.0.0.0 255.255.255.128 U 0 0 0 em2
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 p5p1
169.254.0.0 0.0.0.0 255.255.0.0 U 1004 0 0 em1
169.254.0.0 0.0.0.0 255.255.0.0 U 1005 0 0 em2
172.17.0.0 0.0.0.0 255.255.0.0 U 0 0 0 docker0
172.18.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-de7a849d77f1
172.19.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-9bc222159381
172.24.0.0 0.0.0.0 255.255.0.0 U 0 0 0 br-2d803453c335
172.33.1.0 172.32.8.254 255.255.255.0 UG 0 0 0 em1
172.33.9.0 0.0.0.0 255.255.255.0 U 100 0 0 em1
172.33.137.0 0.0.0.0 255.255.255.0 U 0 0 0 p5p1
各列字段说明:
列 | 含义 |
---|---|
Destination | 目标网络网关或目标主机。Destination 为 default(0.0.0.0 )时,表示这个是默认网关,所有数据都发到这个网关(这里是172.11.120.254 和172.32.8.254 ) |
Gateway | 本机的网关地址,0.0.0.0 表示当前记录对应的 Destination 跟本机在同一个网段,通信时不需要经过网关;如不在同一个网段,可借助相关路由跳过去,如这里借助10.150.54.126 网关跳到10.150.0.0 段的网络 |
Genmask | 目标网络(Destination) 字段的网络掩码,Destination 是主机时需要设置为 255.255.255.255,是默认路由时会设置为 0.0.0.0 |
Flags | 标记,含义参考表格后面的解释 |
Metric | 路由距离,到达指定网络所需的中转数,是大型局域网和广域网设置所必需的 (不在Linux内核中使用。) |
Ref | 路由项引用次数 (不在Linux内核中使用。) |
Use | 此路由项被路由软件查找的次数 |
Iface | 网卡名字,例如 em1 |
Flags 含义:
U 路由是活动的
H 目标是个主机
G 需要经过网关
R 恢复动态路由产生的表项
D 由路由的后台程序动态地安装
M 由路由的后台程序修改
! 拒绝路由
如何看这个路由表:
从右往左看:比如第三行:
10.150.0.0 | 10.150.54.126 | 255.255.0.0 | UG | 0 | 0 | 0 | em2
流量数据从本机的网卡em2
出去到(交换机)网关10.150.54.126
,借助这个网关将数据送往目标网络地址(网关)10.150.0.0
其中要明确地址10.150.54.126
与10.150.0.0
是能通讯的、否则流量是过不去的
ip route show查看
"ip route show" 是 Linux 中的命令,用于显示计算机上的路由表。路由表记录了计算机如何将数据包发送到网络中的其他计算机
$ip route show
default via 172.33.137.254 dev p5p1
default via 172.33.9.254 dev em1 proto static metric 100
10.150.0.0/16 via 10.150.54.126 dev em2
10.15.54.0/25 dev em2 proto kernel scope link src 10.15.54.10
169.254.0.0/16 dev p5p1 scope link metric 1002
172.3.1.0/24 via 172.13.9.254 dev em1
172.3.1.0/24 dev em1 proto kernel scope link src 172.3.1.12 metric 100
172.2.136.0/24 dev p5p1 proto kernel scope link src 172.2.136.12
上面路由记录的格式通常都是这样的:
<目的地> via <网关> dev <接口网卡> proto <协议> src <源地址或本机地址> <附加信息>
列 | 解析 |
---|---|
<目的地> | 目的地网络网关或主机 ,可以是具体的 IP 地址(如 10.15.54.50 )、网络地址 (如10.15.54.0/25 )或 default 等。default 会在没有其他符合的路由条目时使用; |
via <网关> | 可选字段,指的是到达目的地址 需要使用的网关的 IP 地址 。发往 这个路由条目对应的目的地的数据包,都会把这个网关设置为下一跳 ,经由此<via> 发往最终目的地;比如:em1 网卡 通过 网关via 172.13.9.254 跳到 172.3.1.0/24 网段 ,这样就实现了不同网段之间的通信 |
dev <接口网卡> | 要发往本条目对应目的地时所需要使用的网络接口(设备网卡); |
proto <协议> | 添加本条条目的协议。常见的值有:kernel (本条目由内核添加)、static (手动添加)、dhcp (通过 DHCP 添加)、boot (在启动时添加)、redirect (由 ICMP 重定向添加)。此外,该值还可以是 bgp 、ospf 这类动态路由协议。该值可能是整数值或者一个字符串值,字符串值都可以在 /etc/iproute2/rt_protos 中找到; |
src <源地址> | 在使用本条路由,向目的地发送数据包时所需采用的 IP 地址; |
<附加信息> | 代表多个可选项,常见的有:见下面 |
<附加信息>:
-
scope
:定义这条路由的范围:
global
表示有网关的单播(unicast)路由
link
表示直连的单播或广播(broadcast)路由
host
表示本地(local)路由。该值可能是一个整数值或者是字符串值,字符串值应该能在/etc/iproute2/rt_scopes
中找到 -
metric <整数>:表示路由的优先级,数字越小优先级越高。
最小值为 0
,最大值为 65535
-
table <表名/数字>:如果一条路由不属于 main 表,则会在这里指出该路由所属的路由表