|
|
www.lissyara.su
—> статьи
—> FreeBSD
—> настройка
—> DUMMYNET
Ограничение пропускной способности инета у пользователей
Автор: lissyara.
Наступил такой интересный момент - порнуха у пользователей зарезана, приличная часть сайтов развлекательного назначения тоже заразана, баннеры режутся, короче, зарезано очень и очень много. А вот потребление траффика больше не снижается :( Народ припугнутый "драконовскими" методами, типа по 200 мегабайт инета на каждого протянул недолго - месяца полтора - потом просекли, что если попросить то включают анлим :( (и, ввиду, дырявости моей памяти, забывают выключить...) Короче, было принято решение ограничить скорость работы с инетом. Мера проверенная ещё на старой работе, и действенная (но там было вообще жестоко - 2kB/s). Можно было ограничить скорость работы по протоколу HTTP средствами SQUID, но были отдельные грамотные товарищщи, которые тянули всякий хлам по ftp - поэтому нужно было зарезать все протоколы, для этого подходил DUMMYNET.
Сказано - сделано. Для начала правим конфиг ядра, туда надо добавить поддержку DUMMYNET, файрволла.
IPFIREWALL #enable ipfirewall (required for dummynet)
IPFIREWALL_VERBOSE #enable firewall output
IPFIREWALL_VERBOSE_LIMIT #limit firewall output
DUMMYNET #enable dummynet operation
NMBCLUSTERS #set the amount of network packet buffers
HZ #set the timer granularity
options IPFIREWALL
options DUMMYNET
options HZ=1000 # strongly recommended
| После чего пересобираем ядро. Если у Вас до этого ядро было без файрволла - то будте готовы к тому, что после перезагрузки он заработает, и в нём будет только одно правило:
Если файрволл есть, то в него надо добавить следующие строки (в самом верху):
# Сбрасываем ранее установленные правила:
${FwCMD} -f flush
# сбрасываем все pipe
${FwCMD} -f pipe flush
# сбрасываем очереди
${FwCMD} -f queue flush
# DUMMYNET
# учтите - чтобы пакеты не выпадали на трубе из файрволла (типа,
# как на разрешающем правиле) надо поставить переменную sysctl
# net.inet.ip.fw.one_pass в 0 (по дефолту - 1) и внести это в
# файл /etc/sysctl.conf - иначе при перезагрузке потеряется
${FwCMD} add pipe 1 ip from ${IpOut} to ${NetIn}/${NetMask}
${FwCMD} pipe 1 config bw 100Mbit/s
${FwCMD} add pipe 2 ip from ${IpIn} to ${NetIn}/${NetMask}
${FwCMD} pipe 2 config bw 100Mbit/s
# `спецтруба` для мелкиз пакетов типа ack - ибо если они теряются
# то повторные пакеты будут большего размера
${FwCMD} add pipe 3 ip from any to any tcpflags ack iplen 0-128
${FwCMD} pipe 3 config bw 100Mbit/s
# Пропускаем следующие трубы - чтобы мелкие пакеты не лимитировались
# пропускать надо до первого нормального (после труб) правила.
# я ему присвоил жёсткий номер - файрволл раздаёт номера с последнего правила
# (если номер жёстко не задан) с интервалом определяемым переменной sysctl
# net.inet.ip.fw.autoinc_step - по дефолту - 100
${FwCMD} add skipto 39999 ip from any to any tcpflags ack iplen 0-128
# запускаем счётчик
i=4
# цикл по $i
while [ $i != 252 ]
do
# добавляем трубу для IP адреса
${FwCMD} add pipe $i ip from not ${NetIn}/${NetMask} to 192.168.20.${i}
# проверяем - часом не мой ли это IP
if [ $i -eq 13 -o $i -eq 22 ]
then
# мой инет :)))
${FwCMD} pipe $i config bw 100Mbit/s
else
# не мой IP - режем скорость
${FwCMD} pipe $i config bw 64000 bit/s
fi
# увеличиваем $i на единичку
i=$(($i+1))
done
# проверяем временные правила (перед этим правилом возврщаются мелкие
# пакеты в файрволл) :
${FwCMD} add 40000 check-state
# разрешаем всё по интерфейсу lo0 (петля)
${FwCMD} add allow ip from any to any via lo0
| Где переменные:
${FwCMD} - /sbin/ipfw - собственно IPFW
${NetIn} - 192.168.20.0 - внутренняя сеть
${NetMask} - 24 - маска сети
${IpOut} - 222.222.222.222 - внешний IP сервака
Вкратце о том, что всё это делает: первые две pipe для того, чтобы не ограничивалась скорость работы с самим серваком - на нём лежит почта, кое какие файлы, и естественно от того, что почта принимается со скоростью 64k никто в восторге не будет, тем более, что внутри офиса довольно большой документооборот идёт именно по почте. Затем запускаем цикл по всем IP-шникам (я сделал не одно правило, а целую кучу (больше 200!), чтобы была большая гибкость в использовании - есть люди которым не надо ничего ограничивать, те же IT-шники, начальство...) В цикле (он специально сделан не с начала диапазона и не до конца - у меня вверху и внизу висят серваки - их ограничивать не надо вообще) добавляются именованые каналы и в зависимости от IP выставляется скорость - в примере приведено для 2-х адресов - 192.168.20.13 и 192.168.20.22 - можно сделать не такое жёсткое деление, используя не else, а elif. Выглядеть это будет так:
if [ $i -eq 13 -o $i -eq 22 ]
then
${FwCMD} pipe $i config bw 100000000 bit/s
elif [ $i -eq 18 -o $i -eq 38 ]
${FwCMD} pipe $i config bw 128000 bit/s
elif [ $i -eq 55 -o $i -eq 159 -o $i -eq 188 ]
${FwCMD} pipe $i config bw 256000 bit/s
else
${FwCMD} pipe $i config bw 64000 bit/s
fi
| В этом случае имеем всем скорость 64k, для адресов
192.168.20.13 и 192.168.20.22 - 100 мегабит,
192.168.20.18 и 192.168.20.38 - 128k,
192.168.20.55, 192.168.20.159 и 192.168.20.188 - 256k.
После чего перезапускаем файрволл следующей командой:
(при условии, что конфиг файрволла у Вас в файле /etc/rc.firewall). Для просмотра существующих pipe пользуемся командой
Только не забудьте & в конце - иначе может так получиться, что старые правила сбросятся, а новые не успеют примениться (в момент запуска этой команды соединение по ssh почти всегда обрывается.)
Ссылка на обсуждение: http://forum.lissyara.su/viewtopic.php?f=8&t=363.
размещено: 2005-11-29,
последнее обновление: 2006-05-18,
автор: lissyara
|
|
|
|
2014-07-27, lissyara
gmirror
Удалённое создание софтверного зеркала средствами gmirror, на диске разбитом с использованием gpart. Использование меток дисков для монтирования разделов.
2013-08-20, zentarim
Scan+Print server FreeBSD 9
Настройка сервера печати и сервера сканирования под управлением операционной системы FreebSD 9 для МФУ Canon PIXMA MP540
2011-11-20, BlackCat
Разъём на WiFi-карту
Делаем съёмной несъёмную антену на WiFi-карте путём установки ВЧ-разъёма
2011-09-14, manefesto
Настройка git+gitosis
Настройка системы контроля версия исходного кода в связке git+gitosis+ssh
2011-08-14, zentarim
Wi-FI роутер + DHCP + DNS
Настройка Wi-Fi роутера на Freebsd 8 + DNS сервер + DHCP сервер: чтобы Wi-Fi клиенты были в одной подсети с проводными, проводные и беспроводные клиенты получали адреса автоматически по DHCP, кэширующ
2011-06-15, -ZG-
Охранная система на FreeBSD+LPT
В этой статье описана попытка реализации простой охранной системы на базе FreeBSD с подключением к ней охранных устройтсв на LPT порт и видеорегистрацией.
2011-03-13, terminus
ng_nat
Описание работы ng_nat, практическое использование, достоинства и недостатки в сравнении с ipfw nat
2011-02-20, Капитан
Nagios+Digitemp
Статья описывает создание системы оповещения о превышении температуры в специальных помещениях на основе Nagios с использованием программы Digitemp.
2011-02-17, Le1
Zyxel Configuration
Скрипт для массового изменения конфига свичей Zyxel. Берет из файла iplist список ip-шек, заходит последовательно на каждый и выполняет комманды из файла commands, записывая происходящее в лог файл.
2011-02-16, fox
hast carp zfs ucarp cluster
HAST (Highly Available Storage), CARP, UCARP, ZFS, Cluster настройка и одаптация плюс личные размышления…
2011-02-04, BlackCat
Восстановление ZFS
История о том, как был восстановлен развалившийся RAIDZ ZFS-пул (перешедший в FAULTED) с помощью скотча и подручных средств. Или о том, какие приключения ожидают тех, кто не делает резервных копий.
2011-02-03, Капитан
1-Wire
Статья описывает самостоятельное изготовление контроллера DS9097 для съёма показаний с датчиков температуры DS1820 с помощью программы Digitemp.
2011-01-28, Капитан
Температура в серверной
Статья описывает построение системы наблюдения за температурой в помещении серверной с использованием программы Digitemp и выводом графиков в MRTG
2011-01-21, m4rkell
Syslog server
Как то буквально на днях, у нас завалилось, что то в еве) или не в еве не суть. Суть в том, что когда захотели снять логи с хостов esx обнаружили, что хранят эти негодяи логии только за последнии сутк
2011-01-07, lissyara
Canon/gphotofs
Монтирование цифровых фотоаппаратов Canon (PTP) как файловой системы, автоматизация этого процесса через события devd и внешние скрипты.
2010-12-13, Al
IPSec
Описание принципов работы IPSEC и способов аутентификации.
2010-12-07, manefesto
FreeBSD on flash
Было принято решении переехать на USB Flash и установить минимальный джентельменский набор для работы своего роутера. Делаем =)
2010-12-05, Fomalhaut
root ZFS, GPT
Инструкция по установке FreeBSD с использованием в качестве таблицы разделов GPT и в качестве основной файловой системы - ZFS
2010-09-05, Cancer
Настройка аудиоплеера на ximp3
Цели: Простенький аудиоплеер, для того что бы тетя продавец в магазине утром пришла нажала на кнопку Power и заиграла в зале музыка, так же был доступ по сети, общая шара куда можно заливать музыку, к
|
Статистика сайта
|
Сейчас на сайте находится: 34 чел.
|
За последние 30 мин было: 219 человек
|
За сегодня было 2934 показов, 734 уникальных IP
|
|
|
|
Этот информационный блок появился по той простой причине,
что многие считают нормальным, брать чужую информацию не уведомляя автора
(что не так страшно), и не оставляя линк на оригинал и автора — что более существенно.
Я не против распространения информации — только за. Только условие простое — извольте
подписывать автора, и оставлять линк на оригинальную страницу в виде прямой, активной, нескриптовой,
незакрытой от индексирования, и не запрещенной для следования роботов ссылки.
Если соизволите поставить автора в известность — то вообще почёт вам и уважение.
© lissyara 2006-10-24 08:47 MSK
|
|
|
Комментарии пользователей [20 шт.]