Видео ролики бесплатно онлайн

Смотреть 365 видео

Официальный сайт mydebut 24/7/365

Смотреть видео бесплатно

wat_che 06.04.2011 16:32

Tips & tricksШейпер HTB и прозрачный SQUID

В наличии шлюз с двумя сетевыми картами одна eth0 - 192.168.1.7 (смотрит в мир), другая eth1 - 10.10.7.1 (смотрит в локалку) и squid работающий в прозрачном режиме. Хочу получить хоть какое-то равноправное деление канала между пользователями. Говорю сразу я не ас в этом деле, но как-то оно всё таки работает.

Особо подробно на установке шейпера останавливаться не буду, есть гугль, тема разжёвана более менее неплохо. Основные шаги:
- качаем htb.init отсюда http://sourceforge.net/projects/htbinit/ кладём в /etc/init.d/ (это в Mandriva) и делаем исполняемым;
- по вкусу, можно добавить скрипт в автозагрузку системы, сделать это в deb подобных дистрибьютивах (сам не проверял, у меня Mandriva) можно следующими командами ln -sf /etc/init.d/htb.init /etc/rc.d/init.d/htb.init update-rc.d htb start 20 0 1 2 3 4 5 .
В Mandriva я добавил запуск в rc.local
- создаём директории и файлы необходимые для правильной работы скрипта.
mkdir /etc/sysconfig (для тех у кого нет такой директории)
mkdir /etc/sysconfig/htb
- теперь в директории /etc/sysconfig/htb пишем правила для шейпера.


Основные требования при составлении правил:

Шейпировать можно только исходящий из интерфейса трафик, т.е в моём случае Upload пользователей шейпится, по желанию на интерфейсе eth0 (я этого у себя не делал кому необходимо шейпить Upload изучите внимательно как необходимо создавать правила при использовании NAT), а Download на интерфейсе eth1 (вот эти и будем заниматься).

По минимуму в конфиге должно быть 3 строки.
RATE — полоса предоставляемая абоненту.
CAIL - максимальна полоса до которой может разогнаться пользователь
LEAF — указатель на то, что класс конечный и для него необходимо создать создать дисциплину, в нашем случае sfq («псевдочестное» распределение полосы)
RULE — определяем что попадает в класс.Фильтровать можно по ип адресам, подсетям ип адресов, портам. Количество записей RULE может быть более одной.
Формат — RULE=
<:port>,>><:port>
Обратите внимание на запятую! RULE=*:80 обозначает трафик, у которого порт назначения 80, а RULE=*:80, обозначает трафик, у которого исходящий порт — 80.

Создаем файл с именем eth1 (интерейс «смотрящий» в локалку), в него напищем следующие строки:
DEFAULT=30
R2Q=2
Параметр DEFAULT задает номер класса, к которому будет относиться трафик «по умолчанию» — обычно это класс с минимальным приоритетом. Параметр R2Q влияет на работу алгоритма разделения канала и зависит от ширины канала.
Далее создаю файл eth1:2.full100mbit (всё что после точки это комментарии) и записываю в него ширину всего моего канала:
RATE=100mbit

Далее создаю правило для локалки eth1:2:10.local (запятые означают что всё что идёт с указанных адресов идёт со скоростью 98 mbit)
RATE=98mbit
CEIL=98mbit
RULE=10.10.7.1/255.255.255.224,
RULE=192.168.1.0/255.255.255.0,


Далее создаю правило для инета eth1:2:20.inet (для успешной работы шейпера необходимо уменьшить максимальную скорость канала на процентов 20 %)
# inet ADSl 1 mbit umenshaem 120 kbit do 97 kbit
RATE=97kbps
CEIL=97kbps
LEAF=sfq


Затем идут ювери eth1:2:20:31.mustang:
# roout class containing total bandwidth
RATE=15kbps
CEIL=97kbps
RULE=10.10.7.12
#BURST=150K
PRIO=3
#LEAF=sfq


Ну и так далее.

И последний класс Default, куда пойдёт всё неклассифицированное eth1:2:30.default
RATE=10kbps
CEIL=9000kbps
LEAF=sfq

Затем делаем финт ушами /etc/init.d/htb.init compile В результате получаем наши правила для шейпера.
У меня они получились такими (с учётом всех юзеров с 31 по 38)

/sbin/tc qdisc del dev eth1 root
/sbin/tc qdisc add dev eth1 root handle 1 htb default 30 r2q 2

/sbin/tc class add dev eth1 parent 1: classid 1:2 htb rate 100mbit

/sbin/tc class add dev eth1 parent 1:2 classid 1:10 htb rate 98mbit ceil 98mbit
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 10.10.7.1/255.255.255.224 classid 1:10
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip src 192.168.1.0/255.255.255.0 classid 1:10

/sbin/tc class add dev eth1 parent 1:2 classid 1:20 htb rate 97kbps ceil 97kbps
/sbin/tc qdisc add dev eth1 parent 1:20 handle 20 sfq perturb 10

/sbin/tc class add dev eth1 parent 1:20 classid 1:31 htb rate 15kbps ceil 97kbps prio 3
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.12 classid 1:31

/sbin/tc class add dev eth1 parent 1:20 classid 1:32 htb rate 10kbps ceil 90kbps prio 1
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.16 classid 1:32

/sbin/tc class add dev eth1 parent 1:20 classid 1:33 htb rate 10kbps ceil 70kbps prio 4
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.15 classid 1:33

