Mangle 分类标记介绍

mangle 允许对 IP 数据包做特殊的标记, mangle 是通过修改指定的 IP 数据包头字段,去标记 IP 数据包的特征 能标记端口、 IP、协议、 TCP 协议和相应的 IP 数据流。 Mangle 属于综合性功能,所以在路由、流量控制和其他相应功能中都会涉及到。

需要功能包: system
需要等级: Level1
操作路径: /ip firewall mangle
协议标准: IP

Mangle 介绍

Mangle 是一种标记器,标记特殊的数据包等待将来处理。在 RouterOS 中许多其他的功能组件会使用到他,如queue-trees 和 nat,他们识别到一个数据包了标记的便会做相应的处理。 Mangle 标记仅存在于该路由器中,他们无法传输到网络中去。 根据数据传输方式不同可以选择:

  • Prerouting:路由前,常用于标记策略和端口路由
  • Input:进入路由器的数据
  • Foreward:通过路由转发,用于修改 TTL、 TCP-MSS 和流量控制规则
  • Output:数据输出
  • Prostrouting:路由后

RouterOS 中的 IP firewall 主要由 3 个规则部分组成 Mangle、 Filter、 NAT ,而 Address-list 常用于地址列表分类。 Mangle 通过标记特定的 IP 数据流后,为 Filter、 NAT 和、路由、 Queue 提供标记后的 IP 数据流

标记 IP 数据流的三种类型,这三种类型会在各种应用中多次出现,特别是 Queue 的流量控制和 ip route 的路由:

  • Mark-connection:标记所有 IP 流的连接
  • Mark-packet:标记 IP 流中数据包
  • Mark-routing:标记 IP 流中 IP 数据包的路由信息

三种类型的关系,所有的在 IP 数据包传输前,首先需要通过建立 TCP/UDP 连接,进行传输。所以当数据通过 IP 流进入 Mangle 后,建立相应的连接标记,并从连接标记中提取数据包,做处理。图示如下:

Mangle 应用

Peer-to-Peer 传输标记

保证优质的网络连接,如 VoIP 和 HTTP 等为最优先级,将 P2P 的优先级设置为最低 RouterOS QOS 操作首先使用 mangle 标记不同类型的传输,然后把它们放入的 queues 做不同的限制。下面的事例是强迫 P2P 的总的传输不能超过 1Mbps,其他的传输连接则扩大连接带宽和优先级:

1
2
3
4
5
6
7
8
9
10
11
12
13
[admin@MikroTik] > /ip firewall mangle add chain=forward p2p=all-p2p action=mark-connection new-connection-mark=p2p_conn
[admin@MikroTik] > /ip firewall mangle add chain=forward connection-mark=p2p_conn action=mark-packet new-packet-mark=p2p
[admin@MikroTik] > /ip firewall mangle add chain=forward packet-mark=!p2p_conn action=mark-packet new-packet-mark=other
[admin@MikroTik] > /ip firewall mangle print
Flags: X - disabled, I - invalid, D - dynamic
0 chain=forward p2p=all-p2p action=mark-connection new-connection-mark=p2p_conn
1 chain=forward connection-mark=p2p_conn action=mark-packet new-packet-mark=p2p
2 chain=forward packet-mark=!p2p_conn action=mark-packet new-packet-mark=other
[admin@MikroTik] >
[admin@MikroTik] > /queue tree add parent=Public packet-mark=p2p limit-at=1000000 max-limit=100000000 priority=8
[admin@MikroTik] > /queue tree add parent=Local packet-mark=p2p limit-at=1000000 max-limit=100000000 priority=8
[admin@MikroTik] > /queue tree add parent=Public packet-mark=other limit-at=1000000 max-limit=100000000 priority=1
[admin@MikroTik] > /queue tree add parent=Local packet-mark=other limit-at=1000000 max-limit=100000000 priority=1

Mangle 限制 2 级代理

通过 mangle 限制 2 级代理, 思路是修改 TTL 值,让路由级数减少, 但对端口的 http 代理无效,进入 forward链表指定 in-interface 或者指定目标数据到内往的 IP 地址,即 dst-address 或 dst-address-list 等参数来修改到达目标的 TTL 值为 1

1
2
3
4
[admin@MikroTik] /ip firewall mangle> add chain=forward out-interface=lan action=change-ttl new-ttl=set:1
[admin@MikroTik] /ip firewall mangle>print chain=forward
Flags: X - disabled, I - invalid, D - dynamic
8 chain=forward action=change-ttl new-ttl=set:1 out-interface=lan