# Software > Linux >  IP QoS, bw management με IP tables? DSL router (USR 9105)

## xaotikos

Λοιπόν έχω το US robotics 9105 το οποίο τρέχει BusyBox Embedded Linux with iptables v1.2.7a . 

Από ότι έχω διαβάσει μέσω του iptables μπορείς να κάνεις script και να ρυθμίζεις το bandwidth μεταξύ των 4 port του router. 

Ποιος μπορεί να μου δώσει κάποια starting points? Καταλαβαίνω ότι δεν πρέπει να είναι εύκολο οπότε όποιος ξέρει ας δώσει τουλάχιστον κάποια links να το ψάξω..

Για οποιεσδήποτε extra info για τον router ρωτήστε εντός  ::

----------


## apoikos

iptables manpage:


```
   limit
       This module matches at a limited rate using a token bucket
       filter.  A rule using this extension will match until this
       limit is reached (unless the `!' flag is used).  It can be
       used  in  combination  with the LOG target to give limited
       logging, for example.

       --limit rate
              Maximum average matching rate: specified as a  num-
              ber,   with   an   optional  `/second',  `/minute',
              `/hour', or `/day' suffix; the default is 3/hour.

       --limit-burst number
              Maximum initial number of packets  to  match:  this
              number  gets  recharged by one every time the limit
              specified above is not reached, up to this  number;
              the default is 5.
```

Πιθανότατα με αυτό το match θα γίνεται το bw management. Π.χ. κάνεις accept την forwarded traffic για μία θύρα μέχρι limit 30 πακέτα/sec και μετά βάζεις DROP Policy σε όλη την chain. Δεν το έχω δοκιμάσει, αλλά έτσι δείχνει να παίζει. Το αποτέλεσμα βέβαια αν αρχίσεις και κάνεις drop πακέτα είναι αβέβαιο. Καλύτερα δες αυτό που λέει ο paravoid πιο κάτω  ::

----------


## paravoid

iptables = filtering, mangling, translation, marking, logging κτλ.
Αυτό που θες, γίνεται με το 'tc' του iproute2, το έχει μέσα;
Δεν είναι καθόλου εύκολο, σε προειδοποιώ...

----------


## uNdErTaKeR

> Δεν είναι καθόλου εύκολο, σε προειδοποιώ...


Αλλά αν διαβάσεις και ένα καλό tutorial δεν είναι και δύσκολο!
http://lartc.org/howto/
Διάβασε αυτό και επικεντρώσου στην ενότητα 9:
9. Queueing Disciplines for Bandwidth Management

----------


## uNdErTaKeR

Στο linksys πάντως το περνάς σαν πακέτο και το έχω κάνει και λειτουργεί άψογα με CBQ

----------


## xaotikos

Οκ ευχαριστώ για τις πληροφορίες. Θα αρχίσω διάβασμα και θα επανέλθω με απορίες...

Φαίδωνα το υποψιάζομαι ότι δεν είναι εύκολο αλλά να κατεβάζει ο ένας με 200 και ο άλλος με 10 είναι σπαστικό (ιδίως αν συνεχιστεί για ένα χρόνο), οπότε πρέπει να βρω λύση.

----------


## uNdErTaKeR

> Οκ ευχαριστώ για τις πληροφορίες. Θα αρχίσω διάβασμα και θα επανέλθω με απορίες...
> 
> Φαίδωνα το υποψιάζομαι ότι δεν είναι εύκολο αλλά να κατεβάζει ο ένας με 200 και ο άλλος με 10 είναι σπαστικό (ιδίως αν συνεχιστεί για ένα χρόνο), οπότε πρέπει να βρω λύση.


Άμα θες μπορώ να σου στείλω το configuration που έχω κάνει για το Linksys μου.
Έχω 5 ενσύρματους clients και μοιράζω το ασύρματο με αυτούς. Το bandwidth μοιράζεται σε 5 αν τυχόν τραβάνε όλοι και αν όχι τότε ανάλογα με την ζήτηση το κάθε pc μπορεί να δανειστεί από το άλλο εφόσον το bandwidth δεν χρησιμοποιείται. Π.χ. αν μόνο 2 pc είναι ανοιχτά και κατεβάζουν, το bandwidth μοιράζεται στα 2!

----------


## pavlidisd

Δεν το ποστάρεις εδώ να το δούμε κι εμείς?

----------


## xaotikos

Αν δεν είναι μεγάλο βάλτο εδώ. Πάντως το θέλω φυσικά  ::

----------


## DVD_GR

και εγω ενδιαφερομαι.....

----------


## uNdErTaKeR

Sorry για την καθυστέρηση, μέχρι την Κυριακή θα το κάνω post.
Θέλω βασικά πρώτα να του κάνω κάποιες μικρές αλλαγές.

----------


## CyberFreak

Ελπίζω να μην ξεχάσεις να το κάνεις ένα paste κι εδώ...

----------


## uNdErTaKeR

```
#! /bin/sh

