On Sun, Aug 31, 2008 at 1:40 PM, vladi <[EMAIL PROTECTED]> wrote:

> хи,
> оптивам се да направя ограничение на трафика на домашният рутер.
> като на интерфейса който е към вътрешната мрежа поставям правила, а не
> пипам интерфейса към доставчика
> идеята ми е проста от 10Мбит скорост, 4Мбит са за торенти, всичко
> останало ползва разликата, но тъйкато е вътрешен интерфейс ми трябва
> целите 100Мбит-а, ако прехвърлям инфо м/у рутера и някой от пц-тата. ето
> ми и правилата. проблема е, че торентите не се ограничават:
>
> tc qdisc add dev eth0 root handle 1: cbq bandwidth 100Mbit avpkt 1000
>
> tc class add dev eth0 parent 1: classid 1:1 cbq bandwidth 100Mbit rate
> 100Mbit \
> allot 1514 weight 100Mbit prio 8 maxburst 20 avpkt 1000
>
> tc class add dev eth0 parent 1:1 classid 1:10 cbq bandwidth 100Mbit rate
> 96Mbit \
> allot 1514 weight 96Mbit prio 5 maxburst 20 avpkt 1000 bounded #ceil 10Mbit
> tc class add dev eth0 parent 1:1 classid 1:11 cbq bandwidth 100Mbit rate
> 3000Kbit \
> allot 1514 weight 3000Kbit prio 0 maxburst 20 avpkt 1000 bounded #ceil
> 10Mbit
>
> tc qdisc add dev eth0 parent 1:10 sfq quantum 1514b perturb 15
> tc qdisc add dev eth0 parent 1:11 sfq quantum 1514b perturb 15
>
> tc filter add dev eth0 protocol ip parent 1:0 prio 5 handle 1 fw flowid
> 1:10
> tc filter add dev eth0 protocol ip parent 1:0 prio 0 handle 2 fw flowid
> 1:11
>
> qos_unpriv=1024:65535
> for i in tcp udp; do
> $ipt -t mangle -A FORWARD -p $i --sport ${qos_unpriv} --dport
> ${qos_unpriv} -j MARK --set-mark 2
> $ipt -t mangle -A FORWARD -p $i --dport 1:1024 -j MARK --set-mark 1
>        done
> $ipt -t mangle -A INPUT -i eth0 -j MARK --set-mark 1
>
> грешката някъде в правилата ли е или въобще в подхода ми?
>

С cbq не съм се занимавал никога, но преди време имах желание да напиша
кратко HowTo за HTB на български.  Липсата на време ме доведе до един
текстов файл, много забравени проби и т.н. Използвам случайя  суровото ми
писание да види бял свят. Надявам се да ти помогне. Като цяло мисля, че няма
смисъл да се бориш с cbq.

Прикачам текстов файл. Всякакви конструктивни критики са добре дошли.
Запазвам си правата върху написаното. Ако има грешки - не нося отговорност
:)

Поздрави:
--Росен
Ïðåäàâàíåòî íà äàííè ñå õàðàêòåðèçèðà ñúñ ñêîðîñò. Ñêîðîñòòà ïîêàçâà êîëêî 
äàííè ìîãàò äà áúäàò ïðåäàäåíè çà åäèíèöà âðåìå. Â ìðåæèòå ñêîðîñòòà ñå ìåðè â 
áèòîâå çà ñåêóíäà (èëè ïðîèçâîäíè).

×åñòî ñå íàáëþäàâàò ñèòóàöèè, â êîèòî ñêîðîñòòà, ñ êîÿòî èñêàìå äà ïðåäàâàìå 
äàííè å ïî-ãîëÿìà îò ñêîðîñòòà, ñ êîÿòî ìîæåì äà ïðåäàâàìå äàííè. Ïîëó÷àâà ñå 
çàäðúñòâàíå. Îò òîâà ñå íàáëþäàâàò ðåäèöà íåãàòèâíè ÿâëåíèÿ: çàãóáà íà ïàêåòè 
(packet loss), ïîâèøàâàíå íà çàêúñíåíèÿòà (delay), âàðèðàíå íà çàêúñíåíèÿòà 
(jitter). Âåðîÿòíî èìà è äðóãè (ìîëÿ äîïúëíåòå).

Ëèíóêñ îò ñâîÿ ñòðàíà ïðåäëàãà ðåøåíèÿ çà êîíòðîë íà òðàôèêà, êîèòî ðåøàâàò 
îïèñàíèòå ïî-ãîðå ïðîáëåìè.

Ùå ðàçãëåäàìå ïîíÿòèåòî queueing disciplines èëè ñàìî qdisc.
Ïðåäñòàâåòå ñè åäíà qdisc êàòî êîíâåéð, îïàøêà èëè êîíòðîëåí ïîñò, ïðåç êîéòî 
òðàôèêúò ïðåìèíàâà è ñå ìàíèïóëèðà ïî íÿêàêúâ íà÷èí. Qdisc áèâàò äâà âèäà: 
òàêèâà, êîèòî ïîääúðæàò êëàñîâå, èëè òàêèâà, êîèòî íå ïîääúðæàò êëàñîâå. 

Ïðèìåð çà áåçêëàñîâà qdisk e pfifo_fast. Â ñåáå ñè òÿ èìà òðè ïîäïîòîêà: 0, 1 è 
2. Ñïîðåä TOS áèòîâåòå íà ïàêåòèòå, ÿäðîòî ãè ïîäðåæäà â ïîòîê 0, 1 èëè 2. Ñëåä 
òîâà ïðåäàâàíåòî íà ïàêåòèòå ñëåäâà ïðàâèëîòî: ïàêåòèòå îò ïîòîê 1 ñå ïðåäàâàò, 
ñàìî àêî íÿìà ïàêåòè â ïîòîê 0. Ïàêåòèòå îò ïîòîê 2 ñå ïðåäàâàò ñàìî àêî íÿìà 
ïàêåòè â ïîòîê 1. Îò òîâà ñëåäâà, ÷å êàêâîòî ïîïàäíå â ïîòîê 0, èìà íàé-ãîëÿì 
ïðèîðèòåò è ñå ïðåäàâà ïúðâî, äîêàòî ïîïàäíàëîòî â ïîòîê 1 è 2 èç÷àêâà. 

Ïî ïîäðàçáèðàíå êúì âñåêè ìðåæîâ èíòåðôåéñ å ïðèëîæåíà ãîðåñïîìåíàòàòà 
pfifo_fast. Öåëèÿò èçõîäÿù òðàôèê ïðåìèíàâà ïðåç íåÿ è ñå ìàíèïóëèðà êàêòî 
îïèñàõìå.
Ìîæåì äà âèäèì òîâà ñ êîìàíäàòà: tc -s -d qdisc show dev eth0
È çà äà ñå óâåðèì, ÷å òÿ íÿìà êëàñîâå èçïúëíÿâàìå êîìàíäàòà: tc -s -d class 
show dev eth0
êîÿòî âðúùà ïðàçåí ðåçóëòàò.

Äî òóê äîáðå! pfifo_fast ïðàâè îïèò çà ðàçðåøàâàíåòî íà ïðîáëåìèòå íè, íî óâè 
òîâà íå å äîñòàòú÷íî.

Ìàðòèí Äåâåðà ñå å ïîòðóäèë äàëå÷ ïîâå÷å è å ñúçäàë ñâîÿ qdisc íàðå÷åíà HTB. 
×ðåç íåÿ, áëàãîäàðåíèå íà âãðàäåíàòà ïîääðúæêàòà íà êëàñîâå, íèå ìîæåì äà 
ñúçäàäåì ðàçêëîíÿâàùà ñå äúðâîâèäíà ñòðóêòóðà, â êîÿòî òðàôèêúò íè äà ïðåìèíàâà 
è äà áúäå ãúâêàâî ìàíèïóëèðàí ïî íàøå æåëàíèå.

