Προς το περιεχόμενο

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

capthookb

Traffic Shaping - Απορίες/Παραδείγματα

Προτεινόμενες αναρτήσεις

Υλικό: Adsl γραμμή (1mbit/256kbit), σε router. Στο router είναι συνδεδεμένα ένα pc (linux) και ένα xbox. Άρα η κίνηση από το pc προς το xbox και/ή το router περνούν από την ίδια κάρτα δικτύου (eth0)!

Σκοπός: Θέλω να διαχειριστώ την κίνηση του internet και του lan του pc, δηλαδή το upload του pc. Ειδικότερα, κάποια απλά πράγματα για αρχή:

  • Να περιορίσω την ταχύτητα του upload του ίντερνετ χωρίς αυτό να περιορίζει την ταχύτητα του τοπικού δικτύου. Π.χ όταν κάποια εφαρμογή χρησιμοποιεί όλο το upload bandwidth, δε μπορώ καν να συνδεθώ στο web interface του router, δε μπορώ να δω samba shares από το xbox κτλ.
  • Να μπορώ να έχω γρήγορη απόκριση σε εφαρμογές και υπηρεσίες όπως http, ftp, instant messaging, ίσως voip κτλ. ενώ ταυτόχρονα να τρέχουν p2p εφαρμογές. Για αρχή θα ήθελα να ρυθμίσω το shaping μόνο για http, μιας και μόλις άρχισα να ασχολούμαι με αυτό και αργότερα προσθέτω νέες υπηρεσίες, ανάλογα με τις ανάγκες...

 

Σκέφτηκα να υλοποιήσω τα παραπάνω με το παρακάτω, σχετικά απλοϊκό σύστημα από qdiscs και classes:

 

  1. qdisc htb rate 100000kbit

    1. class htb rate 100000kbit ceil 100000kbit
      1. class htb rate 99800kbit ceil 99800kbit (lan)
        • qdisc sfq perturb 10

       

      [*]class htb rate 200kbit ceil 200kbit default 200 (internet)

    • class htb rate 50kbit ceiling 100kbit
      • qdisc sfq perturb 10

      [*]class htb rate 150kbit ceiling 200kbit


      • qdisc sfq perturb 10

 

Να δώσω μερικές επεξηγήσεις και μετά να ρωτήσω κάποια πράγματα.

Αρχικά, λοιπόν, προσθέτω ένα classful qdisc (?) στο root (outgoing) σημείο του eth0, τύπου htb με rate/ceil όσο το upload της κάρτας δικτύου (100mbps). Μετά προσθέτω 2 κλάσεις, μια για το lan και μια για το ίντερνετ. Σε αυτήν του τοπικού δικτύου δε χρειάζεται να κάνω κάτι άλλο, πέρα από το να προσθέσω (?) μια qdisc τύπου sfq.

Στην κλάση του ίντερνετ τώρα, έχω δημιουργήσει 2 ουρές (?), από τις οποίες η δεύτερη θα είναι η default. Δηλαδή, η πρώτη θα εξυπηρετεί την κίνηση του http (και ενδεχομένως άλλων υπηρεσιών), θα έχει εγγυημένα 50kbit με μέγιστο όριο 100kbit και η δεύτερη θα εξυπηρετεί όλα τα υπόλοιπα, ανάμεσα σε αυτά και τα p2p (εγγυημένα 150 και μέγιστο όριο τα 200 όταν δεν χρησιμοποιείται αλλού upload).

 

Στις ερωτήσεις τώρα.

  1. Χρειάζεται να προσθέσω κάτω από το qdisc μια κλάση την οποία μετά θα διαχωρίσω στα 2; Δε θα μπορούσα να προσθέσω εξαρχής της 2 κλάσεις που με ενδιαφέρουν πάνω στην qdisc;
  2. Η προσθήκη της τελευταίας qdisc τύπου sfq σε κάθε "τελική" κλάση είναι απαραίτητη; Θα μπορούσαν να λείπουν; Με ξενίζει λίγο η έννοια της προσθήκης qdisc πάνω σε class, ενώ όχι το αντίστροφο.
  3. Όσον αφορά τη ρύθμιση επιπλέον εφαρμογών και/ή υπηρεσιών, που όμως δεν είναι τόσο απαιτητικές σε bandwidth (ftp, instant messaging,ssh κτλ), θα ήταν καλύτερο να μπούν η καθεμιά σε δική της κλάση, ή καλύτερα όλες μαζί; Φαντάζομαι αν ήθελα voip για να παίζει καλά θα έβαζα νέα κλάση.
  4. Τώρα μένει να κάνω το φιλτράρισμα των πακέτων. Πως προτείνετε να γίνει; Με tc ή με iptables (mark ή classify ή L7 filter module);

Οποιεσδήποτε άλλες παρατηρήσεις ή προτάσεις γι'αυτό που θέλω να κάνω, είναι παραπάνω από καλοδεχούμενες!

 

 

Ένας πολύ πολύ καλός εισαγωγικός οδηγός για traffic shapping είναι του Jason Boxman και βρίσκεται εδώ: http://edseek.com/~jasonb/articles/traffic_shaping/index.html


Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Το script:

>
#!/bin/bash

tc qdisc del dev eth0 root

#OURA TIS ETHERNET eth0
tc qdisc add dev eth0 parent root handle 1:0 htb default 20
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 100000kbit ceil 100000kbit

       #KLASSH GIA TIN KINISI TOU LAN
       tc class add dev eth0 parent 1:1 classid 1:10 htb rate 99800kbit ceil 99800kbit
       tc qdisc add dev eth0 parent 1:10 handle 10:0 sfq perturb 10


       #KLASH GIA TIN KINISI TOU INTERNET
       tc class add dev eth0 parent 1:1 classid 1:20 htb rate 150kbit ceil 150kbit
       tc qdisc add dev eth0 parent 1:20 handle 30:0 sfq perturb 10

       tc class add dev eth0 parent 1:1 classid 1:30 htb rate 50kbit ceil 50kbit
       tc qdisc add dev eth0 parent 1:30 handle 20:0 sfq perturb 10


       #FILTRARISMA GIA TA PAKETA TOU LAN
       tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dst 192.168.1.0/24 classid 1:10
       #FILTRARISMA GIA TA HTTP REQUESTS
       tc filter add dev eth0 parent 1:0 protocol ip u32 match ip sport 80 0xffff \
                                                         match ip dport 80 0xffff classid 1:30
       #MIKRA PAKETA
       tc filter add dev eth0 protocol ip parent 1:0 prio 1 u32\
       match ip protocol 6 0xff \
       match u8 0x05 0x0f at 0 \
       match u16 0x0000 0xffc0 at 2 \
       match u8 0x10 0xff at 33 \
       classid 1:30

 

Να ρωτήσω κάτι άλλο. Παρατηρώ πως η κίνηση της 1:20 αλληλεπιδρά με αυτήν της 1:30. Π.χ όταν έχω upload 150kbps στην 1:20 και καθόλου στην 1:30, και με τον browser επισκεφθώ μια σελίδα, το upload στην 1:20 πέφτει κατακόρυφα στο 0 και μετά ανεβαίνει πάλι. Αφού έχω rate και ceil ίδια, δε θα έπρεπε να μην επηρεάζει η μια την άλλη;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Δεν ενδιαφέρεται κανείς για traffic shapping; Περίεργο μου φαίνεται :)

Τέλοσπάντων, σήμερα ήθελα να δοκιμάσω πόση ώρα θα έκαναν να φορτώσει ένα δοκιμαστικό site με το upload μου ή γενικότερα σε άλλες ταχύτητες.

Δεν είχα παρά να βάλω όριο στο upload του lo interface τρέχοντας το script:

>
#!/bin/bash
DEV=lo

tc qdisc del dev $DEV root

tc qdisc add dev $DEV parent root handle 1:0 htb default 1
tc class add dev $DEV parent 1:0 classid 1:1 htb rate 50kbit ceil 50kbit
tc qdisc add dev $DEV parent 1:1 handle 10:0 sfq perturb 10

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

εμενα με ενδιαφερει ενημερωτικά αλλα εισαι πολυ προχωρημενος για μενα :-)

 

λεω να ξεκινησω πρωτα απο το Εισαγωγικός οδηγός iptables , του apoikos και βλεπουμε :-D

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

 

Σκέφτηκα να υλοποιήσω τα παραπάνω με το παρακάτω, σχετικά απλοϊκό σύστημα από qdiscs και classes:

 

  1. qdisc htb rate 100000kbit

    1. class htb rate 100000kbit ceil 100000kbit
      1. class htb rate 99800kbit ceil 99800kbit (lan)
        • qdisc sfq perturb 10

       

      [*]class htb rate 200kbit ceil 200kbit default 200 (internet)

    • class htb rate 50kbit ceiling 100kbit
      • qdisc sfq perturb 10

      [*]class htb rate 150kbit ceiling 200kbit


      • qdisc sfq perturb 10

 

Έχεις ξεχάσει να δώσεις προτεραιότητες στις κλάσεις ;-) Χωρίς προτεραιότητες χάνεις το μισό QoS. Το μισό QoS είναι το bandwidth, το άλλο μισό είναι οι προτεραιότητες.

 

Να δώσω μερικές επεξηγήσεις και μετά να ρωτήσω κάποια πράγματα.

Αρχικά, λοιπόν, προσθέτω ένα classful qdisc (?) στο root (outgoing) σημείο του eth0, τύπου htb με rate/ceil όσο το upload της κάρτας δικτύου (100mbps). Μετά προσθέτω 2 κλάσεις, μια για το lan και μια για το ίντερνετ. Σε αυτήν του τοπικού δικτύου δε χρειάζεται να κάνω κάτι άλλο, πέρα από το να προσθέσω (?) μια qdisc τύπου sfq.

Αυτό δε θα δουλέψει και πολύ καλά, για τον απλούστατο λόγο ότι δεν έχεις 100 πραγματικά Mbps εγγυημένα. Στο εγγυημένο bandwidth που ζητάς από κάθε κλάση βάλε τόσο ώστε το άθροισμα να βγαίνει περίπου 80 Mbps, ενώ βάλε και στις δύο κλάσεις το ceil στα 100+ Mbps ώστε να αξιοποιήσεις όσο bandwidth είναι διαθέσιμο.

 

Στην κλάση του ίντερνετ τώρα, έχω δημιουργήσει 2 ουρές (?), από τις οποίες η δεύτερη θα είναι η default. Δηλαδή, η πρώτη θα εξυπηρετεί την κίνηση του http (και ενδεχομένως άλλων υπηρεσιών), θα έχει εγγυημένα 50kbit με μέγιστο όριο 100kbit και η δεύτερη θα εξυπηρετεί όλα τα υπόλοιπα, ανάμεσα σε αυτά και τα p2p (εγγυημένα 150 και μέγιστο όριο τα 200 όταν δεν χρησιμοποιείται αλλού upload).

και πάλι priorities ;-)

 

Στις ερωτήσεις τώρα.

  1. Χρειάζεται να προσθέσω κάτω από το qdisc μια κλάση την οποία μετά θα διαχωρίσω στα 2; Δε θα μπορούσα να προσθέσω εξαρχής της 2 κλάσεις που με ενδιαφέρουν πάνω στην qdisc;

