iptables中的mark
在vtun配置的mangle链中有一条规则
-A AS0_MANGLE_TUN -j MARK --set-xmark 0x2000000/0xffffffff
下面分析mark何意。
mark值有何意义
mark字段的值是一个无符号的整数,在32位系统上最大可以是4294967296(就是2的32次方),这足够用的了。比如,我们对一个流或从某台机子发出的所有的包设置了mark值,就可以利用高级路由功能来对它们进行流量控制等操作了。
mark值不是包本身的一部分,而是在包穿越计算机的过程中由内核分配的和它相关联的一个字段。它可能被用来改变包的传输路径或过滤。mark值只在本机有意义!
在本机给包设置关联的mark值后,可通过该值对包后续的传输进行控制(排队,流量控制等)。
如何设置mark
在http://hi.baidu.com/zmhabc/item/04112b2f68f90c99b6326369这篇文章中对mark的介绍比较详细。
例子:
iptables -t mangle -A PREROUTING -p tcp --dport 22 -j MARK --set-mark 2
如何匹配mark
iptables -t mangle -A INPUT -m mark --mark 1
-m 即match匹配的意思。
mark的格式是--mark value[/mask],如上面的例子是没有掩码的,带掩码的例子如--mark 1/1。如果指定了掩码,就先把mark值和掩码取逻辑与,然后再和包的mark值比较。