在最近的内核中,某些 ICMP-Reply 消息不会到达用户空间

在最近的内核中,某些 ICMP-Reply 消息不会到达用户空间

我正在将应用程序从 2.6.23(是的,它很古老;这就是我们迁移的原因)迁移到 3.18LTS。该应用程序使用 ping 数据包监视到同一目标的多个网络链接。不同的链路由下一跳路由器(以太网)或网络接口(点对点链路,又称蜂窝数据)选择。为了强制不同的路由到达同一目标,传出数据包会被标记不同的防火墙标记。然后,我使用路由规则为同一目标选择具有不同路由的不同路由表。传出路径在 2.6.23 和 3.18 中都工作得很好。然而,对于传入的 ICMP 回复来说情况并非如此。他们正在到来;我用 tcpdump 看到它们。但在 3.18 中,某些数据包不会传递到用户空间。我不是 100% 确定,但我认为如果没有到 ping 目标的“正常”路由(例如 ICMP 回复的源地址),就会发生这种情况。这看起来像是某种误导性的入口过滤,如果正常的路由查找失败,就会将数据包排除在外。

我走在正确的轨道上吗?如果是这样,有没有办法禁用此过滤?如果不是,什么可能导致这种行为改变?

答案1

好吧,我自己找到了。

答案是/proc/sys/net/ipv4/conf/*/rp_filter。该选项记录在Linux基金会。虽然这是一个旧的设置,但 Ubuntu 似乎在 07.04 和 14.04 之间的某个时间更改了默认值。将值从 1 改回 0 解决了我的问题。

相关内容