Traffic Shaping за допомогою htb.init
| 12 травня, 2008 |
Якщо ви маєте власну домашню локальну мережу, котра під’єднана до мережі Інтернет, ви напевне знайомі з тими проблемами пов’язані з одночасним доступом до кількох користувачів, які обов’язково виникають при такому підключенні.
Найсерйознішою і найбільш дратуючою проблемою є рівномірне розділення мережного каналу між усіма учасниками мережі: коли ви намагаєтесь працювати через ssh з віддаленим сервером, а в цей момент ваша дружина/брат/друг вирішує подивитись супер популярний відеоролик на YouTube, ваше з’єднання завмирає і ви моментально забуваєте про комфортну роботу. У цій маленькій статті я дам маленьке вирішення цієї проблеми, яке дозволить вам розділяти усе, що завгодно, не думаючи про проблеми розділення трафіку.
Зауважу, що у мене інтернет під’єднаний до інтерфейсу eth0, а локальна мережа — до eth1, я маю симетричне підключення на 512Kbit/s, і усі нижченаведені приклади засновуються на цьому.
Встановлюємо htb.init
Першим ділом звантажте зі сторінки http://sourceforge.net/projects/htbinit/ сценарій htb.init. Розпакуйте його і покладіть до /sbin/htb.init. Тепер зробіть його виконуваним:
# sudo chmod +x /sbin/htb.init
Конфігурація для вихідного трафіку
Створіть дві наступні теки, в яких будуть зберігатись конфігураційні файли та кеш:
# sudo mkdir -p /etc/sysconfig/htb
# sudo mkdir -p /var/cache/htb.init
Перейдіть до теки /etc/sysconfig/htb, і створіть там файл з іменем ‘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
Конфігурація для вхідного трафіку
Тепер створіть набір файлів для управління вхідним трафіком:
Файл ‘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 # Це моя ІР адреса PRIO=20
І файл ‘eth1-2:30.default’ для параметрів каналу за замовчуванням, для усіх інших, наступного змісту:
# default class for outgoing traffic RATE=256Kbit CEIL=512Kbit LEAF=sfq PRIO=30
Запуск htb.init
Тепер сміливо запускаємо htb.init:
# sudo /etc/init.d/htb.init start
Якщо ви не зробили ніде помилки, то тепер зможете спокійно використовувати свій канал для роботи через ssh, звантаження файлів або ж простого веб-серфінгу… Ваше з’єднання буде чесно ділитись між усіма учасниками домашньої локальної мережі. Якщо ви знаходитесь в мережі один, то вам віддадуть увесь канал. Як тільки ваші сусіди забажають щось звантажити, канал автоматично буде поділено між вами порівну, однак, ваша робота лишатиметься такою ж комфортною, якою була у той момент, коли ви були в мережі один.
Автор: Alexey Kovyrin




травня 13, 2008 at 10:47
Я так підозрюю пан трохи повоювавши із утилітою trickle та demmirror вирішив написати цю статтю. Я таку проблему вирішив можливо не так оптимально але на мою думку трохи простіше. Отже eth0 дивиться в інтернет. тоді достатньо виконати наступне
# tc qdisc add dev eth0 handle ffff: ingress
tc filter add dev eth0 parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 police rate 500kbit burst 10k drop flowid :1
у другій команді, параметер rate я задавав приблизно на 5-10 % менше ніж у мене пропускний канал. Ще зауважу що в мене це працює на укртелекомівському ОГО! тому у мене не eth0 а ррр0 і оскільки це є модемне з’єднаня яке деколи падає то я зробив скриптик наступного змісту
#!/bin/sh
tc qdisc add dev $PPP_IFACE handle ffff: ingress
tc filter add dev $PPP_IFACE parent ffff: protocol ip prio 50 u32 match ip src \
0.0.0.0/0 police rate 118kbit burst 10k drop flowid :1
який поклав у /etc/ppp/ip-up.d/
Наскільки я зрозумів, читавши LARTC, така штука ліквідує чергу пакунків у провайдера. У мене це спрацювало із укртелекомом.
PS а от на роботі – WIMAX, бездротова мережа. тут тайкий фокус не потрібно було робити, видно чи в провайдера коротка черга чи ще що але навіть великі закачки дозволяють працювати із тим-же ssh , щоправда воно трохи гальмить але жити можна. Може дійсно спробувати розкидати пакунки в різні черги щоб менше галмило ?