The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"Раздел полезных советов: Скрипт для распределения пропускной..."
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Разговоры, обсуждение новостей (Public)
Изначальное сообщение [ Отслеживать ]

"Раздел полезных советов: Скрипт для распределения пропускной..."  +/
Сообщение от auto_tips (??) on 25-Сен-08, 06:38 
Скрипт опробован в Debian Etch с установленными пакетами tc, iproute2 и bc.
Задача скрипта равномерное распределения пропускной способности канала среди пользователей
и повышения приоритета dns, ssh, smtp.

SOME_IMPORTANT_IP, SOME_OTHER_IMPORTANT_IP, IMPORTANT_IP - нужно заменить на IP
важного сервера во внутренней сети.


#!/bin/bash
EXT_IFACE="eth0"
INT_IFACE="eth1"
TC="tc"
UNITS="kbit"
LINE="10000" # максимальная фактическая скорость внешнего (ext) линка
LIMIT="5000" # максимально скорость, которую мы можем допустить

# Переменные определеяющие скорость для индивидуальных классов трафика
# для ограничения внутреннего трафика, проходящего через интерфейс eth0;
CLS1_RATE="200" # гарантировано 200kbit
CLS2_RATE="300" # гарантировано 300kbit
CLS3_RATE="4500" # на всех 4500kbit (низкий приоритет)

# Переменные определеяющие скорость для индивидуальных классов трафика
# для ограничения трафика, проходящего через внешний интерфейс eth1;
INT_CLS1_RATE="1000" #Priority
INT_CLS2_RATE="4000" #Bulk

# Чистим содержимое qdiscs
${TC} qdisc del dev ${INT_IFACE} root
${TC} qdisc del dev ${EXT_IFACE} root

# Создаем корневые qdiscs, используя HTB, привязываем к интерфейсу и ставим метку "1:0"
${TC} qdisc add dev ${INT_IFACE} root handle 1:0 htb
${TC} qdisc add dev ${EXT_IFACE} root handle 1:0 htb

# Создаем корневые классы и выставляем максимально-допустимый лимит скорости
# eth1
${TC} class add dev ${INT_IFACE} parent 1:0 classid 1:1 htb rate ${LIMIT}${UNITS} ceil ${LIMIT}${UNITS}
# eth0
${TC} class add dev ${EXT_IFACE} parent 1:0 classid 1:1 htb rate ${LIMIT}${UNITS} ceil ${LIMIT}${UNITS}


# Создаем дочерние классы, маркируем их меткой "1:2", "1:3", в зависимости от лимита, для eth1
${TC} class add dev ${INT_IFACE} parent 1:1 classid 1:2 htb rate ${INT_CLS1_RATE}${UNITS} ceil ${LIMIT}${UNITS}

${TC} class add dev ${INT_IFACE} parent 1:1 classid 1:3 htb rate ${INT_CLS2_RATE}${UNITS} ceil ${INT_CLS2_RATE}${UNITS}

# Привязываем лимит для eth1 (для ограничения исходящего трафика)
# Ставим для класса "1:2" гарантированную скорость 200kbit
# с возможностью подъема при свободности канала до 5000kbit
${TC} class add dev ${EXT_IFACE} parent 1:1 classid 1:2 htb rate ${CLS1_RATE}${UNITS} ceil ${LIMIT}${UNITS}


# Ставим для класса "1:3" гарантированную скорость 300kbit
# с возможностью подъема при свободности канала до 4800kbit (5000kbit - 200kbit зарезервированный для 1:2)
${TC} class add dev ${EXT_IFACE} parent 1:1 classid 1:3 htb rate \
   ${CLS2_RATE}${UNITS} ceil `echo ${LIMIT}-${CLS1_RATE}|bc`${UNITS}

# Ставим для менее приоритетного класса "1:4" оставшуюся скорость 4500kbit (5000kbit - 200kbit - 300kbit)
${TC} class add dev ${EXT_IFACE} parent 1:1 classid 1:4 htb rate ${CLS3_RATE}${UNITS} \
   ceil `echo ${LIMIT}-${CLS1_RATE}-${CLS2_RATE}|bc`${UNITS}

# Добавляем pfifo.
${TC} qdisc add dev ${INT_IFACE} parent 1:2 handle 12: pfifo limit 10
${TC} qdisc add dev ${INT_IFACE} parent 1:3 handle 13: pfifo limit 10
${TC} qdisc add dev ${EXT_IFACE} parent 1:2 handle 12: pfifo limit 10
${TC} qdisc add dev ${EXT_IFACE} parent 1:3 handle 13: pfifo limit 10
${TC} qdisc add dev ${EXT_IFACE} parent 1:4 handle 14: pfifo limit 10


### С классами закончили, создаем правила для адресов в сети
# INT_IFACE, настраиваем скорость.
# под dst подразумевается трафик уходящий во внутренний интерфейс eth0, т.е. к локальному IP
# и определяем скорость загрузки с этих адресов.
# адрес SOME_IMPORTANT_IP привязываем к классу 1:2
${TC} filter add dev ${INT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip dst SOME_IMPORTANT_IP/32 flowid 1:2
${TC} filter add dev ${INT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip dst SOME_OTHER_IMPORTANT_IP/32 flowid 1:2
# Все остальные адреса привязываем к классу 1:3 и считаем неприоритетными
${TC} filter add dev ${INT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip dst 0.0.0.0/0 flowid 1:3


# EXT_IFACE
# Устанавливаем повышенный приоритет для  DNS запросов
${TC} filter add dev ${EXT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 match ip sport 53 0xffff flowid 1:2
# SSH тоже считаем приоритетным

${TC} filter add dev ${EXT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 match ip sport 22 0xffff flowid 1:2
# SMTP отдаем остатки полосы, но приоритет по сравнению с остальным трафиком поднимаем
${TC} filter add dev ${EXT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 match ip sport 25 0xffff flowid 1:3
# Все остальное - в последнюю очередь, самый низкий приоритет
${TC} filter add dev ${EXT_IFACE} parent 1:0 protocol ip prio 1 u32 match ip src 0.0.0.0/0 flowid 1:4


URL: http://www.adamsinfo.com/bandwith-limiting-with-linux-tc-and.../
Обсуждается: http://www.opennet.me/tips/info/1777.shtml

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "Скрипт для распределения пропускной способности средствами i..."  +/
Сообщение от _Kuzmich email(??) on 25-Сен-08, 06:38 
pfifo limit 10 размер очереди оч.маленький, будут дропаться пакеты, я ставлю 1000.
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "Скрипт для распределения пропускной способности средствами i..."  +/
Сообщение от Аноним (??) on 25-Сен-08, 15:37 
Еще один "copy-past"?
Где "отрезается" ПОЛОВИНА пропускной способности канала?
Давайте поспорим, что это "распределение" при работающем torrent в сети захлебнется?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "Скрипт для распределения пропускной способности средствами i..."  +/
Сообщение от Макс email(??) on 25-Сен-08, 22:00 
>Еще один "copy-past"?
>Где "отрезается" ПОЛОВИНА пропускной способности канала?
>Давайте поспорим, что это "распределение" при работающем torrent в сети захлебнется?

Давайте, поспорьте, мне интересна причина захлебывания.


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

4. "Скрипт для распределения пропускной способности средствами i..."  +/
Сообщение от hand on 28-Сен-08, 19:09 
ну как, проверили?
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

5. "Скрипт для распределения пропускной способности средствами i..."  +/
Сообщение от Аноним (??) on 02-Авг-09, 23:34 
захлебнулись досмерти
Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру