Linux Traffic Shaping За 5 Минут При Помощи htb.init
Если у Вас есть Ваша собственная домашняя сеть с двумя или более компьютерами и она подключена к интернету, вы точно знаете о тех проблемах с одновременным доступом к сети, которые практически неизбежны при таком подключении. Самой большой и раздражающей проблемой является разделение ширины канала между всеми участниками сети: когда вы пытаетесь работать серез ssh с удаленным сервером, а в этот момент ваша wife/брат/друг решает поглядеть новый и очень классный видео клип с Google Video или YouTube, Ваше соединение замирает и вы можете забыть о комфортабельной работе . В этой маленькой статье я дам вам простое решение этой проблемы, которое позволит вам делать все, что угодно не думая о проблемах разделения трафика!
Для начала замечу, что Ваша сеть должна быть подключена к Internet при помощи Linux сервера. Если Вы подключены через какой-то тупой аппаратный маршрутизатор, то Вам сильно не повезло и вы не сможете воспользоваться приведенным примером.
Если же Ваш сервер работает под управлением Linux, тогда используйте слудеющие ниже интсрукции чтобы сделать вашу жизнь проще. Замечу, что у меня интернет подключен к интерфейсу eth0, а локальная сеть – к eth1, канал у меня – симметричное подслючение на 512Kbit/s, потому все примеры будут очновываться на этих параметрах:
- Скачайте скрипт htb.init с сайта sourceforge.
- Распакуйте его и положите в /sbin/htb.init, сменив ему аттрибуты, чтобы сделать его исполнимым:
# chmod +x /sbin/htb.init
- Создайте каталоги для конфигурации и кеша htb.init:
# mkdir -p /etc/sysconfig/htb # mkdir -p /var/cache/htb.init
- Перейдите в каталог коныигурации 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
- Файл ‘eth0′ со следующим содержимым:
- Теперь, создайте набор файлов для управления входящим трафиком:
- Файл ‘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
- Файл ‘eth1′ со следующим содержимым:
- Последний шаг – запуск системы контроля трафика при помощи следующей команды:
# /sbin/htb.init start #
Если все шаги были выполнены правльно и успешно, Вы можете использовать Ваш канал для работы через ssh, для скачивания файлов или для простого серфинга… Ваше соединение будет честно делиться между всеми участниками домашней сети. Если вы находитесь в сети один, Вы будете использовать всю ширину канала. Как только ваши соседи захотят что-то скачать, ширина канала будет разделена между вами поровну, но ваша работа будет настолько же комфортной, как и в тот момент, когда Вы были одни.
Если хотите узнать больше, используйте следующие ресурсы:
- http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
- http://www.docum.org/stef.coene/qos/faq/
- http://tldp.org/HOWTO/ADSL-Bandwidth-Management-HOWTO/index.html
Related posts:
- Как настроить IP-IP-тунель между FreeBSD и Linux
- Обзор Неофициальных Репозитариев Пакетов Для Дистрибутива Debian GNU/Linux
- Linux User in Solaris 10 Survival Guide
- Настройка и оптимизация Red Hat Enterprise Linux для баз данных Oracle 9i и 10g
- Включение поддержки NCQ Queing на чипсетах ICH7 Chipsets под Linux

