对 route -n 的输出做一个解读
# route -n
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
0.0.0.0 10.0.12.1 0.0.0.0 UG 0 0 0 eth0
1.1.1.0 0.0.0.0 255.255.255.0 U 0 0 0 cni0
10.0.12.0 0.0.0.0 255.255.252.0 U 0 0 0 eth0
169.254.0.0 0.0.0.0 255.255.0.0 U 1002 0 0 eth0
根据给出的路由表输出,以下是对每一列的解读:
- Destination:目标网络地址。
- Gateway:下一跳的网关地址,即将数据包转发到该地址。
- Genmask:子网掩码,用于确定目标网络地址的范围。
- Flags:路由表的标志,U表示该路由是有效的,G表示该路由是默认网关。
- Metric:用于选择最佳路由的度量值,较小的值优先选择。
- Ref:路由的引用计数。
- Use:路由的使用计数。
- Iface:路由通过的接口。
根据这个路由表,可以得出以下解读:
- 第一行表示默认路由,当目标地址无法匹配其他路由时,将数据包转发到10.0.12.1这个网关,通过eth0接口发送。
- 第二行表示对于1.1.1.0/24网段的目标地址,直接通过cni0接口发送数据包。
- 第三行表示对于10.0.12.0/22网段的目标地址,直接通过eth0接口发送数据包。
- 第四行表示对于169.254.0.0/16网段的目标地址,直接通过eth0接口发送数据包,该路由的度量值为1002。
请注意,该解读基于提供的路由表输出,实际情况可能有所不同。
Flags 可能哪些值?
在Linux系统中,路由表的Flags列可以具有以下值:
- U:表示路由是有效的(Up)。
- G:表示路由是默认网关(Gateway)。
- H:表示该路由是主机路由,即目标地址是具体的主机地址而不是一个网络地址(Host)。
- D:表示该路由是由动态路由协议(如RIP、OSPF)自动添加的(Dynamic)。
- M:表示该路由是由静态路由管理程序(如route)手动添加的(Modified)。
- L:表示该路由是本地路由,即目标地址是本地主机的一个接口(Local)。
- C:表示该路由是一个缓存的路由(Cache)。
- !:表示该路由是不可到达的(Reject)。
这些标志可以组合使用,例如,"UG"表示该路由是默认网关且有效。
请注意,不同的操作系统可能会有不同的标志值。
路由条目添加解读
# ip netns exec netns1 ip route add default via 1.1.1.1 dev veth2
这条命令的解读如下:
-
ip netns exec netns1
:在名为netns1
的网络命名空间中执行后续的命令。 -
ip route add default via 1.1.1.1 dev veth2
:将一个默认路由添加到名为veth2
的网络接口上,该路由的下一跳地址为1.1.1.1
。
换句话说,这条命令将在netns1
命名空间中的veth2
接口上添加一个默认路由,所有未知目标地址将通过1.1.1.1
作为下一跳发送。
# ip netns exec netns2 ip route add default via 1.1.2.1 dev veth4
这条命令的解读如下:
-
ip netns exec netns2
:在名为netns2
的网络命名空间中执行后续的命令。 -
ip route add default via 1.1.2.1 dev veth4
:将一个默认路由添加到名为veth4
的网络接口上,该路由的下一跳地址为1.1.2.1
。
换句话说,这条命令将在netns2
命名空间中的veth4
接口上添加一个默认路由,所有未知目标地址将通过1.1.2.1
作为下一跳发送。
参考
flannel UDP模式的实现
https://mp.weixin.qq.com/s/ZhNjVRohuOiijpeFD8voQA