RouterOS 限速配置实战:按 IP 和按协议两种思路

发布于2026-09-17 10:29 阅读11次 宿舍或小型办公室里,总有人下载把整条带宽占满,其他人连网页都打不开。这篇记录我在 RouterOS 上做限速的两种思路:简单队列按 IP 均分带宽,以及用队列树按协议优先级调度,包含具体配置命令、效果实测和几个关键参数说明,适合需要对内网带宽做管控的场景参考。
# 一、需求场景
一个十来人的小网络,只要有人开下载,其他人就卡得不行。目标很简单:**保证每个人有基础带宽,同时不让单台设备吃满整条线**。
下面是两种方案,从简单到复杂,按需选用。
# 二、方案一:简单队列按 IP 限速
最直接的做法,给每个内网 IP 单独设上下行上限:
```routeros
/queue simple add name=pc-101 \
target=192.168.88.101/32 \
max-limit=10M/4M comment="限速10兆"
```
参数说明:
- `max-limit` 格式是 **上传/下载**,顺序别搞反,这是最常见的错误;
- `target` 写单个 IP 要带 `/32`;
- 速度单位区分大小写,`M` 是兆比特,`m` 会被当成兆字节之外的含义。
## 批量添加的技巧
设备多的时候一条条加太慢,可以用脚本循环:
```routeros
:for i from=101 to=120 do={ \
/queue simple add name=("pc-" . $i) \
target=("192.168.88." . $i . "/32") max-limit=10M/4M }
```
# 三、方案二:队列树按优先级调度
简单队列的问题是**带宽不能共享**——别人不用时,你还是被限在 10M。想要"闲时跑满、忙时均分",就得用队列树配合标记。
## 1. 先标记流量
```routeros
/ip firewall mangle add chain=forward \
src-address=192.168.88.0/24 \
action=mark-packet new-packet-mark=lan-up passthrough=yes
/ip firewall mangle add chain=forward \
dst-address=192.168.88.0/24 \
action=mark-packet new-packet-mark=lan-down passthrough=yes
```
## 2. 建父队列限制总带宽
```routeros
/queue tree add name=total-down parent=global \
packet-mark=lan-down max-limit=100M
/queue tree add name=total-up parent=global \
packet-mark=lan-up max-limit=30M
```
## 3. 给每个 IP 建子队列并设置保障带宽
子队列里 `limit-at` 是**保证能拿到的带宽**,`max-limit` 是**上限**。别人空闲时,单个 IP 可以跑到 max-limit;大家都在用时,至少能拿到 limit-at。这就是"按需分配"的关键。
# 四、按协议区分优先级
想让网页、视频会议优先于下载,可以进一步用 mangle 标记端口或协议类型,再放到不同优先级的队列里:
- 常用网页端口优先;
- 大流量的下载类应用放低优先级;
- 实时应用(语音、会议)设最高优先级。
# 五、实测与调优
配置完用多台设备同时测速验证:
- 单台下载时能跑满上限;
- 多台同时下载时每台稳定在保障带宽附近;
- 限速状态下开网页依然流畅。
# 六、避坑清单
1. **上传下载顺序别写反**,`max-limit` 是上传在前;
2. **不要给同一 IP 重复建队列**,后加的会干扰先加的;
3. **队列顺序有影响**,父队列要建在子队列之前;
4. **限速别设太低**,否则正常网页都打不开;
5. **记得导出配置**,`/queue export file=queue-backup` 一条命令的事。
# 七、小结
人少、要求不高用简单队列就够了;想要带宽利用率更高,就上队列树。核心是理解 `limit-at`(保障)和 `max-limit`(上限)的区别,理解了这两个参数,限速配置就没什么神秘的了。