1 | изначальная версия редактировать | |
Шейпинг U32.
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки
#RATEUP=500 #лимит скорости отдачи
#RATEDN=1300 # лимит скорости закачки
СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
2 | No.2 Revision редактировать |
Traffic Control. Шейпинг U32.трафика U32 в Linux
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки
#RATEUP=500 #лимит скорости отдачи
#RATEDN=1300 # лимит скорости закачки
СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
3 | No.3 Revision редактировать |
Traffic Control. Шейпинг трафика U32 с помощью классификатора u32 в Linux
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки
#RATEUP=500 #лимит скорости отдачи
#RATEDN=1300 # лимит скорости закачки
СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
4 | No.4 Revision редактировать |
Traffic Control. Шейпинг с помощью классификатора u32 в Linux
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки
#RATEUP=500 #лимит скорости отдачи
#RATEDN=1300 # лимит скорости закачки
СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
5 | No.5 Revision редактировать |
Traffic Control. Шейпинг с помощью классификатора u32 в Linux
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
#90-95% от полосы
RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки
СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
6 | No.6 Revision редактировать |
Traffic Control. Шейпинг с помощью классификатора u32 в Linux
Заметил, что последнее время, появилось большое количество булькающих и крякающих атс на предприятиях. В большинстве случаев поможет организация шейпинга.
#!/bin/bash DEV=eth2
#90-95%
<= 90-95%
от полосы
полосы RATEUP=700 #лимит скорости отдачи
RATEDN=3000 # лимит скорости закачки СБРОС ПРАВИЛ
tc qdisc del dev $DEV root
#tc qdisc del dev $DEV ingress
#tc qdisc del dev $DEV egress
tc qdisc del dev ifb0 root
#tc qdisc del dev ifb0 ingress
#Подключаем модуль ядра для ifb:
/sbin/modprobe ifb
#Поднимаем интерфейс ifb0:
/sbin/ip link set dev ifb0 up
#Создаем корневую дисциплину для входящего траффика
tc qdisc add dev $DEV ingress
#Заворачиваем траффик на с интерфейса на интерфейс ifb0
tc filter add dev $DEV parent ffff: protocol ip u32 match u32 0 0 action mirred egress redirect dev ifb0
#Указываем размер очереди
ip link set dev ifb0 qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev ifb0 root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev ifb0 parent 1: classid 1:1 htb rate ${RATEDN}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev ifb0 parent 1:1 classid 1:20 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 0
tc class add dev ifb0 parent 1:1 classid 1:21 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 1
tc class add dev ifb0 parent 1:1 classid 1:22 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 2
tc class add dev ifb0 parent 1:1 classid 1:23 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 3
tc class add dev ifb0 parent 1:1 classid 1:24 htb rate $[$RATEDN/6]kbit ceil ${RATEDN}kbit prio 4
tc class add dev ifb0 parent 1:1 classid 1:25 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 5
tc class add dev ifb0 parent 1:1 classid 1:26 htb rate $[$RATEDN/12]kbit ceil ${RATEDN}kbit prio 6
подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev ifb0 parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev ifb0 parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev ifb0 parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev ifb0 parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev ifb0 parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev ifb0 parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev ifb0 parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev ifb0 protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev ifb0 protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev ifb0 protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev ifb0 protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev ifb0 protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev ifb0 protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
#Исходящий траффик
#Создаем корневую дисциплину для входящего траффика
#tc qdisc add dev $DEV egress
#Указываем размер очереди
ip link set dev $DEV qlen 30
#Создаем корневую дисциплину для ifb0
tc qdisc add dev $DEV root handle 1: htb default 26
добавить общее ограничение скорости по классу
tc class add dev $DEV parent 1: classid 1:1 htb rate ${RATEUP}kbit
добавляем подклассы - мы гарантируем каждаму классу МИНИМУМ "честную часть" полосы пропускания.
Этим способом мы избегаем возможности "голодания" классов. Каждому классу
разрешается занимать всю полосу пропускания, если другие классы не
используются.
tc class add dev $DEV parent 1:1 classid 1:20 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 0
tc class add dev $DEV parent 1:1 classid 1:21 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 1
tc class add dev $DEV parent 1:1 classid 1:22 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 2
tc class add dev $DEV parent 1:1 classid 1:23 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 3
tc class add dev $DEV parent 1:1 classid 1:24 htb rate $[$RATEUP/6]kbit ceil ${RATEUP}kbit prio 4
tc class add dev $DEV parent 1:1 classid 1:25 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 5
tc class add dev $DEV parent 1:1 classid 1:26 htb rate $[$RATEUP/12]kbit ceil ${RATEUP}kbit prio 6
#подключаем дисциплины обработки очереди к подклассам - здесь мы используем SFQ для каждого класса.
SFQ обеспечит почти честное деление полосы пропусканиямежду соединениями
внутри каждого класса.
tc qdisc add dev $DEV parent 1:20 handle 20: sfq perturb 10
tc qdisc add dev $DEV parent 1:21 handle 21: sfq perturb 10
tc qdisc add dev $DEV parent 1:22 handle 22: sfq perturb 10
tc qdisc add dev $DEV parent 1:23 handle 23: sfq perturb 10
tc qdisc add dev $DEV parent 1:24 handle 24: sfq perturb 10
tc qdisc add dev $DEV parent 1:25 handle 25: sfq perturb 10
tc qdisc add dev $DEV parent 1:26 handle 26: sfq perturb 10
направляем трафик в классы
icmp траффик в высокоприритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 0 u32 match ip protocol 1 0xff flowid 1:20
UDP траффик в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff flowid 1:21
DNS запросы в класс 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 17 0xff match ip dport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip sport 53 0xffff flowid 1:21
tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip protocol 6 0xff match ip dport 53 0xffff flowid 1:21
SSH трафиик в класс 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip dport 22 0xffff flowid 1:22
tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip protocol 6 0xff match ip sport 22 0xffff flowid 1:22
OpenVPN траффик в класс 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip sport 5001 0xffff flowid 1:23
tc filter add dev $DEV protocol ip parent 1:0 prio 3 u32 match ip protocol 6 0xff match ip dport 5001 0xffff flowid 1:23
SMTP траффик в класс 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip sport 25 0xffff flowid 1:24
tc filter add dev $DEV protocol ip parent 1:0 prio 4 u32 match ip protocol 6 0xff match ip dport 25 0xffff flowid 1:24
WEB траффик в класс 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 80 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 81 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip sport 443 0xffff flowid 1:25
tc filter add dev $DEV protocol ip parent 1:0 prio 5 u32 match ip protocol 6 0xff match ip dport 443 0xffff flowid 1:25
#Весь остальной трафик отправить в низкоприоритетный класс
tc filter add dev $DEV protocol ip parent 1:0 prio 6 u32 match ip protocol 6 0xff flowid 1:26
Проект компании "АТС Дизайн"
Asterisk® и Digium® являются зарегистрированными торговыми марками компании
Digium, Inc., США.
IP АТС Asterisk распространяется под лицензией
GNU GPL.