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值比较。

原文地址:https://www.cnblogs.com/helloweworld/p/2716944.html