Вот упрощённый скрипт (8 очередей вместо 64) для настройки базовых DSCP и QoS. Просто укажи имя твоего WAN-интерфейса и скорость загрузки WAN. Он создаст очередь и правила маркировки, чтобы тебе было с чего начать.
#Укажи интерфейс здесь
:local outboundInterface "wan0"
#Укажи пропускную способность интерфейса (не забывай, это для исходящего трафика)
:local interfaceBandwidth 4M
#Укажи, где в цепочке пакеты будут маркироваться
:local mangleChain postrouting
#Не трогай это. Здесь задаются параметры для последующих действий
:local queueName ("QoS_" . $outboundInterface)
:local qosClasses [:toarray "Network Control,Internetwork Control,Critical,Flash Override,Flash,Immedate,Priority,Routine"]
/ip firewall mangle add action=set-priority \
chain=postrouting new-priority=from-dscp-high-3-bits \
passthrough=yes comment="Учитывать DSCP-теги"
/ip firewall mangle add action=set-priority \
chain=postrouting new-priority=2 packet-size=0-123 \
passthrough=yes protocol=tcp tcp-flags=ack comment="Приоритет для ACK"
/ip firewall mangle add action=set-priority \
chain=postrouting priority=0 dscp=0 new-priority=8 \
passthrough=yes comment="Приоритет 8 для пакетов без метки"
:for indexA from 0 to 7 do={
/ip firewall mangle add action=mark-packet chain=$mangleChain comment=("pri_" . $indexA+1) \
disabled=no priority=($indexA+1) new-packet-mark=("priority_" . $indexA+1) passthrough=no
}
/queue tree add max-limit=$interfaceBandwidth name=$queueName parent=$outboundInterface priority=1
:for indexA from=0 to=7 do={
:local subClass ([:pick $qosClasses $indexA] )
/queue tree add \
name=($indexA+1 . ". " . $subClass . " - " . $outboundInterface ) \
parent=$queueName \
priority=($indexA+1) \
queue=ethernet-default \
packet-mark=("priority_" . $indexA+1) \
comment=("Трафик с приоритетом " . $indexA+1)
}
#Укажи интерфейс здесь
:local outboundInterface "wan0"
#Укажи пропускную способность интерфейса (не забывай, это для исходящего трафика)
:local interfaceBandwidth 4M
#Укажи, где в цепочке пакеты будут маркироваться
:local mangleChain postrouting
#Не трогай это. Здесь задаются параметры для последующих действий
:local queueName ("QoS_" . $outboundInterface)
:local qosClasses [:toarray "Network Control,Internetwork Control,Critical,Flash Override,Flash,Immedate,Priority,Routine"]
/ip firewall mangle add action=set-priority \
chain=postrouting new-priority=from-dscp-high-3-bits \
passthrough=yes comment="Учитывать DSCP-теги"
/ip firewall mangle add action=set-priority \
chain=postrouting new-priority=2 packet-size=0-123 \
passthrough=yes protocol=tcp tcp-flags=ack comment="Приоритет для ACK"
/ip firewall mangle add action=set-priority \
chain=postrouting priority=0 dscp=0 new-priority=8 \
passthrough=yes comment="Приоритет 8 для пакетов без метки"
:for indexA from 0 to 7 do={
/ip firewall mangle add action=mark-packet chain=$mangleChain comment=("pri_" . $indexA+1) \
disabled=no priority=($indexA+1) new-packet-mark=("priority_" . $indexA+1) passthrough=no
}
/queue tree add max-limit=$interfaceBandwidth name=$queueName parent=$outboundInterface priority=1
:for indexA from=0 to=7 do={
:local subClass ([:pick $qosClasses $indexA] )
/queue tree add \
name=($indexA+1 . ". " . $subClass . " - " . $outboundInterface ) \
parent=$queueName \
priority=($indexA+1) \
queue=ethernet-default \
packet-mark=("priority_" . $indexA+1) \
comment=("Трафик с приоритетом " . $indexA+1)
}