Ναι, θα μπορούσες μια χαρά να το κάνεις, ειδικά τη στιγμή που όλα φεύγουν από το ίδιο interface. Με το να τα groupάρεις κάτω από μια κλάση όμως, μπορείς να επιβάλεις ένα ενιαίο συνολικό όριο για το internet και να μοιράζεις το περισσευούμενο για internet bandwidth σωστά άναμεσα στις δύο υποκλάσεις, ενώ αν έφτιαχνες τρεις κλάσεις 1ου επιπέδου, το περισσευούμενο bandwidth από τη μία θα μοιραζόταν και στις δυό άλλες.

 

Η προσθήκη της τελευταίας qdisc τύπου sfq σε κάθε "τελική" κλάση είναι απαραίτητη; Θα μπορούσαν να λείπουν; Με ξενίζει λίγο η έννοια της προσθήκης qdisc πάνω σε class, ενώ όχι το αντίστροφο.

Η qdisc αυτή αναφέρεται πλέον στο πως χειρίζεται το σύστημα τα πακέτα κάθε κλάσης μεταξύ τους. Η default qdisc είναι η pfifo, που σημαίνει ότι ό,τι μπει πρώτο στο queue θα βγει πρώτο. Με άλλα λόγια αν έχεις μια εφαρμογή που έχει πετάξει στην ουρά της κλάσης 1000 πακέτα και θες να μιλήσεις με voip, τότε το voip θα πρέπει να περιμένει να φύγουν τα 1000 πακέτα πρώτα. Με την sfq (stochastic fair queueing) δίνεται η δυνατότητα "ίσης" μεταχείρισης των πακέτων ανεξαρτήτως χρόνου αναομνής.

Όσον αφορά τη ρύθμιση επιπλέον εφαρμογών και/ή υπηρεσιών, που όμως δεν είναι τόσο απαιτητικές σε bandwidth (ftp, instant messaging,ssh κτλ), θα ήταν καλύτερο να μπούν η καθεμιά σε δική της κλάση, ή καλύτερα όλες μαζί; Φαντάζομαι αν ήθελα voip για να παίζει καλά θα έβαζα νέα κλάση.

Όλες μαζί με sfq. Θα παιδευτείς πολύ για να τα χωρίσεις και κάπου χάνεται το νόημα. Συνήθως βολεύει να έχεις 3 κλάσεις: realtime (π.χ. ssh, voip, UDP, TCP ACK, ICMP), normal (π.χ. web/mail) και low-priority (ftp, p2p κλπ).

 

Τώρα μένει να κάνω το φιλτράρισμα των πακέτων. Πως προτείνετε να γίνει; Με tc ή με iptables (mark ή classify ή L7 filter module);

Ποτέ δε συμπάθησα τον u32 classifier του tc. Προσωπικά όλες τις φορές έχω χρησιμοποιήσει connmark για τα πακέτα, γιατί θεωρώ ότι δίνει μεγαλύτερη ευελιξία και εκμεταλλεύεται και το statefull engine του netfilter.

 

Όλα τα παραπάνω με κάθε επιφύλαξη, γιατί τα γράφω από μνήμης ;-)


Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ναι, κατάλαβα πως έπρεπε να βάλω και priorities. Το script που χρησιμοποιώ είναι αυτό πλέον και δουλεύει αρκετά καλά:

>
#!/bin/bash
DEV=eth0

tc qdisc del dev $DEV root

