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 вы можете не использовать маркировку пакетов и просто заменить параметр
Материал сокращён при переносе в новую базу знаний. Полная версия сохранена в архиве старого сайта.