| 
| Статистика |  |  | 
 Онлайн всего: 3 Гостей: 3 Пользователей: 0 |  |  |  |  | 
|  |  |  |  |  | Главная » 2010 » Август » 27 » Шлюз+шейпер для домашней сети на Ubuntu 
 
| 13:29  Шлюз+шейпер для домашней сети на Ubuntu |  | Моя домашняя сеть разрослась до количества трех компьютеров. В связи с чем началась дележка: кто будет качать первым. Иногда даже страничка в ФФ открывается по 2-3 минуты, так как на соседнем компе во всю качает торрент.
 Советом системных администраторов (то есть мной) было принято решение
создать шлюз c шейпером который будет динамически делить канал на всех.
 Ну начнем
 Имеется две сетевые карты, eth0 — смотрит в интернет (модем в режиме роутера, и eth1 — смотрит в локальную сеть
 Я не буду описывать конфиги самих сетевых интерфейсов, но скажу, что eth0 получает IP от роутера, в то время как на eth1 выставлен статический IP, мной выбран 10.2.2.1
 Для начала поднимем DHCP сервер для того, что бы оставшиеся компы могли получить IP адреса автоматом.
 Установим DHCP сервер
 
 sudo apt-get install dhcp3-serverПосле чего правим конфиг /etc/dhcp3/dhcp.conf я привел его вот к такому виду
 
 subnet 10.2.2.0 netmask 255.255.255.0{
 option routers 10.2.2.1;
 option subnet-mask 255.255.255.0;
 option domain-name-servers 195.54.2.1;
 option domain-name-servers 195.54.3.2;
 range 10.2.2.10 10.2.2.254;
 default-lease-time 21600;
 max-lease-time 28800;
 }
затем правим файл /etc/default/dhcp3-server вписывая в него строку
 
 INTERFACES=eth1для того, что бы сервер «слушал» именно этот интерфейс
 После чего можем запустить сервер
 
 sudo /etc/init.d/dhcp3-server startДля "раздачи” интернет во внутреннюю сеть используем IP маскарадинг (IPMASQUARADE)
 В сокращенном виде (без комментариев и не функциональных выводов сообщений) скрипт выглядит так:
 
 #!/bin/sh# полная версия находится здесь: lafox.net/docs/masq/
 IPTABLES=/sbin/iptables
 DEPMOD=/sbin/depmod
 MODPROBE=/sbin/modprobe
 EXTIF="eth0"
 INTIF="eth1"
 $DEPMOD -a
 $MODPROBE ip_tables
 $MODPROBE ip_conntrack
 $MODPROBE ip_conntrack_ftp
 $MODPROBE ip_conntrack_irc
 $MODPROBE iptable_nat
 $MODPROBE ip_nat_ftp
 $MODPROBE ip_nat_irc
 echo "1" > /proc/sys/net/ipv4/ip_forward
 echo "1" > /proc/sys/net/ipv4/ip_dynaddr
 $IPTABLES -P INPUT ACCEPT
 $IPTABLES -F INPUT
 $IPTABLES -P OUTPUT ACCEPT
 $IPTABLES -F OUTPUT
 $IPTABLES -P FORWARD DROP
 $IPTABLES -F FORWARD
 $IPTABLES -t nat -F
 $IPTABLES -A FORWARD -i $EXTIF -o $INTIF -m state --state ESTABLISHED,RELATED -j ACCEPT
 $IPTABLES -A FORWARD -i $INTIF -o $EXTIF -j ACCEPT
 $IPTABLES -A FORWARD -j LOG
 $IPTABLES -t nat -A POSTROUTING -o $EXTIF -j MASQUERADE
 echo -e "done.\n"
 
Сохраним это в файлик в /etc/profile.d и назовем его, к примеру masq.sh.
 Делаем его исполняемым и выполняем
 
 sudo chmod +x /etc/profile.d/masq.shsudo sh /etc/profile.d/masq.sh
 
После этих действий нужно «опустить» а потом снова «поднять» сетевой интерфейс eth1
 
 sudo ifonfig eth1 downsudo ifonfig eth1 up
 
После чего клиенты смогут получать IP адреса и пользоваться инетом )))
 А теперь мы настроим шейпер, в принципе для этого все и задумывалось, для того что бы динамически делить скорость инета.
 Я выбрал для шейпера скрипт htb.init который можно скачать тут sourceforge.net/projects/htbinit/
 
 sudo cp htb.init /etc/init.d/htbsudo chmod +x /etc/init.d/htb
 sudo update-rc.d htb defaults
 
В папке, в которую указывает HTB_PATH, (лично я поправил эту переменую
и у меня получилось /etc/htb, естественно этой папки в системе нет ее
нужно создать) создаем следующие файлы:
 eth1:
 
 R2Q=20DEFAULT=0
 
R2Q — коэффициент, определяющий соотношение точности/скорости работы шейпера
 DEFAULT — идентификатор класса, в который попадают пакеты, если
они не попадают под другие правила. Класс с идентификатором 0
существует всегда и пропускает пакеты без всякого шейпинга, то есть на
полной скорости.
 Этим файлом мы инициализировали шейпер на интерфейсе eth0.
 eth1-2.root:
 
 RATE=24MbitЭтим файлом мы создали корневой класс траффика на интерфейсе eth0 и
ограничили максимальную скорость отдачи через этот класс 24 мегабитами.
 eth1-2:2001:
 
 RATE=512KbitCEIL=24Mbit
 LEAF=sfq
 RULE=10.2.2.10/24
 
Этим файлом мы создали класс для первого клиента.
 RATE — гарантируемая скорость для клиента. Поскольку в нашем случае не
нужно гарантировать никакой скорости, но HTB этого требует, исходим из
неравенства: 24000Кбит / 3 > RATE.
 CEIL — максимальная скорость для клиента при свободном канале.
 LEAF — указывает, что класс является одним из листов дерева, то
есть в него попадает трафик, удовлетворяющий определенному правилу
(RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса
скорость распределялась равномерно между сессиями.
 RULE — правило, задающее, какой трафик будет попадать в этот
класс (см. Замечание 1). В данном случае в класс попадает весь трафик,
имеющий IP назначения от 10.2.2.10 до 10.2.2.255.
 О назначении и значениях параметров, которые указываются в файлах, и о
именах файлов можно узнать из скрипта htb.init — там вверху есть
неплохая справка.
 Стартуем наш шейпер
 
 sudo /etc/init.d/htb startВсё, шейпер включен. Далее, если что-то изменится в конфигруации, нужно сделать /etc/init.d/htb restart.
 Проверить работу скрипта htb.init, кроме спидтестов, можно просмотром конфигурации командами:
 
 tc class show dev eth1tc qdisc show dev eth1
 
 |  | Категория: Ubuntu | 
Просмотров: 2103 | 
Добавил: Maxs
 | Рейтинг: 0.0/0 |  Добавлять комментарии могут только зарегистрированные пользователи. [ Регистрация  | Вход  ] |  |  |  |  |  |  |  |