Networking ICMP数据包可以';不可转发

Networking ICMP数据包可以';不可转发,networking,routing,forwarding,Networking,Routing,Forwarding,机器A 10.167.27.10 道路上的路线类似于: 0.0.0.0 10.167.27.1 0.0.0.0 UG 0 0 0 eth0 10.167.28.20 10.167.27.11 255.255.255.255 UGH 0 0 0 eth0 10.167.27.0 0.0.0.0 255.255.255.0 U 0 0

机器A 10.167.27.10 道路上的路线类似于:

0.0.0.0         10.167.27.1     0.0.0.0         UG    0      0        0 eth0
10.167.28.20    10.167.27.11    255.255.255.255 UGH   0      0        0 eth0
10.167.27.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
default         10.167.27.1     0.0.0.0         UG    0      0        0 eth0
10.167.27.0     *               255.255.255.0   U     0      0        0 eth0
机器B 10.167.27.11 B上的路线类似于:

0.0.0.0         10.167.27.1     0.0.0.0         UG    0      0        0 eth0
10.167.28.20    10.167.27.11    255.255.255.255 UGH   0      0        0 eth0
10.167.27.0     0.0.0.0         255.255.255.0   U     0      0        0 eth0
default         10.167.27.1     0.0.0.0         UG    0      0        0 eth0
10.167.27.0     *               255.255.255.0   U     0      0        0 eth0
ip_转发和接受_重定向在B上设置为1

机器C是10.167.28.20。我可以从B中选择C。 因为C有一个路由,使用B作为a上的网关,所以我想如果我从a ping C,我会得到ICMP重定向消息。但事实上我没有得到任何答复

我在B上的eth0上使用tcpdump,看到ICMP到达。但为什么没有转发

更新:


在B上,我使用Netfilter钩子函数在处理ICMP数据包时输出日志。我添加到前钩点的日志已打印,路由结果正确。但是,没有打印POST路由挂钩点处的日志。我很困惑…

机器C知道如何回复邮件吗? 机器A知道如何到达C(这就是为什么您看到IMCP到达B),但如果设备C不知道如何到达A,它将不会响应A(ping将失败)

尝试从C ping A。如果失败,请在设备C中添加到机器A的路由

希望这有帮助

编辑 这是你的拓扑,对吗


由于B连接到所有其他设备,它将知道如何到达它们。您只需在B上启用转发,并将A和C的默认网关定义为B。

我尝试从C ping A。我发现ICMP数据包已到达A,A生成了回复,然后将它们转发给B,而B从未返回到C。事实上,A和C可以在没有B的情况下相互ping。我使用B只是尝试IP转发……所以当我ping A时从C开始,ICMP数据包没有通过B。我想问题可能出在B上。谢谢您的进一步回答。我通过将ip_forward设置为1启用了B上的转发,并且a和C上有一条路由将B定义为网关。(虽然不是默认网关,但我认为它也应该工作。)我已经更新了我的描述。数据包已通过转发时的钩子函数,但未到达后路由。您可以共享NETFILTER配置吗?您是指iptables中的规则吗?我已经使用“iptables-F”删除了所有规则,因此它是空的。