使用 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 的速度传输。
这是可能的吗?如果是这样,人们将如何去做呢?
您可能想要使用队列树,而不是使用简单的队列。请参阅:http ://wiki.mikrotik.com/wiki/Manual:Queue#Queue_Tree
简而言之,您需要一个用于上传的顶级队列和一个用于下载的单独队列,因此在每个方向将 src-address 更改为 dest-address 时复制此队列。
创建一个最大 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。它可以用更少的工作做你想做的事。