Ñöåíàðèè 1:
Èìàìå ìðåæà îò òðè êëèåíòñêè ñòàíöèè è åäèí Ëèíóêñ ðóòåð, ïðåç êîéòî ìèíàâà 
âðúçêàòà íè êúì Èíòåðíåò. Èíòåðíåò äîñòàâ÷èêúò íè ïîçâîëÿâà äà ïðåäàâàìå äàííè 
êúì Èíòåðíåò (upload) ñúñ ñêîðîñò 400KB/sec. Íàøàòà öåë å äà ðàçäåëèì ïî ðàâíî 
òîçè êàïàöèòåò íà âñåêè åäèí êîìïþòúð â ìðåæàòà íè, â òîâà ÷èñëî è íà Ëèíóêñ 
ðóòåðà (ùå äåëèì íà ÷åòèðè). Ïî òîçè íà÷èí âñåêè ùå ìîæå äà ïðåäàâà äàííè êúì 
Èíòåðíåò (äà úïîëîóäâà) ñúñ ìàêñèìàëíà ñêîðîñò 100KB/sec. Òàêà íèêîé íÿìà äà 
çàåìà îò çàäåëåíîòî çà äðóãèòå,
íÿìà äà èìà çàäðúñòâàíå è âåðîÿòíî ùå èçáåãíåì ïîñî÷åíèòå ïðîáëåìè.

Çà öåëòà å íóæíî äà ïðèêà÷èì HTB áàçèðàíà qdisc íà èçõîäÿùèÿ (òîçè êúì 
Èíòåðíåò) èíòåðôåéñ íà íàøèÿ Ëèíóêñ ðóòåð. Íåêà çà ïðèìåðèòå ïî-äîëó òîâà å 
eth0.

Èçïúëíÿâàìå ñëåäíèòå êîìàíäè:

tc qdisc add dev eth0 root handle 1: htb default 100
tc class add dev eth0 parent 1: classid 1:11  htb rate 100kbps
tc class add dev eth0 parent 1: classid 1:12  htb rate 100kbps 
tc class add dev eth0 parent 1: classid 1:13  htb rate 100kbps
tc class add dev eth0 parent 1: classid 1:100 htb rate 100kbps

è ïîëó÷àâàìå ñëåäíîòî âúîáðàæàåìî äúðâî:


                      1:---o  root qdisc
                    / | \   \
                   /  |  \   \
                  /   |   \   \
                 /    |    \   \
                /     |     \   \
              1:11  1:12  1:13  1:100   parent classes


Ïúðâèÿò ðåä ïðèêà÷âà htb áàçèðàíàòà qdisc êúì eth0. Ïðàìåòúðúò "root" ïîêàçâà, 
÷å òÿ å îñíîâíà. Âñåêè èíòåðôåéñ èìà ñàìî åäíà òàêàâà. Íåéíîòî èìå å "1:0" èëè 
íà êðàòêî "1:". Ñëåäâàùèòå ðåäîâå äîáàâÿò ÷åòèðè ðîäèòåëñêè êëàñà ñúñ èìåíà 
1:11, 1:12, 1:13 è 1:14. È ÷åòèðèòå ðîäèòåëñêè êëàñà èìàò ãàðàíòèðàíà ñêîðîñò 
íà ïðåäàâàíå íà äàííèòå îò 100KB/sec è íå ìîãàò äà ÿ ïðåìèíàò. Òåçè êëàñîâå ñå 
íàðè÷àò ðîäèòåëñêè, çàùîòî ñà äèðåêòíî ïðèêà÷åíè êúì îñíîâíàòà qdisc. Öåëòà íè 
å äà ïîñòàâèì òðàôèêà îò òðèòå íè êîìïþòúðà ñúîòâåòíî â êëàñ 1:11, 1:12 è 1:13, 
à êëàñ 1:100 ùå îñòàíå çà òðàôèêà ëîêàëíî ãåíåðèðàí îò Ëèíóêñ ðóòåðà.

Âúâåæäàìå ïîíÿòèåòî êëàñèôèöèðàíå (classifying). ×ðåç êëàñèôèöèðàíåòî íèå ùå 
îïðåäåëÿìå êîé òðàôèê â êîé êëàñ äà ïîïàäa. 