#OURA TIS ETHERNET $DEV
tc qdisc add dev $DEV parent root handle 1:0 htb default 20
tc class add dev $DEV parent 1:0 classid 1:1 htb rate 80000kbit ceil 80000kbit

       #KLASSH GIA TIN KINISI TOU LAN
       tc class add dev $DEV parent 1:1 classid 1:10 htb rate 79800kbit ceil 99800kbit prio 3
       tc qdisc add dev $DEV parent 1:10 handle 10:0 sfq perturb 10


       #KLASH GIA TIN KINISI TOU INTERNET
       tc class add dev $DEV parent 1:1 classid 1:20 htb rate 150kbit ceil 150kbit prio 3
       tc qdisc add dev $DEV parent 1:20 handle 20:0 sfq perturb 10

       tc class add dev $DEV parent 1:1 classid 1:30 htb rate 50kbit ceil 50kbit prio 0
       tc qdisc add dev $DEV parent 1:30 handle 30:0 sfq perturb 10


       #FILTRARISMA GIA TA PAKETA TOU LAN
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dst 192.168.1.0/24 classid 1:10
       #FILTRARISMA GIA TA HTTP REQUESTS
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dport 80 0xffff classid 1:30
       #POP3 SECURE
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dport 995 0xffff classid 1:30
       #ICQ-YAHOO-MSN
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dport 5190 0xffff classid 1:30
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dport 5050 0xffff classid 1:30
       tc filter add dev $DEV parent 1:0 protocol ip u32 match ip dport 1863 0xffff classid 1:30

Απλά δεν είχα ποστάρει, γιατί δεν πίστευα πως ενδιαφέρει κι άλλους.

Έχω φτιάξει δυο κλάσεις, μια υψηλής προτεραιότητας και με λίγο upload (κλάση 30) και μια μικρότερης προτεραιότητας με μεγάλο εύρος (κλάση 20). Από default όλη η κίνηση (εκτός του τοπικού δικτύου) πάει στην 20. Οπότε διαχωρίζω τις υπηρεσίες που με ενδιαφέρουν με φίλτρα και τις στέλνω στην υψηλής προτεραιότητας κλάση, την 30.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Φυσικά και ενδιαφερόμαστε :) Απλά (ντροπή μου) δεν είχα προσέξει το συγκεκριμένο post.

 

Μια παρατήρηση: όπως έχεις δηλώσει την 1:1, η συνολική κίνησή σου δε θα ξεπερνά ποτέ τα 80Mbps. Γιατί δε βάζεις

>
tc class add dev $DEV parent 1:0 classid 1:1 htb rate 80000kbit ceil 110000kbit

ώστε να μπορείς αν εκμεταλλευτείς όλο το bandwidth που σου δίνει το δίκτυό σου;

 

Το όριο των 80 Mbps παραπάνω σου το είπα για να δουλεύει εγγυημένα το traffic shaping σε περίπτωση που η κάρτα σου δεν αποδίδει 100Mbps. Όμως το πιθανότερο είναι ότι αποδίδει πάνω από 80, το οποίο έξτρα bandwidth θα πάει χαμένο αν αφήσεις και το ceil στα 80 Mbps.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Ναι, θα μπορούσα να το βάλω,απλά δε με καίει αν είναι 80 ή 82 ή 87mbps. Ούτως ή άλλως από ότι είδα από το ksysguard η ταχύτητα (όταν αντιγράφω κάτι στο xbox) δεν ξεπερνά τα 50mbps, ίσως λόγω αργού σκληρού του xbox. Όταν βλέπω καμιά ταινία από το δίκτυο πάλι η ταχύτητα είναι συγκριτικά πολύ μικρότερη του θεωρητικού ή πρακτικού ορίου της κάρτας δικτύου.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Όλα τα παραπάνω με κάθε επιφύλαξη, γιατί τα γράφω από μνήμης ;-)

 

Τι μνήμη φοράς; :-) :-) :-)

 

Να ρωτήσω και εγώ κάτι (σχετικά άσχετο)... Υπάρχει τρόπος για bandwidth limitation όσον αφορά μεμονωμένες εφαρμογές;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Μιλάς για το upload, download ή και τα δυο;

Ναι γίνεται, αρκεί να μπορέσεις να φιλτράρεις την κίνηση τους (με κάποιο τρόπο)

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
Μιλάς για το upload, download ή και τα δυο;

Ναι γίνεται, αρκεί να μπορέσεις να φιλτράρεις την κίνηση τους (με κάποιο τρόπο)

 