/sbin/tc class add dev eth1 parent 1:20 classid 1:34 htb rate 15kbps ceil 85kbps prio 2
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.18 classid 1:34

/sbin/tc class add dev eth1 parent 1:20 classid 1:35 htb rate 10kbps ceil 90kbps prio 1
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.11 classid 1:35

/sbin/tc class add dev eth1 parent 1:20 classid 1:36 htb rate 10kbps ceil 95kbps prio 1
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.17 classid 1:36

/sbin/tc class add dev eth1 parent 1:20 classid 1:37 htb rate 10kbps ceil 80kbps prio 2
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.19 classid 1:37

/sbin/tc class add dev eth1 parent 1:20 classid 1:38 htb rate 10kbps ceil 65kbps prio 2
/sbin/tc filter add dev eth1 parent 1:0 protocol ip prio 100 u32 match ip dst 10.10.7.14 classid 1:38

/sbin/tc class add dev eth1 parent 1:2 classid 1:30 htb rate 10kbps ceil 9000kbps
/sbin/tc qdisc add dev eth1 parent 1:30 handle 30 sfq perturb 10

Затем можно эти правила добавить в автозапуск (если автозапуск htb.init не используется). Вообщем тут по вкусу.
А теперь самое интересное.

Прозрачный SQUID+HTB

Как было сказано выше на шлюзе у меня крутится кэширующий прокси squid. Получается так что даже если что либо и доступно в кэше, то грузиться оно всё равно со скоростью указанной для клиента, а не на максимальной скорости локалки. Для того чтоб всё находящееся в кэше грузилось из кеша со скоростью локалки я добавил в /etc/rc.d/rc.local после запуска htb.init такое правило:
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip protocol 0x6 0xff match ip tos 0x30 0xff flowid 1:10
где
- 0x30 метка пакета находящегося в кеше,
- 0xff означает, что в качестве идентификатора класса используется последний байт IP-адреса,
- 0x6 идентификатор протокола tcp
- parent 1 означает, что всё что попадает под это правило будет загружаться со скоростью локалки
Это необходимо, чтоб уже закешированое грузилось из кеша со скоростью локалки (100 мбит), а не со скоростью ограничения для
данного ip.


Естественно, для того чтоб это правило работало, необходимо, чтоб squid был выше версии 3.1 и в его конфиг было добавлено:
qos_flows local-hit=0x30
qos_flows sibling-hit=0x30
qos_flows parent-hit=0x30


P.S. После всех эксперименотов замечу, что htb.init годиться лишь для нарезки канала, равномерное деление канала с его помощью сделать не получится, т.к. канал делится равномерно между потоками, а не пользователями. Говорят, чтоб это исправить, есть возможность в новых версиях ядер (после 2.6.26) испоьзовать sfq flow classifier, но как это делается я пока не знаю т.к. информации по этому вопросу пока маловато.

Ссылки по теме благодаря которым получился данный пост
Шейпер
http://habrahabr.ru/blogs/linux/60095/
http://sudouser.com/nastrojka-ogranicheniya-i-raspredeleniya-kanala-htb-shaper.html
http://evilzipik.ru/linux/shejper-v-linux-prosto.html
http://habrahabr.ru/blogs/sysadm/88624/
http://www.xakep.ru/post/49421/default.asp?print=true
http://forum.net13.info/index.php?s=14f1f6d270cb70eeac272f05d7b608b3&showtopic;=24236&pid;=728956&st;=0entry728956
Squid
http://squidcache.cybermirror.org/squid/squid-3.1.10-RELEASENOTES.html
http://tau-system.ru/squid/html/russian/qos_flows


Тэги:
+ 5 -
Похожие Поделиться

Scrill 06.04.2011 16:48 #
+ 1 -
Если есть Squid не вижу особого смысла настраивать шейпер.
wat_che 06.04.2011 16:57 #
+ 1 -
delay pools в squid не динамический, а чтоб канал простаивал не хочется, (1 метр на 9 человек маловато)
Scrill 06.04.2011 17:02 #
+ 0 -
Теперь вижу :)
Shilov 24.06.2011 08:29 #
+ 1 -
Позвольте, что значит "delay pools" в squid не динамический"?

если его настраивать не отдельно по каждому хосту, а на сеть -- то весь доступный канал будет распределяться между всей сетью.
при этом, параллельно можно выделить для отдельных хостов отдельные каналы.

у меня такая схема вполне успешно работает.
единственное "НО" -- через прокси идёт только http/ftp трафик.
wat_che 24.06.2011 11:03 #
+ 0 -
и когда кто-то втыкнёт качалку в пять потоков, то заберёт на себя весь канал.
Хочется сделать чтоб 1 ip получал динамически делимою между всеми пользователями сети полосу пропускания не зависящую от количества потоков качалки. Т.е. если Вася и Женя качают что-либо из сети Вася в 5 потоков, а Женя в 1 поток скорость делилась между IP поровну.
ZED 06.04.2011 20:09 #
+ 3 -
Мало того что минусованные топики не видны на главной (баг или КА-шная фича) так еще и находится быдло, которое минусует чужой труд. Мне ваще эта тема побоку, но такие вещи я плюсую не глядя.
gardarea51 06.04.2011 21:39 #
+ 1 -
Плюсую вам за то, что плюсуете =)

В хорошем качестве hd видео

Онлайн видео бесплатно


Смотреть русское с разговорами видео

Online video HD

Видео скачать на телефон

Русские фильмы бесплатно

Full HD video online

Смотреть видео онлайн

Смотреть HD видео бесплатно

School смотреть онлайн