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以获得详细图表。