对passthrough和nth的理解
本人对passthrough和nth的理解,如有不对,请高手指正。关于passthrough的应用。
1、在passthrough属性不起作用的情形下,包不论是否匹配,都要进行本链中下一规则的检查。
2、在passthrough属性起作用的情形下,将按如下考虑:
包如果匹配本规则,是否再接受本规则之后的规则的检验是由passthrough的值决定的。
passthrough="no": 匹配本规则之后,包不再接受本链中该规则之后的规则的检查或改变。
passthrough="yes":匹配本规则之后,包仍需接受本链中该规则之后的规则的检查或改变。
注:如果上面的情形为passthrough="no",就相当于执行action:accept。也即
(1)如果该规则在prerouting中,则直接进入路由策略(Routing decision)中。
(2)如果该规则在input中,则直接进入本地进程的处理中。
(3)如果该规则在forward中,则将进入postrouting中。
(4)如果该规则在output中,则将进入路由策略(Routing decision)中。
(5)如果该规则在postrouting中,则直接进入接口队列中(interface queue)。
3、作为mangle中属性的passthrough仅在mangle中的action:mark-connection,mark-packet,mark-routing中生效。
4、作为mangle中action的passthrough只是简单的忽略本规则,而过渡到下一规则。因为不管它是否符合本规则,
它都会过渡到本链中的下一规则。
第一种:
nth:(3,1)passthrough="yes"
(3,2)passthrough="yes"
(3,3)passthrough="yes"
第二种:
nth: (3,1)passthrough="no"
(2,1)passthrough="no"
(1,1)passthrough="no"
注: 新版本隐藏了计数器counter。counter自动计数,不需人为干预,这减少了复杂性。
上面的两种方式等价。
nth=(every,packet)每条规则都有一个counter。且每个counter=0且是隐藏的。
当每条规则接受到包(或包经过该规则)的时候,该规则隐藏的counter增1,如果counter=packet,则规则匹配,并
执行相应的行为;否则不匹配。
对于任何一条规则中隐藏的counter,如果counter=every,则counter=0(复位为0)
当把上面的应用到第一,第二种时,就有上面的结果。
页:
[1]