Και για τα δύο. Είχα βρει ένα πρόγραμμα που το έκανε. Αλλά δεν ήταν βολικό. Έπρεπε να ξεκινάς το πρόγραμμα που θέλεις να ελέγξεις μέσα από αυτό. Δεν θυμάμαι καθόλου το όνομα του όμως. Π.χ. για τον έλεγχο του azureus έπρεπε να δώσεις command upload-rate azureus. Κάπως έτσι.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Traffic Shaping στο download δε γίνεται (γιατί τα πακέτα έχουν ήδη φτάσει). Το μόνο που μπορείς να κάνεις είναι να τους βάλεις όριο, να απορρίπτεις δηλαδή πακέτα που ήδη έχουν φτάσει, έτσι ώστε να αναγκαστεί ο αποστολέας να ρίξει την ταχύτητά του.

Στο upload γίνεται.

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Υπάρχει περίπτωση να βλέπω την κίνηση της κάθε κλάσης στο ksysguard ή σε κάπιο άλλο monitor;

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες

Αυτό είναι το script του router μου αναφορικά με το qos. Όμως όταν το ενεργοποιώ αντί να καλυτερεύουν τα πράγματα γίνονται χειρότερα. Εκεί που το ping στο insomnia.gr είναι περίπου στο 300-400ms μετά την εφαρμογή των κανόνων του traffic shapping πετάγονται στο 1300+ και η πλοήγηση στο διαδίκτυο είναι πολύ αργή. Ώρες ώρες μάλιστα το ping αυξάνει κατά πολύ. Πριν από λιγο είδα πως έιχε φτάσει στα 20sec.

 

 

Αυτό που παρατήρησα είναι πως σε όλες τις κλάσεις που δηλώνεται rate και ceil, το ceil είναι μεγαλύτερο από το rate. Γίνεται αυτό;

Στο manual του htb γράφει τα εξής:

4. Rate ceiling

The ceil argument specifies the maximum bandwidth that a class can use. This limits how much bandwidth that class can borrow.

Επομένως σημαίνει πως το ceil θα είναι μεγαλύτερο του rate και η διαφορά του με το rate καθορίζει πόσο παραπάνω bandwidth μπορεί να δανειστεί από άλλες κλάσεις.

>
#!/bin/sh                     

###### Upstream side #########
/usr/sbin/tc qdisc del dev ppp0 root 2> /dev/null > /dev/null
echo "root PQ"                                               
/usr/sbin/tc qdisc add dev ppp0 root handle 1: prio          
echo "PQ 1:1"                                                
/usr/sbin/tc qdisc add dev ppp0 parent 1:1 handle 110:0 dsmark indices 8
/usr/sbin/tc class change dev ppp0 classid 110:1 dsmark mask 0x3 value 0x80
echo "change tos of EF"                                                    
/usr/sbin/tc qdisc add dev ppp0 parent 1:2 handle 2:0 htb default 50       
echo "HTB for non-EF"                                                      
/usr/sbin/tc class  add dev ppp0 parent 2:0 classid 2:1 htb ceil 256kbit rate 256kbit
echo "HTB parent class"                                                              
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:10 htb rate 256kbit ceil 204kbit prio 1 quantum 1 burst 6k
echo "HTB AF1"                                                                                                 
/usr/sbin/tc qdisc add dev ppp0 parent 2:10 handle 210:0 dsmark indices 8                                      
/usr/sbin/tc class change dev ppp0 classid 210:1 dsmark mask 0x3 value 0x60                                    
echo "change tos of AF1"                                                                                       
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:20 htb rate 256kbit ceil 25kbit prio 2 quantum 2 burst 6k 
echo "HTB AF2"                                                                                                 
/usr/sbin/tc qdisc add dev ppp0 parent 2:20 handle 220:0 dsmark indices 8                                      
/usr/sbin/tc class change dev ppp0 classid 220:1 dsmark mask 0x3 value 0x40                                    
echo "change tos of AF2"                                                                                       
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:30 htb rate 256kbit ceil 12kbit prio 3 quantum 3 burst 6k 
echo "HTB AF3"                                                                                                 
/usr/sbin/tc qdisc add dev ppp0 parent 2:30 handle 230:0 dsmark indices 8                                      
/usr/sbin/tc class change dev ppp0 classid 230:1 dsmark mask 0x3 value 0x20                                    
echo "change tos of AF3"                                                                                       
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:40 htb rate 256kbit ceil 10kbit prio 4 quantum 4 burst 6k
echo "HTB AF4"
/usr/sbin/tc qdisc add dev ppp0 parent 2:40 handle 240:0 dsmark indices 8
/usr/sbin/tc class change dev ppp0 classid 240:1 dsmark mask 0x3 value 0xa0
echo "change tos of AF4"
/usr/sbin/tc class add dev ppp0 parent 2:1 classid 2:50 htb rate 256kbit ceil 5kbit prio 5 quantum 5 burst 6k
echo "HTB BE!"