Çà ìîìåíòà òîâà âñå îùå òîâà íå å ïîêàçàíî. Òîãàâà âúçíèêâà âúïðîñúò: â êîé 
êëàñ ïîïàäà öåëèÿò òðàôèê? Çà äà íå ñòàâà îáúðêâàíå íà ïîìîù èäâà ïàðàìåòúðúò 
"default 100". Òîé èçðè÷íî íàñî÷âà íåêëàñèôèöèðàíèÿ òðàôèê êúì êëàñ 1:100. Êàòî 
êðàåí ðåçóëòàò, êúì ìîìåíòà, íèå îãðàíè÷èõìå ñêîðîñòòà íà ïðåäàâàíå íà äàííè íà 
ìðåæàòà íè äî 100KB/sec çà âñè÷êî è çà âñè÷êè. Ëîøî!

Çà äà êëàñèôèöèðàìå òðàôèöèòå ãåíåðèðàíè îò êîìïþòúð 1, 2 è 3 èçïúëíÿâàìå 
ñëåäíîòî:
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.4 
flowid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.5 
flowid 1:12
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.6 
flowid 1:13

Òåçè òðè ðåäà äîáàâÿò ôèëòðè çà êëàñèôèöèðàíå, ïðèêà÷åíè âúâ âúçåë 1:0 íà 
íàøåòî äúðâî. Êîãàòî äàäåí ïàêåò ïðåìèíå ïðåç âúçåëà ñå ïðîâåðÿâà îò êîé IP 
àäðåñ ïðîèçõîæäà è ñå ïîñòàâÿ â ñúîòâåòíèÿ êëàñ. Äîïúëíèòåëíî ìîæåì äà äîáàâèì 
êëàñèôèêàòîð, êîéòî ïîñòàâÿ òðàôèêà íà ðóòåðà íè â êëàñ 1:100, íî òîâà å 
èçëèøíî çàðàäè ïàðàìåòúðà íè "default 100".

Îáúðíåòå âíèìàíèå, ÷å àêî ðóòåðúò îò îïèòíàòà ïîñòàíîâêà ðåàëèçèðà NAT, 
îïèñàíîòî êëàñèôèöèðàíå íÿìà äà ñðàáîòè, çàùîòî âñè÷êè ïàêåòè êúì ìîìåíòà íà 
ïðåìèíàâàíå ïðåç âúçåëà 1:0 ùå áúäàò ñ âúíøíèÿ IP àäðåñ íà ðóòåðà íè. Òå, êàêòî 
ñïîìåíàõìå, ùå ïîïàäàò â êëàñ 1:100. Ñúùî òàêà òðàôèêúò íà âñåêè äîïúëíèòåëíî 
ñâúðçàí êúì ìðåæàòà êîìïþòúð, çà êîéòî âñå îùå íÿìà ñúçäàäåí êëàñèôèöèðàù 
ôèëòúð, ùå ïîïàäà â êëàñ 1:100, çàùîòî òîçè å êëàñúò ïî ïîäðàçáèðàíå.


Ñöåíàðèè 2:
Îïèñàíàòà äî òóê ïîñòàíîâêà îãðàíè÷àâà òâúðäî ñêîðîñòòà íà ïðåäàâàíå äî 
100KB/sec. Íåêà äà ðàçøèðèì çàäà÷àòà è äà äîáàâèì ñëåäíîòî èçèñêâàíå: àêî äàäåí 
êîìïþòúð íå èçïîëçâà çàäåëåíèÿ ìó êàïàöèòåò, òî íåêà òîé äà ñå ðàçïðåäåëÿ ìåæäó 
îñòàíàëèòå. Êàòî ñëåäñòâèå îò òîâà å î÷åâèäíî, ÷å àêî òðè îò íàøèòå êîìïþòðè íå 
ðàáîòÿò, òî âñè÷êèòå 400KB/sec ùå çà íà ðàçïîëîæåíèå íà ÷åòâúðòèÿ. Âçàèìíîòî 
ïðåðàçïðåäåëÿíå íà ñâîáîäåí êàïàöèòåò ñå íàðè÷à borowing (âçåìàíå íà çàåì). 
Ðîäèòåëñêèòå êëàñîâå, îáà÷å, íå ìîãàò äà ñè îòäàâàò êàïàöèòåò åäèí íà äðóã. 
Òàêàâà ôóíêöèîíàëíîñò å ïðèñúùà ñàìî íà êëàñîâåòå íàñëåäíèöè. Çà öåëòà 
èçïúëíÿâàìå ñëåäíîòî:

