yiwuyun 发表于 2010-3-22 16:10:19

对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]
查看完整版本: 对passthrough和nth的理解