MikroTik и маршрутизация

Настройка ограничения и распределения канала (HTB Shaper) | Stepanoff Home Network

Материал перенесён из старой базы знаний ATC-IP и оформлен в едином стиле нового сайта.

Stepanoff Home Network
Unix Блог
Home
Почта
Фото галерея
Сетевые утилиты online
Jabber сервер
Linux торрент трекер
RSS Feed
марта 30 2008 05:39 пп
Настройка ограничения и распределения канала (HTB Shaper)
Если у Вас есть Ваша собственная домашняя сеть с двумя или более компьютерами и она подключена к интернету, вы точно знаете о тех проблемах с одновременным доступом к сети, которые практически неизбежны при таком подключении. Самой большой и раздражающей проблемой является разделение ширины канала между всеми участниками сети: когда вы пытаетесь работать через ssh с удалённым сервером, а в этот момент ваша wife/брат/друг решает поглядеть новый и очень классный видео клип с Google Video или YouTube, Ваше соединение замирает и вы можете забыть о комфортабельной работе . В этой маленькой статье я дам вам простое решение этой проблемы, которое позволит вам делать все, что угодно не думая о проблемах разделения трафика!
Для начала замечу, что Ваша сеть должна быть подключена к Internet при помощи Linux сервера. Если Вы подключены через какой-то тупой аппаратный маршрутизатор, то Вам сильно не повезло и вы не сможете воспользоваться приведенным примером.
CBQ и HTB — представляют собой систему ограничения трафика по скорости. Это наиболее распространённые варианты шейперов.
HTB — более точнее ограничивает скорость и удобней настраивается.
Шейпер работает так: все ИСХОДЯЩИЕ пакеты, т.е. предназначенные для выдачи на любой интерфейс вместо того, чтобы быть отправляться напрямую на интерфейс ставятся в разные очереди. Длина каждой очереди настраивается. Настраиваются также: скорость выдачи данных из очереди (это и есть собственно лимит), длина очереди (размер в байтах), размер пакета, выходящего из очереди (может не совпадать с длиной поступающих пакетов) и многое другое. Пакеты, не помещающиеся в очередь, сбрасываются. Данные из очереди выдаются на интерфейс и далее — к клиенту. Вот как раз каждый файл конфигурации и представляет собой описание одной очереди.
Далее приведен пример настройки шейпера с использованием скрипта htb.init, на сервере с дистрибутивом Ubuntu, с каналом в интернет 6Mbit/sec in/out и локальной сетью 100Mbit/sec in/out,
с 2мя интерфейсами eth0 (интернет) и eth1 (локальная сеть), а так же на сервере используется NAT реализованный с помощью iptables. Имеется 3 компьютера в локальной сети которые получают доступ в интернет и другую локальную сеть через этот сервер.
Для начала скачайте сам скрипт htb.init который будет генерировать вам правила шейпера согласно созданным вами файлам конфигурации.
Сайт проекта
http://sourceforge.net/projects/htbinit/
Затем назовем скачанный скрипт
htb
и поместим в директорию
/usr/sbin
, присвоим аттрибуты для запуска командой
chmod +x /usr/sbin/htb
По желанию можно добавить скрипт в автозагрузку системы, сделать это можно следующими командами:
Код:
ln -sf /usr/sbin/htb /etc/init.d/htb
update-rc.d htb start 20 0 1 2 3 4 5 .
Теперь надо создать директории и файлы необходимые для правильной работы скрипта.
Код:
mkdir /etc/sysconfig
mkdir /etc/sysconfig/htb
touch /var/cache/htb.init
Теперь можно приступать к написанию конфигурационных файлов нашего шейпера.
Создадим основные файлы для интерфейса
eth0
Код:
cd /etc/sysconfig/htb
touch eth0
vim eth0
Впишите в файл следующие строки:
Код:
DEFAULT=0
R2Q=100
Этот файл указывает номер класса в который попадет весь не классифицированный трафик и точность шейпера, чем меньше значение
R2Q
тем меньше погрешности в плюс или минус по скорости, в
Kbit/sec
Создадим следующий файл
Код:
touch eth0-2.root
vim eth0-2.root
Впишите в файл следующее:
Код:
RATE=100Mbit
CEIL=100Mbit
Этот файл корневого класса для интерфейса, в нем содержится макисмально возможная скорость, из которого будут брать ресурсы дочерние классы.
Помните, что надо располагать файлы классов по порядку от большей скорости к меньшей во избежание проблем. Классы распределяются по номерам, и чем выше скорость класса тем меньше должен быть его номер.
Далее создадим файлы для пользователей которые выходят в интернет через наш сервер, и имеют разную скорость доступа. Назовем пользователей vasya, petya, dima и дадим пользователю vasya скорость доступа 1600Kbit/sec in/out, пользователю petya 800Kbit/sec in/out и пользователю dima 256Kbit/sec in/out. Так же на сервере стоит фтп, и надо разрешить пользователям качать с него со скоростью выше чем скорость доступа к интернету. Так же при использовании
NAT
необходимо использовать
iptables
для маркировки пакетов, иначе шейпер будет ограничивать только скорость закачки пользователей.
Адресация нашей локальной сети у нас будет 192.168.0.0/22
Адресация локальной сети за интерфейсом
eth0
у нас 10.0.0.0/8
Адрес сервера 192.168.0.1 и далее по порядку адреса клиентов.
Создадим файл
eth0-2:05.default
Код:
touch eth0-2:05.default
vim eth0-2:05.default
Впишите в файл следующее:
Код:
RATE=99Mbit
CEIL=99Mbit
LEAF=sfq
Этот файл является классом для всего трафика который не подходит под другие классы.
Далее следующий файл
Код:
touch eth0-2:06.lanload
vim eth0-2:06.lanload
Впишем в файл
Код:
RATE=50Mbit
CEIL=50Mbit
LEAF=sfq
PRIO=99
RULE=10.0.0.0/8,10.20.30.40/22
Этот файл ограничивает скорость закачки для клиентов локальной сети которая находится за интерфейсом
eth0
и имеет адресацию 10.0.0.0/8, а сам интерфейс
eth0
имеет адрес 10.20.30.40
Теперь файлы для наших трех компьютеров
Код:
touch eth0-2:07.vasya
vim eth0-2:07.vasya
Впишите в файл
Код:
BURST=50Kb
RATE=1600Kbit
CEIL=1600Kbit
LEAF=sfq
PRIO=1
MARK=102
Этот файл отвечает за ограничение исходящей скорости доступа в интернет для абонента vasya,
но для корректной работы надо добавить правила маркировки пакетов от этого пользователя в
iptables
IP адрес у пользователя vasya 192.168.0.2, создадим для него правила фаервола.
Код:
iptables -t mangle -A PREROUTING -s 192.168.0.2 -j MARK --set-mark 102
iptables -t mangle -A PREROUTING -s 192.168.0.2 -j RETURN
Если на вашем сервере на котором будет работать шейпер не используется
NAT
вы можете не использовать маркировку пакетов и просто заменить параметр

Материал сокращён при переносе в новую базу знаний. Полная версия сохранена в архиве старого сайта.

Позвонить +7 (343) 382-33-16