TOMMYHUANG 发表于 2012-10-13 15:57:06

关于MANGLE求解

当先标记上行,再标记下行的时候。MARK CONNECTION和MARK PACKET,所标记到的数据包基本上相等的。看图1。


如果是先标记下行,再标记上行的时候。MARK CONNECTION到MARK PACKET,所标记到到的数据包量差别很大。看图2.


mangle规则如下:
/ip firewall mangle
add action=mark-connection chain=prerouting comment="" disabled=no \
    in-interface=lan new-connection-mark=up_conn passthrough=yes
add action=mark-packet chain=prerouting comment="" connection-mark=up_conn \
    disabled=no dst-address-type=!local new-packet-mark=up passthrough=no
add action=mark-connection chain=prerouting comment="" disabled=no \
    in-interface=wan new-connection-mark=down_conn passthrough=yes \
    src-address-type=!local
add action=mark-packet chain=prerouting comment="" connection-mark=down_conn \
    disabled=no new-packet-mark=down passthrough=no

为什么会出现这种情况。

当先标记下行再标记上行的时候,如果在MACKET PACKET的时候也指定一下IN INTERFACE=WAN,那标记到的数据和MARK CONNECTION也是相等的。看图3

既然MARK CONNECTION的时候已经指定了IN INTERFACE=WAN,而在MARK PACKETR 的时候,已经指定了CONNECTION-MARK,是不是没必要再指定IN-INTERFACE.
可是为什么没指定的时候,标记到的数据又不对等。

TOMMYHUANG 发表于 2012-10-13 20:03:24

本帖最后由 TOMMYHUANG 于 2012-10-13 20:05 编辑

谢谢二楼。的确是我理解错了。
我是认为既然在连接方面已经指定了IN-INTERFACE。那么我在标记数据包的时候,又指定了CONNECTION-MARK。
也就是标记连接时候所指定的IN-INTERFACE得到了延伸。具有connection-mark的这些包应该是已经过滤了方向。

但是为什么把标记上行放在前面又不会呢。而把下行放在前在又会开成标记到的数据包差异过大。

kkwdn 发表于 2012-10-13 23:20:07

回答的很认真,给与支持

TOMMYHUANG 发表于 2012-10-14 04:11:10

不好意思。为了截图尽量小,缩小了列宽。那是DST ADDRESS TYPE/invert。指定了目标地址类型为非本地类型的IP。
嗯。看来是我忽略了。我虽然在MARK PACKET的时候没指定IN-INTELFACE,但是指定了DST ADDRESS TYPE.功能相当于指定了IN-INTERFACE.
谢谢bobwalker耐心和详细的指导。辛苦了。

dxl812334885 发表于 2012-11-29 09:41:24

bobwalker 发表于 2012-11-27 20:47 static/image/common/back.gif
不谢。做技术支持,这点耐心还是有的。

bobwalker
按照下面这样标记的话第一条标记80端口connection 第二条的mark-pack还需要再次匹配tcp 80参数吗
ip firewall mangle> add chain=prerouting protocol=tcp port=80 ac
tion=mark-connection new-connection-mark=web_con
ip firewall mangle> add chain=prerouting connection-mark=web_con
action=mark-packet new-packet-mark=web
页: [1]
查看完整版本: 关于MANGLE求解