11 Responses to this entry
[...] Интересная статья, поясняющая как можно настроить шейпер в линуксе с помощью htb.init. [...]
Огромное спасибо за столь познавательную статью. Но, к сожалению, для меня этот способ не применим – у меня один интерфейс и для локалки, и для выхода в интернет.
Как можно ограничить трафик для “локальщиков” (от меня забирают по ftp)?
Система Gentoo Linux.
Это можно сделать используя iproute2. Документ описывающий детали: Linux Advanced Routing & Traffic Control Howto. Доступен бесплатно
Видел и в е-донкей сети и в и-нете, только не помню где.
Здесь – http://lartc.org/
pdf ~700kB
Спасибо, почитаю…
Один знакомый нарисовал вот такую штуку…
мож кому поможет
#!/bin/sh
# \$speedrate=1+(92*SPEED_OUT)/100;
# Arg Name Example
# $1 $PPP_IFACE Interface name ppp0
# $2 $PPP_TTY The tty ttyS1
# $3 $PPP_SPEED The link speed 38400
# $4 $PPP_LOCAL Local IP number 12.34.56.78
# $5 $PPP_REMOTE Peer IP number 12.34.56.99
# $6 $PPP_IPPARAM Optional “ipparam” value foo
echo ‘ UP ‘ `date` Local $PPP_LOCAL, Remote $PPP_REMOTE, Iface $PPP_IFACE, IPParam $PPP_IPPARAM, Speed $PPP_SPEED>> /var/log/pptp.log
TCC=”/usr/bin/tcng”
shaper () {
INTERFACE=${1}
RATE_IN=${2}
RATE_OUT=${3}
# CEIL_OUT=${4}
IPADDR=${4}
echo ‘ ‘ `date` “!!! SHAPER !!! $INTERFACE-$IPADDR { $RATE_IN / $RATE_OUT }”>> /var/log/pptp.log
# echo ‘ ‘ `date` “!!! SHAPER !!! $INTERFACE-$IPADDR { $RATE_IN / $RATE_OUT-$CEIL_OUT }”>> /var/log/pptp.log
subscript () {
INTERFACE=${1}
RATE_IN=${2}
RATE_OUT=${3}
# CEIL_OUT=${4}
IPADDR=${4}
echo ”
#define IFACE $INTERFACE
#define IPADDR $IPADDR
#define SPEED1_IN $RATE_IN
#define SPEED1_OUT $RATE_OUT
#define R2Q 7
dev IFACE {
/* ЙУИПДСЭЙК ФТБЖЙЛ */
egress {
\$speedceil=SPEED1_OUT;
\$speedrate=\$speedrate=1+(92*SPEED1_OUT)/100;
class ( );
drop if 1 ;
htb ( r2q R2Q ) {
class ( rate \$speedrate kbps, ceil \$speedceil kbps ) {
\$police = class ( rate \$speedrate kbps, ceil \$speedceil kbps ) { sfq ( perturb 10s ); }
}
}
}
/* ЧИПДСЭЙК ФТБЖЙЛ */
\$p = bucket(rate SPEED_IN kbps,burst 10kB);
ingress {
class (1) if conform \$p && count \$p;
drop if 1;
}
}
” | $TCC | sed “s/drop\/\(drop\|pass\)/drop/”
}
SHAPER=$( subscript $INTERFACE $RATE_IN $RATE_OUT $IPADDR )
IFS_OLD=$IFS
IFS=$’\n’
for TC_CMD in $SHAPER; do
echo $TC_CMD >> /var/log/pptp.cmd.log
eval $TC_CMD
done
IFS=$IFS_OLD
}
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/send_redirects
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/accept_redirects
echo “1″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/secure_redirects
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/accept_source_route
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/bootp_relay
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/proxy_arp
echo “0″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/log_martians
echo “1″ > /proc/sys/net/ipv4/conf/$PPP_IFACE/rp_filter
if [ "$PPP_IFACE" = "ppp99" ]; then
# обработка для внешнего канала
# shaper $PPP_IFACE 1024 128
else
# обработка для внутреннего канала
shaper $PPP_IFACE 64 256 $PPP_REMOTE
fi
Very useful guide. Thanks!
Regards,
Pablo from Argentina.
2_Andrey_
можно сделать средствами фтп сервера, например добавив в конфиг такую строку (proftpd)
TransferRate RETR,STOR,APPE 15 user !root
В данном случае мы ограничиваем закачку и скачивание всем пользователям на 15k кроме рута
подробнее http://andry.mine.nu/wordpress/?p=19
Thank you for a good traffic shapping guide, but I couldn’t understand what does eth1-2:10 mean? I mean that “10″. I’ve red about It. It’s about priority…But could someone explain It easily?
thanks
Please help – shaper for upload from IP
Плизз нужен шейпер чтоб можно было не только даунлоад резать но и аплоад…
Данное описание содержит ошибки:
Проблема 1:
При запуске
# /sbin/htb.init start
Получаем:
./htb.init: line 757: /var/cache/htb.init: Is a directory
**HTB: failed to compile HTB configuration!
Решение: Ошибка состоит в том, что мы создали папку /var/cache/htb.init а этого не следовало делать !!! Поскольку # /sbin/htb.init start пытается создать файл с таким же именем в данной папке и не может.
Проблема 2:
Все файлы которые мы создаем: eth0 и т.д. необходимо создавать не в папке /var/cache/htb.init а в папке # mkdir -p /etc/sysconfig/htb
Проблема 3:
может возникнуть предупреждение об ошибке типа:
find: warning: you have specified the -maxdepth option after a non-option argument (, but options are not positional (-maxdepth affects tests specified before it as well as those specified after it). Please specify options before other arguments.
В данном случае зайдите в файл htb.init и уберите знак # в строке HTB_BASIC=”yes”. В моей версии это была 412-я строка.