Домашний интернет 30 Мбит/c. Уж никогда не думал, что его будет мало и придется делать приоритет определенного трафика. И так, имеем несколько компов, телевизор, телефоны, тв приставка и все это хозяйство желает интернета. Да и конечно куда без торрентов, ftp, vpn, iptv и прочего. Настраивать будем при помощи скрипта HTB.init
И так, начнем. Мы имеем интернет-шлюз работающий CentOS 6.2 с двумя интерфейсами eth0(Локальная сеть), eth1(Интернет) и скрипт HTB.init. Скрипт настраивает пропускную способность канала с помощью утилит ip, tc. Управлять можно только исходящим из интерфейса трафиком, поэтому для eth0 будут правила для upload трафика пользователей, а для — eth1 — download трафика.
Сайт проекта: http://sourceforge.net/projects/htbinit/
Задача:
Разделить максимальную скорость для каждого клиента поровну. При загруженном канале, пропускную способность канала делить поровну.
Приоритет по трафику выстроим, исходя из списка ниже:
ssh — администрирование серверов
web — весь веб трафик
ftp — трафик с ftp сервера, находящегося на шлюзе
torrent (использую transmission и порт 51413)
не классифицируемый трафик
также хотелось бы, чтобы локальный трафик вообще не резался )
Подготавливаем
Скачиваем
wget https://xaxatyxa.ru/download/htb.init-v0.8.5.tar
Распаковываем
tar -xf htb.init-v0.8.5.tar
Скопируем в папку, где лежат все службы(демоны)
cp htb.init-v0.8.5 /etc/init.d/htb
Подправим пути. (Делается это только для удобства)
vi /etc/init.d/htb
Ищем строчки
### Default HTB_PATH & HTB_CACHE settings HTB_PATH=${HTB_PATH:-/etc/sysconfig/htb} HTB_CACHE=${HTB_CACHE:-/var/cache/htb.init}
И меняем
HTB_PATH=${HTB_PATH:-/etc/sysconfig/htb}
на
HTB_PATH=${HTB_PATH:-/etc/htb}
Создадим папку, где будут лежать конфигурационные файлы (если правили)
mkdir -p /etc/htb
Создадим папку, где будет лежать кеш
mkdir -p /var/cache/htb.init
Переходим в папку с конфигурационными файлами
cd /etc/htb/
Настраиваем правила для eth1 (трафик идущий в интернет):
echo -e "DEFAULT=100\n""R2Q=100" >> /etc/htb/eth1
R2Q — коэффициент, определяющий соотношение точности/скорости работы шейпера
DEFAULT — идентификатор класса, в который попадают пакеты, если они не попадают под другие правила.
Описываем ширину канала
echo -e "RATE=30Mbit\n""CEIL=30Mbit" >> /etc/htb/eth1-2.full30Mbit
Корневой класс интерфейса eth1. Ограничение максимальной скорости отдачи до 30 мегабит.
SSH-трафик
echo -e "RATE=128Kbit\n""CEIL=30Mbit\n""RULE=*:22\n""PRIO=1\n""BURST=100Kb" >> /etc/htb/eth1-2:10.ssh
RATE — гарантируемая скорость для клиента.
CEIL — максимальная скорость для клиента при свободном канале.
RULE — правило, задающее, какой трафик будет попадать в этот класс.
PRIO — приоритет трафика очереди к другим очередям в классе.
BURST — максимальный объем трафика, который будет передан на максимальной скорости перед тем, как перейти к передаче данных других классов
Веб-трафик
vi /etc/htb/eth1-2:20.web
Содержимое файла:
RATE=1Mbit CEIL=30Mbit BURST=15k LEAF=sfq RULE=*:80
RATE — гарантируемая скорость для клиента.
CEIL — максимальная скорость для клиента при свободном канале.
LEAF — указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями.
RULE — правило, задающее, какой трафик будет попадать в этот класс. В данном случае в класс попадает весь веб-трафик (80 порт).
FTP-трафик
vi /etc/htb/eth1-2:30.ftp
Содержимое файла:
RATE=128Kbit CEIL=30Mbit RULE=*:21 PRIO=1
Torrent-трафик
vi /etc/htb/eth1-2:30.torrent
Содержимое файла:
RATE=128Kbit CEIL=30Mbit RULE=*:51413 PRIO=1
Не классифицируемый трафик
echo -e "RATE=30Mbit\n""CEIL=30Mbit\n""LEAF=sfq" >> /etc/htb/eth1-2:100.default
Настраиваем правила для eth0 (трафик идущий в локальную сеть):
echo -e "DEFAULT=100\n""R2Q=100" >> eth0
Описываем ширину канала
echo -e "RATE=100Mbit" >> eth0-2.full100Mbit
Локальный трафик
vi /etc/htb/eth0-2:10.local
Содержимое файла:
RATE=1Kbit CEIL=100Mbit LEAF=sfq # из локальной сети по внутреннему адресу шлюза RULE=192.168.0.0/24,192.168.0.0/24 # из локальной сети по внешнему адресу шлюза RULE=ВАШ_ВНЕШНИЙ_ИП/МАСКА,192.168.0.0/24 PRIO=10
SSH-трафик
echo -e "RATE=256Kbit\n""CEIL=30Mbit\n""LEAF=sfq\n""RULE=*:22\n""PRIO=10" >> eth0-2:20.ssh
Веб-трафик
vi /etc/htb/eth0-2:30.web
Содержимое файла:
RATE=1Mbit CEIL=30Mbit BURST=15k LEAF=sfq RULE=*:80
Не классифицируемый трафик
echo -e "RATE=1Kbit\n""CEIL=30Mbit\n""LEAF=sfq\n""PRIO=30" >> eth0-2:100.default
Проверить работу скрипта htb.init, можно просмотром конфигурации командами:
tc class show dev eth0 tc qdisc show dev eth0 tc class show dev eth1 tc qdisc show dev eth1
[download id=»73″ format=»1″]
[download id=»74″ format=»1″]
Спасибо.
Хотя я бы уже переписал. Что немного позже и сделаю
Ага, прям так торрент трафик и перекрыл 😀