insmod /lib/modules/2.4.20/sched/sch_cbq.o
insmod /lib/modules/2.4.20/sched/sch_prio.o
insmod /lib/modules/2.4.20/sched/cls_u32.o
insmod /lib/modules/2.4.20/sched/sch_sfq.o
#======================================================
# UPLOADS
#======================================================

#root qdisc
tc qdisc add dev eth1 root handle 1: cbq bandwidth 1600Kbit avpkt 1000 cell 8
#######################################################
#Class 1:1 - Viktor
tc class add dev eth1 parent 1: classid 1:1 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow

#Interactive Traffic goes here
tc class add dev eth1 parent 1:1 classid 1:10 cbq bandwidth 1600Kbit \
rate 10Kbit weight 1Kbit prio 1 allot 1514 cell 8 maxburst 20 avpkt 1000 bounded
 isolated
tc qdisc add dev eth1 parent 1:10 handle 10: sfq perturb 10

#Http traffic goes here
tc class add dev eth1 parent 1:1 classid 1:20 cbq bandwidth 1600Kbit \
rate 1280Kbit weight 128Kbit prio 2 allot 1514 cell 8 maxburst 20 avpkt 1000 bor
row
tc qdisc add dev eth1 parent 1:20 handle 20: sfq perturb 10

#Bulk traffic
tc class add dev eth1 parent 1:1 classid 1:30 cbq bandwidth 1600Kbit \
rate 160Kbit weight 16Kbit prio 3 allot 1514 cell 8 maxburst 20 avpkt 1000 borro
w
tc qdisc add dev eth1 parent 1:30 handle 30: sfq perturb 10

######################################################
#Class 1:2 - Panos
tc class add dev eth1 parent 1: classid 1:2 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev eth1 parent 1:2 handle 2: sfq perturb 10

#Class 1:3 - Katerina
tc class add dev eth1 parent 1: classid 1:3 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev eth1 parent 1:3 handle 3: sfq perturb 10

#Class 1:4 - Server
tc class add dev eth1 parent 1: classid 1:4 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev eth1 parent 1:4 handle 4: sfq perturb 10


#Class 1:5 - Free IP
tc class add dev eth1 parent 1: classid 1:5 cbq bandwidth 1600Kbit \
rate 100Kbit weight 10Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev eth1 parent 1:5 handle 5: sfq perturb 10

#Filters
#=======================================================

#Victor Filter
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip src 10.162.0.8
flowid 1:1
#Interactive
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dport 22 0xffff
 flowid 1:10
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dport 23 0xffff
 flowid 1:10
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip dport 6667 0xff
ff flowid 1:10
#Http
tc filter add dev eth1 parent 1: protocol ip prio 2 u32 match ip sport 80 0xffff
 flowid 1:20
#Bulk
tc filter add dev eth1 protocol ip parent 1: prio 3 u32 match ip tos 0x08 0xff f
lowid 1:30

#Panos Filter
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip src 10.162.0.9
flowid 1:2

#Katerina Filter
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip src 10.162.0.10
 flowid 1:3

#Server Filter
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip src 10.162.0.11
 flowid 1:4

#Free IP
tc filter add dev eth1 parent 1: protocol ip prio 1 u32 match ip src 10.162.0.12
 flowid 1:5



#======================================================
# UPLOADS
#======================================================

#root qdisc
tc qdisc add dev vlan0 root handle 1: cbq bandwidth 1600Kbit avpkt 1000 cell 8

#Class 1:1 - Viktor
tc class add dev vlan0 parent 1: classid 1:1 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev vlan0 parent 1:1 handle 1: sfq perturb 10

#Class 1:2 - Panos
tc class add dev vlan0 parent 1: classid 1:2 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev vlan0 parent 1:2 handle 2: sfq perturb 10

#Class 1:3 - Katerina
tc class add dev vlan0 parent 1: classid 1:3 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev vlan0 parent 1:3 handle 3: sfq perturb 10

#Class 1:4 - Server
tc class add dev vlan0 parent 1: classid 1:4 cbq bandwidth 1600Kbit \
rate 320Kbit weight 32Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev vlan0 parent 1:4 handle 4: sfq perturb 10

#Class 1:5 - Free IP
tc class add dev vlan0 parent 1: classid 1:5 cbq bandwidth 1600Kbit \
rate 100Kbit weight 10Kbit allot 1514 cell 8 maxburst 20 avpkt 1000 borrow
tc qdisc add dev vlan0 parent 1:5 handle 5: sfq perturb 10

#Filters
#=======================================================

#Victor Filter
tc filter add dev vlan0 parent 1: protocol ip prio 50 u32 match ip dst 10.162.0.
8 flowid 1:1

#Panos Filter
tc filter add dev vlan0 parent 1: protocol ip prio 50 u32 match ip dst 10.162.0.
9 flowid 1:2

#Katerina Filter
tc filter add dev vlan0 parent 1: protocol ip prio 50 u32 match ip dst 10.162.0.
10 flowid 1:3

