![]() | 1 | изначальная версия редактировать | |
Шейпинг трафика VOIP
Приведу простой пример ограничения входящего трафика.
В Интернете много примеров. Я приведу действующий
скрипт для небольшой фирмы у которой сервер VOIP
и шлюз в Интернет один и тот же физический сервер. eth0 - смотрит в локальную сеть
eth1 - смотрит в Интернет (входящая скорость 7Мбит от провайдера)
Ограничивать будем на eth0, т.к. ограничивать возможно
только исходящий трафик. Разобьем трафик на 3 части
Итак непосредственно пример:
#!/bin/sh
TCOP="add"
IPTOP="-A"
IF=eth0
if [ "$1" == "stop" ]; then
echo "Stopping..."
TCOP="del"
IPTOP="-D"
fi
if [ "$1" == "stat" ]; then
tc -d qdisc
exit
fi
RATE - минимально гарантированная скорость, CEIL - максимальная
RATE=6000
CEIL=7000
Создаем корневой класс(неклассифицированный трафик попадает в канал 30)
tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 30
Создаем классы(шаблоны ограничений)
tc class ${TCOP} dev ${IF} parent 1: classid 1:1 htb rate ${RATE}kbit ceil ${CEIL}kbit
voip
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:10 htb rate 1024kbit ceil 1500kbit prio 0
http
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:20 htb rate 1024kbit ceil 3000kbit prio 2
other
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:30 htb rate 256kbit ceil 2500kbit prio 3
Указываем тип очередей
tc qdisc ${TCOP} dev ${IF} parent 1:10 handle 10: pfifo
tc qdisc ${TCOP} dev ${IF} parent 1:20 handle 20: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:30 handle 30: sfq perturb 10
Указываем фильтры для очередей.
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 0 handle 1 fw classid 1:10
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 2 handle 2 fw classid 1:20
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 3 handle 3 fw classid 1:30
Непосредственно маркировка. 0x1 означает найти в "tc filter" "handle 1" назначить приоритет 0 и отправить в канал 1:10 и т.д. Обратите внимание на то что RTP пакеты маркируются в OUTPUT. Это связано с тем, что ASTERISK стоит на той же машине что и шлюз.
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j MARK --set-mark 0x1
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x3
iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x3
![]() | 2 | No.2 Revision редактировать |
Шейпинг трафика VOIP
Приведу простой пример ограничения входящего трафика.
В Интернете много примеров. Я приведу действующий
скрипт для небольшой фирмы у которой сервер VOIP
и шлюз в Интернет один и тот же физический сервер. eth0 - смотрит в локальную сеть
eth1 - смотрит в Интернет (входящая скорость 7Мбит от провайдера)
Ограничивать будем на eth0, т.к. ограничивать возможно
только исходящий трафик. Разобьем трафик на 3 части
Итак непосредственно пример:
пример:
#!/bin/sh
TCOP="add"
IPTOP="-A"
IF=eth0
if [ "$1" == "stop" ]; then
echo "Stopping..."
TCOP="del"
IPTOP="-D"
fi
if [ "$1" == "stat" ]; then
tc -d qdisc
exit
fi
RATE - минимально гарантированная скорость, CEIL - максимальная
RATE=6000
CEIL=7000
Создаем корневой класс(неклассифицированный трафик попадает в канал 30)
tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 30
Создаем классы(шаблоны ограничений)
tc class ${TCOP} dev ${IF} parent 1: classid 1:1 htb rate ${RATE}kbit ceil ${CEIL}kbit
voip
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:10 htb rate 1024kbit ceil 1500kbit prio 0
http
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:20 htb rate 1024kbit ceil 3000kbit prio 2
other
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:30 htb rate 256kbit ceil 2500kbit prio 3
Указываем тип очередей
tc qdisc ${TCOP} dev ${IF} parent 1:10 handle 10: pfifo
tc qdisc ${TCOP} dev ${IF} parent 1:20 handle 20: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:30 handle 30: sfq perturb 10
Указываем фильтры для очередей.
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 0 handle 1 fw classid 1:10
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 2 handle 2 fw classid 1:20
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 3 handle 3 fw classid 1:30
Непосредственно маркировка. 0x1 означает найти в "tc filter" "handle 1" назначить приоритет 0 и отправить в канал 1:10 и т.д. Обратите внимание на то что RTP пакеты маркируются в OUTPUT. Это связано с тем, что ASTERISK стоит на той же машине что и шлюз.
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j MARK --set-mark 0x1
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j RETURN
iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x3
iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x3
0x3
3 No.3 Revision редактировать
Шейпинг трафика VOIP
Приведу простой пример ограничения входящего трафика.
В Интернете много примеров. Я приведу действующий
скрипт для небольшой фирмы у которой сервер VOIP
и шлюз в Интернет один и тот же физический сервер.
eth0 - смотрит в локальную сеть
eth1 - смотрит в Интернет (входящая скорость 7Мбит от провайдера)
Ограничивать будем на eth0, т.к. ограничивать возможно
только исходящий трафик. Разобьем трафик на 3 части
Итак непосредственно пример:
пример:
#!/bin/sh
TCOP="add"
IPTOP="-A"
IF=eth0
if [ "$1" == "stop" ]; then
echo "Stopping..."
TCOP="del"
IPTOP="-D"
fi
fi
if [ "$1" == "stat" ]; then
tc -d qdisc
exit
fi
fi
# RATE - минимально гарантированная скорость, CEIL - максимальная
максимальная
RATE=6000
CEIL=7000
CEIL=7000
# Создаем корневой класс(неклассифицированный трафик попадает в канал 30)
30)
tc qdisc ${TCOP} dev ${IF} root handle 1: htb default 30
30
# Создаем классы(шаблоны ограничений)
ограничений)
tc class ${TCOP} dev ${IF} parent 1: classid 1:1 htb rate ${RATE}kbit ceil ${CEIL}kbit
voip
${CEIL}kbit
# voip
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:10 htb rate 1024kbit ceil 1500kbit prio 0
http
0
# http
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:20 htb rate 1024kbit ceil 3000kbit prio 2
other
2
# other
tc class ${TCOP} dev ${IF} parent 1:1 classid 1:30 htb rate 256kbit ceil 2500kbit prio 3
3
# Указываем тип очередей
очередей
tc qdisc ${TCOP} dev ${IF} parent 1:10 handle 10: pfifo
tc qdisc ${TCOP} dev ${IF} parent 1:20 handle 20: sfq perturb 10
tc qdisc ${TCOP} dev ${IF} parent 1:30 handle 30: sfq perturb 10
10
# Указываем фильтры для очередей.
очередей.
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 0 handle 1 fw classid 1:10
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 2 handle 2 fw classid 1:20
tc filter ${TCOP} dev ${IF} parent 1:0 protocol ip prio 3 handle 3 fw classid 1:30
1:30
# Непосредственно маркировка. 0x1 означает найти в "tc filter" "handle 1" назначить приоритет 0 и отправить в канал 1:10 и т.д. Обратите внимание на то что RTP пакеты маркируются в OUTPUT. Это связано с тем, что ASTERISK стоит на той же машине что и шлюз.
шлюз.
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j MARK --set-mark 0x1
iptables -t mangle ${IPTOP} OUTPUT -p udp -m udp --sport 10000:15000 -j RETURN
RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 80 -j RETURN
RETURN
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j MARK --set-mark 0x2
iptables -t mangle ${IPTOP} PREROUTING -p tcp -m tcp --sport 22 -j RETURN
RETURN
iptables -t mangle ${IPTOP} PREROUTING -j MARK --set-mark 0x3
iptables -t mangle ${IPTOP} OUTPUT -j MARK --set-mark 0x3
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.