Пожалуйста, войдите здесь. Часто задаваемые вопросы О нас
Задайте Ваш вопрос

История изменений [назад]

нажмите, чтобы скрыть/показать версии 1
изначальная версия
редактировать

ответил 2012-04-14 13:05:27 +0400

bolshoy_plohish Gravatar bolshoy_plohish


Шейпинг трафика 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

 Шейпинг трафика 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

Шейпинг трафика 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.