#Server Filter
tc filter add dev vlan0 parent 1: protocol ip prio 50 u32 match ip dst 10.162.0.
11 flowid 1:4

#Free IP
tc filter add dev vlan0 parent 1: protocol ip prio 50 u32 match ip dst 10.162.0.
12 flowid 1:5
```

Στο συγκεκριμένο script μοιράζεται το download και το upload σε 5 χρήστες του LAN. Το μοίρασμα είναι δυναμικό και ισχύει σε upload/download. Δεν υπάρχουν προτεραιότητες, (μόνο για το pc μου έχω βάλει προτεραιότητες- κλάση Victor) ο καθένας είναι υπεύθυνος, το δικό του μερίδιο να το χρησιμοποιεί όπως νομίζει αυτός καλύτερα.

Βασικά δεν πρόλαβα να το βελτιστοποιήσω, όπως είχα υποσχεθεί, μιας και δεν είχα καθόλου χρόνο. Αυτή η σχεδίαση είναι χωρίς IMQ, που σημαίνει πως δεν μοιράζεται το ΟΛΙΚΟ bandwidth που έχει το μηχάνημα, αλλά κάνει διαχωρισμό σε upload bandwidth και download bandwidth. Το λάθος εδώ είναι ότι θεωρεί δεδομένο πως έχω 1600Kbit upload και 1600Kbit download, το οποίο είναι λάθος, μιας και αν κατεβάζει κάποιος με 200KBytes/sec έχει πάρει όλο το bandwidth δικό του. Μόλις το κάνω και με IMQ, θα κάνω εδώ post.

----------


## lambrosk

Περιμένο το full δεν είμαι για μετριότητες...  ::   ::  

Μπράβο πάντως καλή πρωτοβουλία!

----------


## uNdErTaKeR

> Περιμένο το full δεν είμαι για μετριότητες...


lol ! ! ! ok, μόλις το ετοιμάσω, θα το Postάρω !



> Μπράβο πάντως καλή πρωτοβουλία!


Τhanx  ::

----------


## smyrosnik

Mπορεί να γίνει και στο ασύρματο μέρος το ίδιο?

----------


## uNdErTaKeR

Μα αυτό για το ασύρματο μέρος είναι !

----------


## wiresounds

Xaos έχω το firmware 2.1 στο 9105 με πλήρες όνομα
1406_060404-2.14L.01A.a2a013b
Έχεις μήπως κάποιο άλλο, ίσως πειραγμένο;

Στο QoS έχει μια παράμετρο IP Precedence με τιμές από 0 έως 7.
Τι θέλει να πει ο ποιητής;

Δοκιμαστικά έχω βάλει αυτές τις τιμές για το azureus.

Class Name azureus
Priority Low
IP Precedence 0
IP Type of Service Normal
Protocol TCP/UDP
Source Address / Mask 6881
Source Port --
Dest. Address / Mask 6881
Dest. Port --

----------


## smyrosnik

> Μα αυτό για το ασύρματο μέρος είναι !


Μα δεν μοιράζεις το νετ μέσω ενσυρμάτων clients που εκείνοι δίνουν στους ασύρματους? Ουσιαστικά ρυθμίζεις τις lan πόρτες του linksys. Σωστά?

----------


## DVD_GR

IMQ????

----------


## xaotikos

wiresounds όχι έχω το μαμίσιο firmware. Σκεφτόμουνα να βάλω και εγώ αυτό μιας και άκουσα καλά λόγια αλλά έχω πολλούς virtual servers και θέλει λίγο δουλειά να τα ξαναπεράσω...

Θα το κοιτάξω όμως όταν θα έχω λίγο χρόνο.

----------


## uNdErTaKeR

> Αρχική Δημοσίευση από uNdErTaKeR
> 
> Μα αυτό για το ασύρματο μέρος είναι !
> 
> 
> Μα δεν μοιράζεις το νετ μέσω ενσυρμάτων clients που εκείνοι δίνουν στους ασύρματους? Ουσιαστικά ρυθμίζεις τις lan πόρτες του linksys. Σωστά?


Εξήγησέ το λίγο παραπάνω αυτό !
Εγώ, στην υλοποίησή μου, έχω ένα linksys και ένα link στα 1,6Μbit.
Αυτό που ήθελα, είναι να μοιράζεται το ασύρματο Link μου στους 5 ενσύρματους clients (είτε κάνουν upload είτε κάνουν download), έτσι ώστε κανένας να μην είναι αδικημένος και ο καθένας να έχει τουλάχιστον το 1/5 του όταν το επιθυμήσει. Βέβαια, η υλοποιήση δεν είναι και η βέλτιστη, μιας και δεν έχει γίνει (όπως προανέφερα) με IMQ. Μόλις βρω χρόνο και το κάνω και αυτό θα κάνω Post εδώ το script.

----------


## smyrosnik

Ποια είναι τα πακέτα που χρειάζονται?

----------

