显示内核路由异常条目 (FIB)

显示内核路由异常条目 (FIB)

Linux 3.6 删除了 ipv4 路由缓存(犯罪)。
变更日志说:

删除 ipv4 路由缓存。现在,查找直接进入 FIB trie 并使用缓存在那里的预构建路由。

根据这个问题,路由缓存条目现在存储在“路由异常”结构是路由条目的一部分。

在我的 3.16 (Debian Jessie) 标准发行版内核上,我看不到任何异常,也ip route show cache没有返回任何内容。路由表只有一条默认路由:

~#ip 路由显示
默认通过 10.11.2.30 dev eth0
10.11.0.0/16 dev eth0 原型内核范围链接 src 10.11.1.76

Q1:如何列出内核已知的所有这些路由异常?
Q2:如何选择性地删除这样的异常?
Q3:为什么内核在尝试 ping 某个主机时没有选择正确的默认网关:

ping 10.30.104.23
PING 10.30.104.23 (10.30.104.23) 56(84) 字节数据。
从 10.11.1.11 开始 icmp_seq=1 目标协议无法到达

Q3 的补充:我怀疑这个(现已过时)路由可能由于 ICMP 重定向而被存储(在某处)。但是,如果ip route show cache没有列出路由异常并且默认路由另有说明 - 这段信息存储在哪里?

答案1

好吧,经过多次挖掘,我想我已经有了答案:

A1:从 3.6 开始,不再可能列出整个路由缓存。您可以查看特定 IP 使用的路由缓存,ip route get to A.B.C.D但无法列出所有这些。

A2:ip route flush cache to A.B.C.D从路由缓存中删除单个条目。

A3:啊,本来可以知道:因为它首先查阅路由缓存,又名 FIB(转发信息库)并且它查看路由表。
这个PDF以获得详细图表。

答案2

哈哈死灵。我发帖是因为我遇到了 FIB 干扰路由表中新条目的路由问题。可能无法一一列出全部路线......但你可以做一个像样的查找: ip 路由获取命令

这将向您显示是否有 FIB 路由正在运行。此外,您还可以使用: ip 路由匹配命令

在我的一生中,我找不到一种方法来显示整个 FIB 或以任何方式操纵它。我确信如果我弹回界面,它就会消失,但这有点痛苦,并且可能不匹配所有用例。

相关内容