我有一个测试设置,其中一个网络(10.1.0.0/16)上的一台主机通过 TCP 与另一个网络(10.2.0.0/16)上的另一台主机通信,中间有一个网关。
有时,TCP 连接会丢失,在扫描跟踪(pcap)时,我看起来好像这是因为网关在某个时刻向 10.1.0.1 发送了一个 ICMP 主机不可达消息。然后,10.1.0.1 向 10.2.0.1 发送 TCP RST。
在我看来,网关(pfSense)已损坏或配置不正确,但无论如何,出于测试目的,我想在主机(10.1.0.1)上阻止这种 ICMP,以免它对我的 TCP 连接产生影响(或者会吗?我甚至不确定)。
我已经尝试过 iptables:
iptables -I INPUT -i eth0 -p icmp --icmp-type host-unreachable -j DROP
但是,虽然它可以很好地阻止 ping 等用户空间应用程序接收这些 ICMP 消息,但当网关发送所谓的“杀手 ICMP 数据包”时,我的 TCP 连接仍然会结束。
我对它的处理方式是否正确?如果正确,那么我该怎么做才能实现我的目标?
答案1
您错误地认为 ICMP 消息是导致问题的原因。相反,ICMP 消息正在帮助您诊断问题。
RST 才是真正的根本原因。您可以提供有关有问题的 TCP 连接的更多详细信息,以查明问题的根源。