tc qdisc del dev eth0 root
tc qdisc add dev eth0 root handle 1: htb default 100
tc class add dev eth0 parent 1:  classid 1:1   htb rate 400kbps
tc class add dev eth0 parent 1:1 classid 1:11  htb rate 100kbps ceil 400kbps
tc class add dev eth0 parent 1:1 classid 1:12  htb rate 100kbps ceil 400kbps 
tc class add dev eth0 parent 1:1 classid 1:13  htb rate 100kbps ceil 400kbps
tc class add dev eth0 parent 1:1 classid 1:100 htb rate 100kbps ceil 400kbps
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.4 
flowid 1:11
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.5 
flowid 1:12
tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32 match ip src 1.2.3.6 
flowid 1:13

è ïîëó÷àâàìå ñëåäíîòî âúîáðàæàåìî äúðâî:

                      1:      root qdisc
                       |
                      1:1--o  parent class
                    / | \   \
                   /  |  \   \
                  /   |   \   \
                 /    |    \   \
                /     |     \   \
              1:11  1:12  1:13  1:100  child classes


Êúì îñíîâíàòà qdisc 1: å ïðèêà÷åí åäèí ðîäèòåëñêè êëàñ 1:1 ñ ìàêñèìàëíà ñêîðîñò 
íà ïðåäàâàíå 400KB/sec. À êúì íåãî ñà êëàñîâåòå 1:11, 1:12. 1:13 è 1:100, êîèòî 
âå÷å ñà êëàñîâå íàñëåäíèöè, à íå êëàñîâå ðîäèòåëè. Òå (íàñëåäíèöèòå) èìàò íîâ 
ïàðàìåòúð "ceil". Òîçè ïàðàìåòúð îïðåäåëÿ ìàêñèìàëíàòà íåãàðàíòèðàíà ñêîðîñò íà 
ïðåäàâàíå íà äàííè çà äàäåí êëàñ, êîÿòî òîé ìîæå äà äîñòèãà ÷ðåç âçåìàíå íà 
çàåì îò äðóãè êëàñîâå, êîèòî íå èçïîëçâàò ñâîÿ êàïàöèòåò. Ïîëó÷åíîòî ðåøåíèå 
èìà ñëåäíîòî ïîâåäåíèå:

- Àêî âñè÷êè êîìïþòðè ïðåäàâàò ñ ìàêñèìàëíà ñêîðîñò, òî òå ñà îãðàíè÷åíè îò 
100KB/sec âñåêè. Àêî åäèí êîìïþòúð íàìàëè ïðåäàâàíàòà ñè ñêîðîñò äî 10KB/sec, 
òî íåãîâèòå ñâîáîäíè 90KB/sec ñå ðàçïðåäåëÿò ìåæäó îñòàíàëèòå òðè êîìïþòúðà ïî 
ðàâíî, ò.å. 30KB/sec, êàòî äîñòèãíàòàòà îò òÿõ ñêîðîñò ñòàâà 130KB/sec çà 
âñåêè. - Àêî ñëåä òîâà îùå åäèí êîìïþòúð çàïî÷íå äà ïðåäàâà ñúñ ñêîðîñò îò 
10KB/sec, òî è íåãîâèÿò îñòàòú÷åí íåçàåò êàïàöèòåò ñå ðàçïðåäåëÿ ìåæäó 
îñòàíàëèòå, êîèòî èìàò íóæäà. Îáùî ïîëó÷àâàìå ñëåäíîòî ðàçïðåäåëÿíå: 
190+190+10+10=400KB/sec. 
_______________________________________________
Lug-bg mailing list
[email protected]
http://linux-bulgaria.org/mailman/listinfo/lug-bg

Reply via email to