Linux-Bulgaria.ORG
навигация

 

начало

пощенски списък

архив на групата

семинари ...

документи

как да ...

 

 

Предишно писмо Следващо писмо Предишно по тема Следващо по тема По Дата По тема (thread)

Re: [Lug-bg] trafic limit


  • Subject: Re: [Lug-bg] trafic limit
  • From: "Rossen Antonov" <rossen.antonov@xxxxxxxxx>
  • Date: Sun, 31 Aug 2008 20:53:18 +0300



On Sun, Aug 31, 2008 at 1:40 PM, vladi <altoas@xxxxxxxxx> 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
Lug-bg@xxxxxxxxxxxxxxxxxx
http://linux-bulgaria.org/mailman/listinfo/lug-bg


 

наши приятели

 

линукс за българи
http://linux-bg.org

FSA-BG
http://fsa-bg.org

OpenFest
http://openfest.org

FreeBSD BG
http://bg-freebsd.org

KDE-BG
http://kde.fsa-bg.org/

Gnome-BG
http://gnome.cult.bg/

проект OpenFMI
http://openfmi.net

NetField Forum
http://netField.ludost.net/forum/

 

 

Linux-Bulgaria.ORG

Mailing list messages are © Copyright their authors.