Шейпер: различия между версиями
OlegA (обсуждение | вклад) (Новая: {{Суперпользователь}} CBQ и HTB - представляют собой систему ограничения трафика по скорости. Это наибол...) |
(нет различий)
|
Текущая версия на 12:22, 17 июня 2008
ВНИМАНИЕ: команды предваряемые символом '#
' должны выполняться с правами root (Суперпользователь). Открыв терминал (или находясь в консоли) с правами обычного пользователя, введите команду $ su -
для повышения уровня привелегий. Символы '$
' и '#
' в начале строки не являются частью команды и не должны вводится. Прочие команды могут выполняться с правами обыкновенного пользователя.
CBQ и HTB - представляют собой систему ограничения трафика по скорости. Это наиболее распространённые варианты шейперов. К сожалению, они могут ограничивать только исходящий трафик с компьютера, на котором установлен.
HTB - более точнее ограничивает скорость и удобней настраивается.
Шейпер работает так: все ИСХОДЯЩИЕ пакеты, т.е. предназначенные для выдачи на любой интерфейс вместо того, чтобы быть отправляться напрямую на интерфейс ставятся в разные очереди. Длина каждой очереди настраивается. Настраиваются также: скорость выдачи данных из очереди (это и есть собственно лимит), длина очереди (размер в байтах), размер пакета, выходящего из очереди (может не совпадать с длиной поступающих пакетов) и многое другое. Пакеты, не помещающиеся в очередь, сбрасываются. Данные из очереди выдаются на интерфейс и далее - к клиенту. Вот как раз каждый файл конфигурации и представляет собой описание одной очереди.
Если у Вас есть Ваша собственная домашняя сеть с двумя или более компьютерами и она подключена к интернету, вы точно знаете о тех проблемах с одновременным доступом к сети, которые практически неизбежны при таком подключении. Самой большой и раздражающей проблемой является разделение ширины канала между всеми участниками сети: когда вы пытаетесь работать через ssh с удалённым сервером, а в этот момент ваша wife/брат/друг решает поглядеть новый и очень классный видео клип с Google Video или You``Tube, Ваше соединение замирает и вы можете забыть о комфортабельной работе . В этой маленькой статье я дам вам простое решение этой проблемы, которое позволит вам делать все, что угодно не думая о проблемах разделения трафика!
Для начала замечу, что Ваша сеть должна быть подключена к Internet при помощи Linux сервера. Если Вы подключены через какой-то тупой аппаратный маршрутизатор, то Вам сильно не повезло и вы не сможете воспользоваться приведенным примером.
Если же Ваш сервер работает под управлением Linux, тогда используйте следеющие ниже инструкции чтобы сделать вашу жизнь проще. Замечу, что у меня интернет подключён к интерфейсу eth0, а локальная сеть - к eth1, канал у меня - симметричное подключение на 512Kbit/s, потому все примеры будут основываться на этих параметрах:
1. Скачайте скрипт htb.init с сайта sourceforge.
2. Распакуйте его и положите в /sbin/htb.init, сменив ему аттрибуты, чтобы сделать его исполнимым:
# chmod +x /sbin/htb.init
3. Создайте каталоги для конфигурации и кеша htb.init:
# mkdir -p /etc/sysconfig/htb
# mkdir -p /var/cache/htb.init
4. Перейдите в каталог коныигурации htb.initи создайте следующие конфигурационные файлы для исходящего трафика:
- Файл ‘eth0′ со следующим содержимым:
DEFAULT=30
R2Q=100
- Файл ‘eth0-2.root’ со следующим содержимым:
# root class containing outgoing bandwidth
RATE=512Kbit
- Файл ‘eth0-2:10.ssh’ со следующим содержимым:
# class for outgoing ssh
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=*:22
PRIO=10
- И, наконец, файл ‘eth0-2:30.default’ со следующим содержимым:
# default class for outgoing traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
PRIO=30
5. Теперь, создайте набор файлов для управления входящим трафиком:
- Файл ‘eth1′ со следующим содержимым:
DEFAULT=30
R2Q=100
- Файл ‘eth1-2.root’ со следующим содержимым:
# root class containing incoming bandwidth
RATE=512Kbit
- Файл ‘eth1-2:10.ssh’ со следующим содержимым:
# class for incoming ssh
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=*:22,
PRIO=10
- Файл ‘eth1-2:20.mytraf’ для конфигурирования параметров канала на Ваш компьютер:
# class for my incoming traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
RULE=192.168.0.2 # this is my ip
PRIO=20
- И файл ‘eth1-2:30.default’ для параметров канала по умолчанию для остальных со следующим содержимым:
# default class for outgoing traffic
RATE=256Kbit
CEIL=512Kbit
LEAF=sfq
PRIO=30
6. Последний шаг - запуск системы контроля трафика при помощи следующей команды:
# /sbin/htb.init start
Если все шаги были выполнены правильно и успешно, Вы можете использовать Ваш канал для работы через ssh, для скачивания файлов или для простого сёрфинга… Ваше соединение будет честно делиться между всеми участниками домашней сети. Если вы находитесь в сети один, Вы будете использовать всю ширину канала. Как только ваши соседи захотят что-то скачать, ширина канала будет разделена между вами поровну, но ваша работа будет настолько же комфортной, как и в тот момент, когда Вы были одни.
Примечание: Если Вы используете трансляцию адреса (NAT), то указание простых правил будет не эффективно. Для ограничения скорости при использовании NAT необходимо создавать правила основанные на маркировке (MARK) в iptables.
Пример: Маркируем пакеты идущие с 192.168.2.1 на подсеть 89.41.64.0/18
# iptables -t mangle -A PREROUTING -s 192.168.2.1 -d 89.41.64.0/18 -j MARK --set-mark 101
# iptables -t mangle -A PREROUTING -s 192.168.2.1 -d 89.41.64.0/18 -j RETURN
В кофигах вместо RULE=192.168.2.1,89.41.64.0/18
пишем: MARK=101
Не забываем сохранять конфиг iptables:
# service iptables save
Источник: