我知道这是一个常见的问题,但我已经花了两天时间来了解这个问题,仍然找不到明确的解释......
最近我买了一个 Miktotik hEX(RouterOS 6,Level 4),用作 100MBit 下行/30MBit 上行光纤连接的主路由器(速度测试显示实际为 110/33,因为我的提供商增加了 10% 的余量)。我想优先处理流量,主要是为了避免 VoIP 呼叫(通过 Twilio)出现问题。
我之前曾使用以下方法成功优化了流量火力QOS使用自定义的Linux机器(虽然不能处理超过20Mbit的速度),使用以下配置:
DEVICE=ppp0
INPUT_SPEED=20mbit
OUTPUT_SPEED=10mbit
LINKTYPE="local pppoe-llc"
interface $DEVICE world-in input rate $INPUT_SPEED
class voip commit 120kbit # https://www.twilio.com/docs/api/client/regions
match src 54.171.127.192/26 # Twilio: ie1
match src 52.215.127.0/24 # Twilio: ie1
match src 35.156.191.128/25 # Twilio: de1
match src 185.187.132.64/26 # Twilio: ie1-tnx
match udp port 5060 # SIP
match udp dports 10000:10100 # RTP
match sports 3478,5349 # STUN
class interactive commit 20%
match udp port 53 # DNS
match tcp port 22 # SSH
match icmp # ping
match tcp sports 5222,5228 # gtalk
class synacks
match tcp syn
match tcp ack
class web commit 5%
match tcp sports 80,443
class mail
match tcp sports 25,465,587
class default
interface $DEVICE world-out output rate $OUTPUT_SPEED
class voip commit 120kbit
match dst 54.171.127.192/26 # Twilio: ie1
match dst 52.215.127.0/24 # Twilio: ie1
match dst 35.156.191.128/25 # Twilio: de1
match dst 185.187.132.64/26 # Twilio: ie1-tnx
match udp port 5060 # SIP
match udp sports 10000:10100 # RTP
match dports 3478,5349 # STUN
class interactive commit 20%
match udp port 53 # DNS
match tcp port 22 # SSH
match icmp # ping
match tcp dports 5222,5228 # gtalk
class synacks commit 2%
match tcp syn
match tcp ack
class web commit 5%
match tcp dports 80,443
class mail
match tcp dports 25,465,587
class default
同时,我尝试在 RouterOS 中相应地设置数据包标记:
我想我需要在 Mikrotik 上设置队列树并为可用的上行/下行速度创建一个主队列并按一些优先级划分。
目前我不知道从哪里开始,因为我看不到为传入和传出流量创建两个不同队列的方法(因为我有不对称的带宽)。
我看到每个接口都有预定义的(父)队列,但问题是我使用 VLAN 来提供 WAN 访问三个完全独立的子网。我使用的单个物理端口是ether2-master
:
我猜测为父级创建队列ether2-master
是行不通的,因为数据包不会在该级别上被标记(对吗?),因为所有ether2-master
数据包都带有 VLAN 标记。
我希望拥有与 FireQOS 相同的 QoS,但真正重要的是 VoIP 部分。
那么,我应该如何配置队列树?
答案1
我肯定会在路由决策之前标记数据包,因此您应该在预路由而不是前向链上设置路由标记规则。
然后在全局队列下为 voip 流量添加队列并设置保证速度。
/queue tree add name="voip_in" parent=global packet-mark=VOIP_IN queue=pcq-download-default priority=1 limit-at=120k max-limit=100M
/queue tree add name="voip_out" parent=global packet-mark=VOIP_OUT queue=pcq-upload-default priority=1 limit-at=120k max-limit=30M
您还应该分别标记传入和传出流量(interactive_in、interactive_out、synacks_in、synacks_out 等)。然后您可以创建适当的队列。您无法以百分比指定分配的带宽,您必须设置位/秒值。
/queue tree add name="interactive_in" parent=global packet-mark=interactive_in queue=pcq-download-default priority=2 limit-at=20M max-limit=20M
/queue tree add name="interactive_out" parent=global packet-mark=interactive_out queue=pcq-upload-default priority=2 limit-at=6M max-limit=6M
/queue tree add name="synacks_in" parent=global packet-mark=synacks_in queue=pcq-download-default priority=3 limit-at=2M max-limit=2M
/queue tree add name="synacks_out" parent=global packet-mark=synacks_out queue=pcq-upload-default priority=3 limit-at=600k max-limit=600k
/queue tree add name="web_in" parent=global packet-mark=web_in queue=pcq-download-default priority=4 limit-at=5M max-limit=5M
/queue tree add name="web_out" parent=global packet-mark=web_out queue=pcq-upload-default priority=4 limit-at=1500k max-limit=1500k
/queue tree add name="mail_in" parent=global packet-mark=mail_in queue=pcq-download-default priority=5
/queue tree add name="mail_out" parent=global packet-mark=mail_out queue=pcq-upload-default priority=5
/queue tree add name="default" parent=global packet-mark=no-mark queue=default priority=6
请注意,优先级值并不意味着任何数据包优先级。它只是设置队列的顺序。