######Filters#########
/usr/sbin/tc filter add dev ppp0 parent 110:0 protocol ip u32 match ip src 0.0.0.0/0 flowid 110:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip sport 20 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip sport 20 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip dport 20 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip dport 20 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 2:10
/usr/sbin/tc filter add dev ppp0 parent 210:0 protocol ip prio 1 u32 match ip sport 80 0xffff flowid 210:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 1 u32 match ip dport 80 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 1 u32 match ip dport 80 0xffff flowid 2:10
/usr/sbin/tc filter add dev ppp0 parent 210:0 protocol ip prio 1 u32 match ip dport 80 0xffff flowid 210:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip sport 53 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip sport 53 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip dport 53 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip dport 53 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip sport 23 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip sport 23 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip dport 23 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip dport 23 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip sport 25 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip sport 25 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip dport 25 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip dport 25 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip sport 110 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip sport 110 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip dport 110 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip dport 110 0xffff flowid 2:50
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 1 u32 match ip sport 123 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 1 u32 match ip sport 123 0xffff flowid 2:10
/usr/sbin/tc filter add dev ppp0 parent 210:0 protocol ip prio 1 u32 match ip sport 123 0xffff flowid 210:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 1 u32 match ip dport 123 0xffff flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 1 u32 match ip dport 123 0xffff flowid 2:10
/usr/sbin/tc filter add dev ppp0 parent 210:0 protocol ip prio 1 u32 match ip dport 123 0xffff flowid 210:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 0 u32 match ip tos 0x80 0xe0 flowid 1:1
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 1 u32 match ip tos 0x60 0xe0 flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 1 u32 match ip tos 0x60 0xe0 flowid 2:10
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 2 u32 match ip tos 0x40 0xe0 flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 2 u32 match ip tos 0x40 0xe0 flowid 2:20
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 3 u32 match ip tos 0x20 0xe0 flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 3 u32 match ip tos 0x20 0xe0 flowid 2:30
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 4 u32 match ip tos 0xa0 0xe0 flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 4 u32 match ip tos 0xa0 0xe0 flowid 2:40
/usr/sbin/tc filter add dev ppp0 parent 1:0 protocol ip prio 5 u32 match ip tos 0x0 0xe0 flowid 1:2
/usr/sbin/tc filter add dev ppp0 parent 2:0 protocol ip prio 5 u32 match ip tos 0x0 0xe0 flowid 2:50

 

 

Σχηματικά η ιεραρχία του traffic shapping φαίνεται εδώ:

mygraphcj7.th.gif

 

ενώ οι ρυθμίσεις μου για το qos στο router είναι:

wagfb6.th.jpg

Κοινοποιήστε αυτήν την ανάρτηση


Σύνδεσμος στην ανάρτηση
Κοινοποίηση σε άλλες σελίδες
×
×
  • Δημιουργία νέου...