![Linux - 设置接口不分段数据包](https://linux22.com/image/600679/Linux%20-%20%E8%AE%BE%E7%BD%AE%E6%8E%A5%E5%8F%A3%E4%B8%8D%E5%88%86%E6%AE%B5%E6%95%B0%E6%8D%AE%E5%8C%85.png)
我正在使用 Linux 作为路由器。
该机器有两个网卡。此路由器将用于实验,因此我将其中一个接口的 MTU 设置为低于标准(为了便于讨论,我们假设 MTU 设置为 200)。
现在,大多数路由器(或者可能是所有路由器?)都能够决定是否对超过 MTU 的 IP 数据包进行分段。
我希望我的 Linux 机器上有同样的行为 - 我不希望数据包被碎片化。超大的数据包应该被丢弃。如果 DF 标志打开,我希望接口返回 ICMP 消息(“数据包太大。DF 设置为 1”)
如何才能做到这一点?
答案1
如果设置了 DF 位,则路由器(此处的路由器是指将数据包从一个接口路由到另一个接口的任何设备)将不会进行分段。这就是允许主机设置 DF 位的目的,因为您不希望出现分段。
无论如何,如果路由器对设置了 DF 位的数据包进行分段,则不符合 RFC 要求。是否发送 ICMP 不可达消息又是另外一回事。
通常,您需要这种行为,因为它允许 PMTU 发现,但很多人由于害怕 DoS 攻击而禁用它,耗尽路由器资源来在有足够的数据包时生成这些消息。
现在回到你真正的问题哈哈,如果这些是你已经知道的东西,抱歉。iptables 能够根据数据包大小进行丢弃。如果你不想发送那些 ICMP 不可达消息,你也可以使用 iptables 来实现这一点……
http://www.linuxtopia.org/Linux_Firewall_iptables/x2682.html