RouterOS 家用 QoS(网页优先)配置实战
MikroTik 家用(300M 下行 / 50M 上行)
透明代理 + ACK/DNS/小包优先 —— 最终模板
目标:上传打满不拖慢交互,CPU 省、规则不打架、长期稳定
一、设计原则(先记住这 5 条)
- 只标一次:所有
mark-packet都带packet-mark=no-mark - 命中即停:所有
mark-packet用passthrough=no - 优先级只在 UPLOAD 树里竞争
- ACK 只抓“纯 ACK”
- UPLOAD = 真实上行的 90%
二、mangle 规则模板(顺序即优先级)
统一在
chain=forward,只做 LAN → WAN
路由/代理相关(已有,略)
DNS(UDP)
add chain=forward action=mark-packet new-packet-mark=dns_pkt passthrough=no
protocol=udp dst-port=53 in-interface-list=LAN out-interface-list=WAN
packet-mark=no-mark comment="DNS high prio (LAN->WAN)"
DNS TCP在透明代理下可禁用(你已确认)
TCP ACK(纯 ACK-only)
add chain=forward action=mark-packet new-packet-mark=ack_pkt passthrough=no
protocol=tcp tcp-flags=ack,!syn,!fin,!rst,!psh
in-interface-list=LAN out-interface-list=WAN packet-mark=no-mark
comment="TCP ACK top prio (LAN->WAN)"
小包(兜底前的交互优化)
add chain=forward action=mark-packet new-packet-mark=small_pkt passthrough=no
packet-size=0-512 in-interface-list=LAN out-interface-list=WAN
packet-mark=no-mark comment="Small packet prio (LAN->WAN)"
大 UDP(明确降级)
add chain=forward action=mark-packet new-packet-mark=big_pkt passthrough=no
protocol=udp packet-size=1400-1500 in-interface-list=LAN out-interface-list=WAN
packet-mark=no-mark comment="BIG UDP large packets (LAN->WAN)"
Web 连接 / 包
add chain=forward action=mark-connection new-connection-mark=web_conn passthrough=yes
protocol=tcp dst-port=80,443 in-interface-list=LAN out-interface-list=WAN
connection-mark=no-mark packet-mark=no-mark comment="WEB conn (LAN->WAN)"
add chain=forward action=mark-packet new-packet-mark=web_pkt passthrough=no
connection-mark=web_conn in-interface-list=LAN out-interface-list=WAN
packet-mark=no-mark comment="WEB pkt (LAN->WAN)"
大流量 TCP(下载/大文件)
add chain=forward action=mark-connection new-connection-mark=big_conn passthrough=yes
protocol=tcp connection-bytes=5000000-0
in-interface-list=LAN out-interface-list=WAN
connection-mark=no-mark comment="BIG conn (LAN->WAN)"
add chain=forward action=mark-packet new-packet-mark=big_pkt passthrough=no
connection-mark=big_conn in-interface-list=LAN out-interface-list=WAN
packet-mark=no-mark comment="BIG pkt (LAN->WAN)"
OTHER(最终兜底)
add chain=forward action=mark-packet new-packet-mark=other_pkt passthrough=no
connection-mark=!web_conn,!big_conn
in-interface-list=LAN out-interface-list=WAN packet-mark=no-mark
comment="OTHER pkt (LAN->WAN)"
三、Queue Tree 模板(只做 UPLOAD)
UPLOAD 父队列(关键)
add name=UPLOAD parent=pppoe-out1 max-limit=45M queue=pcq-upload
45M = 50M × 0.9(你已验证最稳)
子队列优先级(固定梯度)
add name=ACK parent=UPLOAD packet-mark=ack_pkt priority=1 queue=pcq-upload
add name=DNS parent=UPLOAD packet-mark=dns_pkt priority=2 queue=pcq-upload
add name=SMALL parent=UPLOAD packet-mark=small_pkt priority=4 queue=pcq-upload
add name=WEB parent=UPLOAD packet-mark=web_pkt priority=5 queue=pcq-upload
add name=OTHER parent=UPLOAD packet-mark=other_pkt priority=6 queue=pcq-upload
add name=BIG parent=UPLOAD packet-mark=big_pkt priority=8 queue=pcq-upload
不需要限速子队列,只靠 priority 排队即可。
四、健康检查(以后只看这 4 条)
CPU
/tool profile
- firewall + queuing <15%:健康
队列是否堆积
/queue tree print stats where name="UPLOAD"
queued=0 / dropped=0:理想
ACK 是否在跑
/queue tree print stats where name="ACK"
- packets 在涨、queued=0:正常
真实体验验证
- 上传打满 + 打开网页 / 视频 / SSH
- RTT 不暴涨:成功
五、迁移/备份清单(强烈建议保存)
导出配置(文本)
/export file=final-qos
记录 3 个关键值
- 上行最差值:50M
- UPLOAD max-limit:45M
- ACK 规则:ack,!syn,!fin,!rst,!psh
换设备时只需要改的 2 处
parent=pppoe-out1→ 新设备的 WAN 接口名- UPLOAD 的
max-limit→ 新线路上行 × 0.9
六、什么时候才“需要再动它”
- 上行 ≥ 100M
- CPU 长期 >70%
- 引入 大量 UDP / QUIC
- 多 WAN / VPN 大流量
否则:不用再改。
RouterOS QoS 核心概念:什么是 New Packet Mark?
New Packet Mark 的作用是:
给单个数据包贴一个内部标签, 让后面的 Queue Tree / Queue 能“认出来、区别对待”。
它本身:
- 不限速
- 不丢包
- 不决定优先级
它只是一个 分类标签(classification tag)。
一、先分清:RouterOS 里的三种「标记」
理解 New Packet Mark 之前,必须先知道 RouterOS 并不只有一种“标记”。
| 标记类型 | mangle 选项 | 标记对象 | 主要用途 |
|---|---|---|---|
| Connection Mark | new-connection-mark | 一个连接(五元组) | 判断“这条连接是什么类型” |
| Packet Mark | new-packet-mark | 每一个数据包 | QoS / Queue Tree |
| Routing Mark | new-routing-mark | 路由决策 | 策略路由 |
本文讨论的就是 第二种:Packet Mark。
二、什么是 Packet(数据包)?
这是 QoS 里一个非常容易被忽略、但极其重要的概念。
一个“网页请求”:
- 不是一个包
- 甚至不是几个包
真实情况是:
- 一个 TCP 连接
- 里面包含 成百上千个数据包
- 每个包:
- 大小不同
- 方向不同
- 到达时间不同
关键事实:
Queue Tree 只能处理“包” 它根本看不到“连接”
因此结论非常明确:
想让 QoS 生效,必须使用 Packet Mark。
三、New Packet Mark 在 mangle 中到底做了什么?
一条典型规则:
action=mark-packet new-packet-mark=web_pkt
它的真实含义等价于:
“凡是匹配到这条规则的每一个数据包, 都在 RouterOS 内部标记为:
web_pkt”
之后:
- Queue Tree
- Simple Queue(部分场景)
- Torch / 统计信息
都可以根据这个标记对流量进行分类处理。
四、为什么不能只用 Connection Mark?
在标准 QoS 配置中,通常是两步走:
# 第一步:判断“这是什么连接”
action=mark-connection new-connection-mark=web_conn
# 第二步:给这个连接里的每个包打标
action=mark-packet new-packet-mark=web_pkt
原因在于两种标记的职责不同:
Connection Mark:
- 只在连接建立时标一次
- CPU 开销小
- 适合做复杂判断 (端口、协议、连接字节数等)
Packet Mark:
- 每一个包都会被打标
- Queue Tree 只能识别它
- 用于精确调度
这是 RouterOS 官方和社区长期验证过的标准写法。
五、passthrough=no 和 Packet Mark 的关系
你在规则中使用了:
passthrough=no
它的含义是:
一个包一旦被打上这个
packet-mark, 后续的 mangle 规则将不再处理这个包。
这样做的目的只有一个:
- 防止同一个包被多次打不同的 packet-mark
- 保证:一个包 → 只进入一个队列
如果没有这一步,QoS 行为会变得不可预测。
六、为什么 Queue Tree 只认 Packet Mark?
Queue Tree 的核心匹配条件是:
packet-mark=web_pkt
它的逻辑非常“死板”:
“我只接收 packet-mark = web_pkt 的包”
Queue Tree 完全不关心:
- 端口
- IP
- 连接状态
- connection-mark
所有复杂判断,必须在 mangle 阶段提前完成。
七、结合「网页优先 QoS」走一遍完整流程
以“打开网页”为例:
浏览器发起 TCP SYN
→ mangle 命中 80/443
→ 连接被标记为 web_conn
后续网页数据包
→ 根据 connection-mark=web_conn
→ 每个包被标记为 web_pkt
包进入 Queue Tree → 命中:
packet-mark=web_pkt
priority=2
同时存在的下载 / 视频包 → priority=8 → 被高优先级网页包插队
最终效果:网页始终流畅
八、常见误解澄清
New Packet Mark = 限速 不是。 限速只发生在 Queue / Queue Tree。
New Packet Mark 会改变包内容 不会。 它只是 RouterOS 内部的逻辑标签。
一个包可以有多个 packet-mark
不可以。
后打的会覆盖前一个,所以必须合理使用 passthrough=no。
九、一句话终极记忆
Connection Mark:这是哪一条路 Packet Mark:这是哪一辆车 Queue Tree:哪条道先走