ANAVARO.COM
BDSMblogfungeek timeHowTomiskPCГостиличнина пътприказкисоциалнифилософия
  • January 2012
  • December 2011
  • November 2011
  • October 2011
  • September 2011
  • August 2011
  • July 2011
  • June 2011
  • May 2011
  • April 2011
  • March 2011
  • February 2011
  • ChangeLogSeriesИзвратеност for dummies

    qdisc htb … или лесен за правене shaper

    И така … седя си аз на работа и се чудя как да се боря с големите лоши потребители, които ми заемата канала и не мога да си играя играта и да си точна порното. Ядосвам се! Писна ми да ги забранявам IP по IP. Зачетах се из интернет … добрия стар чичо Google ме препрати към lartc.org . Изтеглих си аз ръководството от там (препоръчвам го н а всички) и се хванах да го прочета. О очудване! То Правенето на shaper не било сложно!

    Този shaper работи в моята мрежа. Не твърдя да е сложен, защото нямам нужда да се боря с хакери (потребителите ми са “многознайковци” (вие представяте ли си идота който ми се развика защо нямал нет, като се оказа, че сам си е преинсталирал Windows-a  и не е сложил драйвери за дъно и LAN)).

    Така, сега по същество:

    Конструкция:

    Имам 3 LAN мрежи:

    192.168.0.0/24 – локална мрежа за администрацията, най-често използвана за служебни задължения, с изключение на 1 поттребител.

    192.168.10.0/24 – локална мрежа за залата за обучение, която и трябва web, с изключение на 2-те машини зад които седя.

    192.168.3.0/24 – Wi-Fi мрежа за гостите на хотела, която е отворена и безотчетна

    Имам 12 Mbit/s biz download на 2Mbit/s upload от приятелите от БТК.

    Slackware 12 машинка с 2 LAN карти (WAN и LAN)

    Защо HTB?

    HTB, ли? Ми защото се пише по-лесно от CBQ, а и в кернела-а на моя комп го има. Няма да ви лъжа, че е по-стабилен или по-напреднал. Аз съм си мързелив. Просто ми е най-лесен.

    Лимитации.

    За съжаление qdisc не се справя много добре с shape на igress трафик, за това се възползва от опцията на мрежовите протоколи да пращат само колкото бързо можеш да получиш. За това ще работим с egress трафика (изходящия).

    Началото.

    #/bin/sh
    WAN=eth1
    LAN=eth2

    Дефинираме bash скрипта и дефинираме LAN картите. Тук е мястото тези от вас които си вдигат лан картите или правят специфични настройки като “ip a a” да ги направят:

    ifconfig $LAN 192.168.0.1 netmask 255.255.255.0
    ifconfig $LAN:1 192.168.10.1 netmask 255.255.255.0
    ifconfig $LAN:2 192.168.3.1 netmask 255.255.255.0
    ip a a dev $WAN xx.xx.xx.xx

    Препръчвам да правите всички мрежови настройки преди да започнете да правите shape-а. Започваме с орязване на входящия тряфик. Както казахме, всъщност не можем да го орежем, но можем да ограничим и контролираме изхода от картата към вътрешните мрежи (в случая $LAN).

    tc qdisc del dev $LAN root
    tc qdisc add dev $LAN root handle 1: htb default 30

    Или преведено на човешки – изтрий всички устройства коит “висят” на интерфейс $LAN и добави root “устройство” закачено на $LAN с идентификатор 1: и използващо htb (честно казано не знам какво прави default и 30, но си ги търси). Следващата стъпка е да създадем “правила” за устрйството.

    tc class add dev $LAN parent 1: classid 1:1 htb rate 12000kbit ceil 12000kbit burst 15k
    tc class add dev $LAN parent 1:1 classid 1:10 htb rate 5000kbit ceil 12000kbit burst 15k prio 1
    tc class add dev $LAN parent 1:1 classid 1:20 htb rate 1000kbit ceil 2000kbit burst 15k prio 2

    Обяснявам и тук – добавяме клас 1:1 с “родител” 1: използвайки htb за контрол с минимална скорост 12000 kbit/s (винаги давайте по малки скорости от реалните) и максималан същата. Създаваме 2 “деца” на този клас 1:10 и 1:20. Като 1:10 има запазени 5000 kbit/s и максимум от 12000 kbit/s (когато има други клиенти има гарантирани 5000, но когато останалия канал е свободен, може да го ползва целия), 1:20 е с осигурен 1000 kbit/s и максимум от 2000 kbit/s. Сега, нека пратим трафика по класовете – това става с tc filter.

    tc filter add dev $LAN protocol ip parent 1: prio 1 u32 match ip dst 192.168.10.0/24 flowid 1:10
    tc filter add dev $LAN protocol ip parent 1: prio 1 u32 match ip dst 192.168.0.0/24 flowid 1:10
    tc filter add dev $LAN protocol ip parent 1: prio 2 u32 match ip dst 192.168.3.0/24 flowid 1:20

    Използваме така наречените u32 match-ове. В случая изпозлваме ip dst или destination ip. u32 позволява да се фитрира по много показатели:

    • dst
    • src
    • dport
    • sport
    • tos
    • protcol*

    *protocol филтъра взима променливите си от /etc/protcols, например ако icmp е 1, то match ip protocol 1 0xff

    като могат да се правят n на брой комбинации.

    И така какво имам до тук? Имаме едно “дърво”:

      1:
       |
      1:1
       /\
      /  \
     |    |
    1:10 1:20

    И филтри които да пращат към “клоните”. Това е за входящия трафик. Сега да направим същото за изходящия (извинете но тук няма да обяснявам, защото до сега го обясних достатъчно подробно). Та за $WAN интерфейса:

    tc qdisc del dev $WAN root
    tc qdisc add dev $WAN root handle 1: htb default 30
    tc class add dev $WAN parent 1: classid 1:1 htb rate 2000kbit ceil 2000kbit burst 15k
    tc class add dev $WAN parent 1:1 classid 1:10 htb rate 1000kbit ceil 2000kbit burst 15k prio 1
    tc class add dev $WAN parent 1:1 classid 1:20 htb rate 512kbit ceil 1000kbit burst 15k prio 2
    tc filter add dev $WAN protocol ip parent 1: prio 1 u32 match ip src 192.168.10.0/24 flowid 1:10
    tc filter add dev $WAN protocol ip parent 1: prio 1 u32 match ip src 192.168.0.0/24 flowid 1:10
    tc filter add dev $WAN protocol ip parent 1: prio 2 u32 match ip src 192.168.3.0/24 flowid 1:20

    След този момент вече сте свободни да работите с iptables и да си направите колкото си искате правила за портове и настройки.

    Отново подчертавам, че това е една малка и проста конструкция предиведна за SOHO мрежа. Както виждате има и слабо място, но смятам и това да изчистя. Когато го направя ще пиша още.

    Ваш,

    Lucifer


    VN:F [1.9.13_1145]
    Rating: 0.0/5 (0 votes cast)
    Под тагове: , , 6 коментара