首页 > 解决方案 > 在链接聚合方案中禁用 IP 重组/碎片整理

问题描述

下图描述了一个网络,该网络涉及三个慢速通道吞吐量的聚合WAN。每台路由器都试图重新组装分段的 IP 数据包,这会导致数据丢失,因为这些分段采用随机路径通过三个路由器,并且通常一台路由器无法收集所有数据包分段以成功重组。

来自快速主机的 IP 流量分段并随机到达三个路由器(但始终来自54.239.98.8)。我无法控制这种碎片化(企业政治,去看看) - 我怀疑碎片化是由快速主机故意完成的。

我修改了内核模块nf_defrag_ipv4以禁用PREROUTING钩子中的有问题的碎片整理,如下所示:

static const struct nf_hook_ops ipv4_defrag_ops[] = {
    {
        .hook       = ipv4_conntrack_defrag, /* I changed this to point to: return NF_ACCEPT; */
        .pf         = NFPROTO_IPV4,
        .hooknum    = NF_INET_PRE_ROUTING,
        .priority   = NF_IP_PRI_CONNTRACK_DEFRAG,
    },
    {
        .hook       = ipv4_conntrack_defrag,
        .pf         = NFPROTO_IPV4,
        .hooknum    = NF_INET_LOCAL_OUT,
        .priority   = NF_IP_PRI_CONNTRACK_DEFRAG,
    },
};

该模块的完整源代码可以在这里查看。

有更好的解决方案吗?特别是一种仅对来自 WAN @ 上的快速主机的数据包选择性禁用 IP 碎片整理的方法ip.src == 54.239.98.8


(@)上的快速主机正在与( @ )WAN54.239.98.8的主机通信,后者通过三个慢速通道连接到运行 Linux v4.14.151 和/防火墙的三个路由器:LAN192.168.0.100WANnetfilteriptables

在此处输入图像描述

标签: clinuxiptablesnetfilterip-fragmentation

解决方案


推荐阅读