使用 Mikrotik 路由器(嵌入式 Linux 的形式),我为每台机器创建了与源 IP 地址匹配的简单队列。
4 个机器队列中的每一个对于 Tx/Rx 都有无限突发 3Mbps/3Mbps。
在所有 4 台机器上同时进行 speedtest.net 测试时,每台机器都显示 3Mbps(并且在那里正确限制),但是上行链路上的总带宽达到 12Mbps(我需要将上行链路的最大带宽设置为 10Mbps)。
我想将通过上行链路端口的实际流量限制为 10Mbps,而不管其他队列在做什么(我需要这个捕获所有队列对上行链路速度有最终决定权)。
例如我需要:
场景 A
- 机器 A 以 3Mbps 的速度传输
- 机器 B 的传输速度为 3Mbps
- 机器 C 以 3Mbps 的速度传输
- 机器 D 以 0Mbps 的速度传输,上行速度 = 9Mbps
场景 B
- 机器 A 尝试以 3Mbps 的速度传输
- 机器 B 尝试以 3Mbps 的速度传输
- 机器 C 尝试以 3Mbps 的速度传输
- 机器 D 尝试以 3Mbps 的速度传输
- 上行速度 = 10Mbps
- 机器A、B、C、D的实际传输速度=2.5Mbps
这是为了允许带宽队列稍微超额订阅,因为并非所有队列都始终以 3Mbps 的速度传输。
这是可能的吗?如果可以,该如何做呢?
答案1
您可能不想使用简单队列,而是想使用队列树。请参阅:http://wiki.mikrotik.com/wiki/Manual:Queue#Queue_Tree
简而言之,您需要一个用于上传的顶级队列和一个用于下载的单独队列,因此请在每个方向上重复此操作,并根据需要将源地址更改为目标地址。
创建一个最大速率为 10Mbps 的队列:
/queue tree add name=all_up limit-at=10M parent=machine_ingress_interface
使用数据包标记按源或目标 IP 标记每个数据包。例如,来自机器 A 的流量被标记为 machine_a_up:
/ip firewall mangle add action=mark chain=prerouting new-packet-mark=machine_a_up src-address=192.168.1.2
创建一个队列来对标有指定父队列的流量进行整形:
/queue tree add name=machine_a_up packet-mark=machine_a_up parent=all_up
或者,查看 PCQ.它也许能用较少的工作完成你想要做的事情。