Traffic Shaping Su Linux

  • View
    3.430

  • Download
    2

Embed Size (px)

Transcript

  • 1. TRAFFIC SHAPING SU SISTEMI LINUX1

2. Due note sul traffic shaping Il traffic shaping riguarda la gestione dei flussi di traffico in un sistema Usi tipici: Riduzione della banda passante per alcuni tipi di traffico Prioritizzazione del traffico (e.g., un ISP ha utenti gold e silver) Noi presentiamo due esempi molto semplici Limitazione della banda complessiva in output Limitazione della banda verso uno specifico host Ci si concentra sul caso di un sistema linux Uso dei tool forniti nella suite iproute 22 3. Funzioni avanzate di gestione del traffico Idea di base: I datagrammi IP vengono accodati prma di esserespediti La getione della coda dei datagrammi gestita da unaqueuing discipline Si interviene sulla queuing discipline per fare trafficshaping Nel kernel di linux ho tante possibili queuing discipline3 4. Scenario di riferimento: Realizzara la rete rappresentata in figura USATE: linux-new! 3 nodi su una stessa sottorete Installare I moduli del kernel per il traffic shaping I moduli si trovano nella directory: /lib/modules//... Sono file con estensione .ko (kernel object) Si installano con il comando insmod (modprobe ha dei problemi)4 5. Installare I moduli necessari Installazione dei moduli: Scheduler Token Bucket Filter (TBF):insmod /lib/modules/2.6.30/kernel/net/sched/sch_tbf.ko Scheduler Priority (PRIO):insmod /lib/modules/2.6.30/kernel/net/sched/sch_prio.ko Classificatore di traffico u32:insmod /lib/modules/2.6.30/kernel/net/sched/cls_u32.koinsmod /lib/modules/2.6.30/kernel/net/sched/em_u32.ko Verifica dell'installazione:lsmod Senza questi moduli I tentativi di usare il traffic shaping terminano con messaggi di errore di tipo file not found I moduli devono essere riferiti alla stessa versione del kernel UML che si usa! (USATE: linux-new) 5 6. Limitazione della banda complessiva # tcqdiscadddeveth0roottbfrate 220kbitlatency50msburst1540 Spiegazione: tc: comando per interagire con il controllo del traffico qdisc: mi interessa variare le discipline di coda add: aggiungo un disciplina di coda dev eth0: lavoro sulla prima interfaccia di rete root: la disciplina di coda la prima disciplina che usiamo (posso creare una gerarchia ad albero di discipline diverse e concatenate) tbf: token bucket filter, disciplina per limitare la banda seguono parametri della disciplina6 7. Il token bucket filter la disciplina modella il traffico come un secchio (bucket) di monetine (token) il secchio si riempie a ritmo costante Ogni volta che devo spedire dei dati consumo monetine Se non ho abbastanza monetine nel secchio aspetto che siriempia (overlimit) 7 8. Il token bucket filter Il TBF manda dati a ritmo costante. E' abbastanza preciso e CPU friendly la presenza di virtualizzazione tuttavia ne altera le prestazioni in modo sensibile Parametri: rate: il ritmo a cui riempio il secchio burst: la dimensione del secchio (serve per compensare il fatto che il flusso di monetine e l'invio dei dati sono discreti nel tempo)8 9. Verifica dell'installazione interroghiamo il sistema chiedendo che queuing discipline sta usando: # tcqdiscshowdeveth0 qdisctbf8008:rate220000bitburst1539b lat48.8ms9 10. Verificare il funzionamento del traffic shaper Scenario: node1 macchina su cui abbiamo configurato il traffic shaper node2 una macchina che usiamo per il test Creiamo un file sulla macchina node1: ddif=/dev/zeroof=prova.databs=1024 count=10000 crea un file di circa 10 M pieno di byte nulli Copiamo il file dalla macchina node2 dalla macchina node2 lanciamo: scpnode1:prova.data. durante il download viene mostrata la banda utilizzata 10 11. Rimettiamo tutto a posto #tcqdiscdeldeveth0root Rimuoviamo la disciplina di coda root dal dispositivo eth0 11 12. Limitazione della banda verso uno specifico host Dobbiamo classificare il traffico:root Usiamo una qdisc di tipo PRIO che consente di stabilire tre PRIO 1: classi Ad una classe associamo un TBF per il traffic shaping Mettiamo un filtro che dirotta in 1:1 1:21:3 quella classe tutto il traffico diretto ad un certo nodo TBF 20: 12 13. Limitazione della banda verso un host #tcqdiscadddeveth0roothandle1:prio priomap1111111111111111 #tcqdiscadddeveth0parent1:2tbfrate 220kbitlatency50msburst1540 #tcfilteradddeveth0protocolipparent 1:0prio1u32matchipdst192.168.1.2/32 flowid1:2 #tcfilteradddeveth0protocolipparent 1:0prio2u32matchipdst0.0.0.0/0 flowid1:113 14. Cosa successo? La prima riga definisce la root qdisc come prio priomap indica come classificare il traffico in funzionedei bit TOS del datagramma IP. Alla classe :2 dello scheduler prio associamo il trafficshaper Mettiamo un primo filtro ad alta priorit (prio 1) cheintercetta il traffico diretto verso 192.168.1.2 (ip dst192.168.1.2/32) e lo mette nelle classe :2 (flowid 1:2) Mettiamo un ultimo filtro a bassa priorit che fa ilmatching del resto e lo mette nella classe :114 15. Principali parametri di matching Dopo aver indicato u32 (match su una qualsiasi parte del pacchetto) possiamo specificare il campo In base all'indirizzo ip sorgente/destinazione matchipsrc1.2.3.0/24 matchipdst1.2.3.0/24 In base alla porta sorgente/destinazione matchipsport800xffff matchipdport800xffff In base al protocollo (tcp, udp, icmp, gre, ipsec) Facendo riferimento ai numeri presenti in /etc/protocols. Per esempio icmp 1: matchipprotocol10xff 15 16. Verifica dell'installazione interroghiamo il sistema chiedendo che queuing discipline sta usando e che filtri ha: # tc qdisc show dev eth0 qdisc prio 1: bands 3 priomap 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 qdisc tbf 800c: parent 1:2 rate 220000bit burst 1539b lat 48.8ms # tc filter show dev eth0 filter parent 1: protocol ip pref 1 u32 filter parent 1: protocol ip pref 1 u32 fh 800: ht divisor 1 filter parent 1: protocol ip pref 1 u32 fh 800::800 order 2048 key ht 800 bkt 0 flowid 1:2 match 9bb90179/ffffffff at 16 filter parent 1: protocol ip pref 2 u32 filter parent 1: protocol ip pref 2 u32 fh 801: ht divisor 1 filter parent 1: protocol ip pref 2 u32 fh 801::800 order 2048 key ht 801 bkt 0 flowid 1:1 match 00000000/00000000 at 16 16 17. Verificare il funzionamento del traffic shaper Scenario: node1 macchina su cui abbiamo configurato il traffic shaper node2 e node3 macchine che usiamo per il test Creiamo il solito file sulla macchina LOCALE: ddif=/dev/zeroof=prova.databs=1024count=10000 Copiamo il file dalla macchina node1 e node2. Da node 2scpnode1:prova.data. durante il download viene mostrata la banda utilizzata Copiamo il file dalla macchina node1 e node3.Da node 3 scpnode1:prova.data. durante il download viene mostrata la banda utilizzata Le bande mostrate durante la copia sono differenti 17 18. EsercizioLAN IinternetBanda differente per Nodo3 e Node2 per accedere a Internet18 19. Approfondimento Per saperne di pi su iproute 2 e traffic shaping: Linux Advanced Routing & Traffic Control http://lartc.org Howto online: http://lartc.org/howto/ ( anche possibile scaricarlo in formato pdf) man pages19