我正在使用Linux作为路由器。
机器有两个网卡。 这个路由器将被用于实验,所以我已经设置了其中一个接口,使MTU低于标准(为了争论起见,我们决定MTU已经被设置为200)。
现在,大多数路由器(或者也许是所有的路由器)都能够决定是否分割超过MTU的IP数据包。
我想在我的Linux机器上有相同的行为 – 我不希望数据包被分割。 过大的数据包应该被丢弃。 如果DF标志打开,我想接口返回一个ICMP信息(“packet to big。DF set to 1”)
如何才能做到这一点?
如果DF位被设置,那么路由器(这里的路由器是将数据包从一个接口路由到另一个接口的任何设备)将不会被分割。 这是允许主机设置DF位的目的,因为您不需要分段。
无论如何,如果一台路由器将一个具有DF位的数据包分段,那么它就不符合RFC标准。 而不是发送ICMP不可达消息是另一回事。
通常情况下,您需要这种行为,因为它允许PMTU发现,但是很多人在害怕DoS攻击时将其禁用,因此会耗尽路由器资源以生成足够数据包的消息。
所以现在回到你真正的问题哈哈,对不起,如果这是你已经知道的东西。 iptables有能力根据数据包大小下降。 如果你不想发送那些ICMP不可达消息,那么你也可以使用iptables。
http://www.linuxtopia.org/Linux_Firewall_iptables/x2682.html