看懂linux上的路由表
针对 Kubernetes 容器网络的问题分析和排查,经常需要查看路由表。本文主要是分析 route 命令输出各项参数的含义,及其中经常出现的 0.0.0.0 的含义。
路由表
在容器网络为 Calico 的 kubernetes 集群机器上执行route -n
命令输出如下:
|
|
各字段主要说明如下:
- Destination:目标网络或目标主机
- Gateway:网关,连接两个不同网络的设备。
- Genmask:目的地址的子网掩码。255.255.255.255 表示目的主机,0.0.0.0 表示默认路由
- Flags:标识 U 表示路由生效,G 表示网关,H 表示目标地址是一个主机。
- Metric:到目标地址的跳数
- Ref:路由被引用数
- Use: 路由被查询次数
- Iface:接口,去往目的地址所经出口
理解 0.0.0.0 地址
在 IPV4 地址中,0.0.0.0 通常表示未明确的、无效的目标。
在上面的情况中,目标地址为 0.0.0.0,表示没有明确制定的意思,即默认路由。路由匹配会按照掩码长度由长到短开始匹配。所以,一般默认路由的目标子网掩码为 0.0.0.0,表示最后才匹配的意思。同时 Flags 中的 G 标志,表示使用路由。
看上述代码块的第二条路由,网关中的 0.0.0.0,表示没有,无效的意思。即,本条路由不经网关。网关是从一个网络进入另一个网络的边缘设备。换句话说,命中网关是 0.0.0.0 的报文,它的目标是可能是同一网络下的其它目标地址。这时候走的是二层直连,需要发起 ARP 请求换取 MAC 地址进行发送。这条路由通常是在网卡上配置 IP 时候自动生成的。在网卡上每绑定一个 IP,就相应地生成一条这样的记录。可以看到本条路由的 Flags 并没有 G 标志。
第三条路由和第一条路由类似,当匹配到 10.244.113.128~10.244.113.191 网段区间的 IP,执行本条路由。经 tunl0 设备发往 10.161.16.194 网关(calico 场景下是另一个 kubernetes 工作节点)。
第五条路由,标志为 H,掩码是 255.255.255.255,表示目标地址是 10.244.186.193,直接发往 cali687d9beb32a,而这个设备的另一端是容器内的 eth0。这种情况也不需要网关,网关为 0.0.0.0。
- 原文作者:hzliangbin
- 原文链接:https://www.liangbin.xyz/post/gateway-as-0000/
- 版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。