当前位置:首页 > 巧用iptables用户自定义链和MTU匹配方式的总结
一.巧妙使用用户自定链
为了减少“无效匹配”次数,除了可以调整防火墙的规则顺序外,还有一个法宝就是使用用户自定义链。不过,在使用用户自定义链之前,我们必须先想好如何分类这些规则才能达到最精简的效果。比如,可以根据“上层协议”来区分,也可以根据“应用层协议”区分,也可以根据ip来划分,总之没有一定的标准,也没有永远正确的答案,只要能够让整个防火墙的无效匹配次数降到最低,那就是我们所需要的。
在多wan代码中,我们所加的规则有智能负载均衡和连接跟踪的,如下所示 智能负载均衡规则:
doSystemCmd(\
doSystemCmd(\doSystemCmd(\doSystemCmd(\
doSystemCmd(\doSystemCmd(\
doSystemCmd(\doSystemCmd(\doSystemCmd(\
doSystemCmd(\
doSystemCmd(\-t mangle -A Xrate -i %s -j RATEEST --rateest-name RATE_ETH0 --rateest-interval 500ms --rateest-ewma 1s\
doSystemCmd(\-t mangle -A Xrate -i %s -j RATEEST --rateest-name RATE_ETH1 --rateest-interval 500ms --rateest-ewma 1s\
doSystemCmd(\-t mangle -A Xuprate -o %s -j RATEEST --rateest-name RATE_ETH2 --rateest-interval 500ms --rateest-ewma 1s\
doSystemCmd(\-t mangle -A Xuprate -o %s -j RATEEST --rateest-name RATE_ETH3 --rateest-interval 500ms --rateest-ewma 1s\
doSystemCmd(\--rateest1 RATE_ETH0 --rateest-bps1 %dmbit --rateest-gt --rateest2 RATE_ETH1 --rateest-bps2 %dmbit -j MARK --set-mark 0x10\wan_scole[0], wan_scole[1]);
doSystemCmd(\--rateest1 RATE_ETH1 --rateest-bps1 %dmbit --rateest-gt --rateest2 RATE_ETH0 --rateest-bps2 %dmbit -j MARK --set-mark 0x20\wan_scole[1], wan_scole[0]);
doSystemCmd(\--rateest1 RATE_ETH2 --rateest-bps1 %dkbit --rateest-gt --rateest2 RATE_ETH3 --rateest-bps2 %dkbit -j MARK --set-mark 0x10\wan_uprate[0], wan_uprate[1]);
doSystemCmd(\--rateest1 RATE_ETH3 --rateest-bps1 %dkbit --rateest-gt --rateest2 RATE_ETH2 --rateest-bps2 %dkbit -j MARK --set-mark 0x20\wan_uprate[1], wan_uprate[0]);
由上面的规则我们可以看出我们定义了两条用户自定义链Xrate和Xuprate。Xrate链用来监控下行流量和根据流量比例的使用情况选路来打mark的规则,而Xuprante链用来监控上行流量。我们可以看出无论来自哪个方向的数据包都要匹配这些规则,比如Xuprate链是用来监控wan1和wan2口出去的数据包,所以从wan1和wan2进来的数据包则不需要匹配这些规则。而Xrate链的前两条规则是用来监控下行流量的,同理从wan1和wan2出去的数据包就不需要匹配这些规则。同样我们可以看出Xrate链的后四条规则是用来选路打mark的,所以从wan1和wan2进来的数据包也不需要去匹配这些规则。
综上所述,我们可以采取接口匹配方式来处理这些用户自定义链。比如我们可以把Xrate链的前两条和后四条分开,把前两条提出来放在另一条自定义链Xdownrate中,我们可以这样改写规则:
doSystemCmd(\
doSystemCmd(\ -i lan1 -j Xrate\
doSystemCmd(\
doSystemCmd(\ -i ! lan1 -j Xuprate\
同理在Xuparte也一样
doSystemCmd(\
doSystemCmd(\–i lan1 -j Xuprate\
这样我们就达到了我们降低防火墙的规则无效匹配次数了。而在UGW2.0中并没有作这样的处理,我改了一下规则用IxChariot跑吞吐量时上升了2M左右,我们还可以优化Mark策略打的规则,具体实现我想在UGW3.0中设计出来,当然改变规则前提是不响其他模块的功能。 如果做了四wan那么数据包匹配的规则将更多,所以改变势在必行。
二.使用MTU匹配方式提升小包转发率
Length是由xt_length.ko模块所提供的功能,其匹配参数有以下四种。 [!]--length 100 MTU=100 [!]--length :100 MTU<100
[!]--length 50:100 50 我们可以在防火墙的规则中加一条MTU<256的快速通过防火墙,让他尽量少匹配规则,或者可以采取mark路由方式提升其路由优先级。
共分享92篇相关文档