[Risolto]Limitare la banda per un host

Postate qui per tutte le discussioni legate a Linux in generale.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Gnu/Linux in genere, se l'argomento è specifico alla Slackware usate uno dei forum Slackware o Slackware64.
3) Leggere attentamente le risposte ricevute
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

[Risolto]Limitare la banda per un host

Messaggio da Ansa89 »

Devo limitare la velocità di trasmissione (e ricezione) di un dato host della mia rete, verso internet; per farlo pensavo di aggiungere una regola di shaping al server che gestisce il traffico da/verso internet.
Ho già provato a guardare la bibbia del traffic shaping, ma non ci ho capito molto.
Inoltre su internet ho trovato un paio di siti che propongono qualche soluzione, ma usano sempre regole diverse e non capisco quale devo usare io :( .

Qualcuno può aiutarmi a capire come muovermi tra le varie tipologie di traffic shaping e consigliarmene una che faccia al caso mio?
Ultima modifica di Ansa89 il ven 21 ott 2011, 9:22, modificato 1 volta in totale.

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: Limitare la banda per un host

Messaggio da shark1500 »

Ma non te l'hanno insegnato al laboratorio di reti?

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Limitare la banda per un host

Messaggio da Ansa89 »

A reti ci hanno detto che esiste il traffic shaping e ci hanno fatto un esempio con il tbf, ma in rete si trovano quasi esclusivamente esempi con il htb, quindi mi vengono dei dubbi (quelli scritti nel primo post).
Inoltre a reti si agiva direttamente sull'host, invece io devo agire sul server al quale si connette l'host.

In ogni caso mi restano delle perplessità su come funziona e come si configura per bene la limitazione della banda per uno specifico host.

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: Limitare la banda per un host

Messaggio da shark1500 »

Se non ricordo male sono semplicemente due classi di utilizzo diverse. Ti consiglio di mettere su al volo una lan di prova in virtuale e fare le prove li` sopra. Puoi mettere traquillamente il traffic shaping sul server che fa da routing.

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: Limitare la banda per un host

Messaggio da ocman »

scusate l'intromissione.
personalmente volevo segnalare che da tempo sto utilizzando per un caso simile il sistema operativo solaris (versione s10u9 in poi, incluso Sol11Exp o OpenIndiana)
con queste versioni infatti il traffic shaping è integrato nello stack di rete di ogni interfaccia reale o virtuale che sia ed è molto semplice da configurare.
non so se hai la possibilità di provarlo ma con questo riusciresti a assegnare limiti di bandwidth anche a livello subnet/protocollo/porta e non di generico host.

Dal manuale: http://download.oracle.com/docs/cd/E199 ... #scrolltoc

Codice: Seleziona tutto

Create flows according to the attribute you have determined for each flow.

# flowadm add-flow -l link -a attribute=value[,attribute=value] flow

attribute

    Refers to one of the following classifications by which you can organize network packets into a flow:

        IP address

        Transport protocol (UDP, TCP, or SCTP)

        Port number for an application (for example port 21 for FTP)

        DS field attribute, which is used for quality of service in IPv6 packets only. For more information about the DS field, refer to DS Codepoint in System Administration Guide: IP Services.

flow

    Refers to the name that you assign to the particular flow.

For more details about flows and flow attributes, see the flowadm(1M) man page.
Implement resource controls on the flows by setting the appropriate flow properties.

# flowadm set-flowprop -p property=value[,property=value,...] flow

You can specify the following flow properties that control resources:

maxbw

    The maximum amount of the link's bandwidth that packets identified with this flow can use. The value you set must be within the allowed range of values for the link's bandwidth. To display the possible range of values for a link's bandwidth, check the POSSIBLE field in the output that is generated by the following command:

    # dladm show-linkprop -p maxbw link

priority

    The priority given to packets in this flow. The possible values are high, medium, and low. The default value is medium.

come funziona?
http://conferences.sigcomm.org/sigcomm/ ... rs/p45.pdf

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: Limitare la banda per un host

Messaggio da shark1500 »

Ho sentito dire che e` anche facile fare traffic shaping con OpenBSD.
Ansa, se hai tempo puoi provare anche questa soluzione.

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: Limitare la banda per un host

Messaggio da ocman »

metodo carino su linux con tc e eptables

http://ebtables.sourceforge.net/examples/example5.html

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Limitare la banda per un host

Messaggio da Ansa89 »

ocman ha scritto:scusate l'intromissione.
personalmente volevo segnalare che da tempo sto utilizzando per un caso simile il sistema operativo solaris (versione s10u9 in poi, incluso Sol11Exp o OpenIndiana)
con queste versioni infatti il traffic shaping è integrato nello stack di rete di ogni interfaccia reale o virtuale che sia ed è molto semplice da configurare.
non so se hai la possibilità di provarlo ma con questo riusciresti a assegnare limiti di bandwidth anche a livello subnet/protocollo/porta e non di generico host.

Dal manuale: http://download.oracle.com/docs/cd/E199 ... #scrolltoc

Codice: Seleziona tutto

Create flows according to the attribute you have determined for each flow.

# flowadm add-flow -l link -a attribute=value[,attribute=value] flow

attribute

    Refers to one of the following classifications by which you can organize network packets into a flow:

        IP address

        Transport protocol (UDP, TCP, or SCTP)

        Port number for an application (for example port 21 for FTP)

        DS field attribute, which is used for quality of service in IPv6 packets only. For more information about the DS field, refer to DS Codepoint in System Administration Guide: IP Services.

flow

    Refers to the name that you assign to the particular flow.

For more details about flows and flow attributes, see the flowadm(1M) man page.
Implement resource controls on the flows by setting the appropriate flow properties.

# flowadm set-flowprop -p property=value[,property=value,...] flow

You can specify the following flow properties that control resources:

maxbw

    The maximum amount of the link's bandwidth that packets identified with this flow can use. The value you set must be within the allowed range of values for the link's bandwidth. To display the possible range of values for a link's bandwidth, check the POSSIBLE field in the output that is generated by the following command:

    # dladm show-linkprop -p maxbw link

priority

    The priority given to packets in this flow. The possible values are high, medium, and low. The default value is medium.

come funziona?
http://conferences.sigcomm.org/sigcomm/ ... rs/p45.pdf
shark1500 ha scritto:Ho sentito dire che e` anche facile fare traffic shaping con OpenBSD.
Ansa, se hai tempo puoi provare anche questa soluzione.
Grazie per le segnalazioni, ma preferisco farlo da linux (solo per il motivo che ho già configurato tutto il serverino e mi scoccia dover ricominciare tutto da zero per mettere solaris o openBSD).

ocman ha scritto:metodo carino su linux con tc e eptables

http://ebtables.sourceforge.net/examples/example5.html
Ebtables purtroppo lavora solo con indirizzi mac (almeno mi è sembrato di capire così dalla guida che mi hai linkato), io invece ho bisogno di limitare il traffico per tutta una rete (di cui non conosco i mac a priori).
Soluzione:

Codice: Seleziona tutto

# iptables -t mangle _PARAMETRI_DEL_CASO_ -j MARK --set-mark _NUMERO_
In questo modo marco le connessioni che mi interessano e ne posso limitare il traffico (in sostanza è l'analogo di quello che c'è scritto nella guida che mi hai proposto, solo che si usa iptables).

Avatar utente
shark1500
Linux 3.x
Linux 3.x
Messaggi: 785
Iscritto il: gio 3 apr 2008, 14:33
Slackware: current
Kernel: 2.6.27.7-smp
Desktop: kde
Località: Modna

Re: Limitare la banda per un host

Messaggio da shark1500 »

Se non ricordo male con tc puoi farlo senza problemi, senza nemmeno dover utilizzare iptables.

ocman
Linux 2.x
Linux 2.x
Messaggi: 239
Iscritto il: gio 31 lug 2008, 18:18
Slackware: ArchLinux
Desktop: xfce
Distribuzione: OpenIndiana

Re: Limitare la banda per un host

Messaggio da ocman »

se sei dietro ad un router il mac è solo uno

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Limitare la banda per un host

Messaggio da Ansa89 »

ocman ha scritto:se sei dietro ad un router il mac è solo uno
Non sono dietro un router.

shark1500 ha scritto:Se non ricordo male con tc puoi farlo senza problemi, senza nemmeno dover utilizzare iptables.
Forse sì, ma continua a esserci il problema che qualcuno dovrebbe spiegarmi come.
Inoltre nella guida postata da ocman si usa il cbq e vorrei capire le differenze che ci sono con il tbf e il htb (e se queste differenze sono rilevanti per quello che devo fare io).

In parole povere: sono ancora in alto mare e devo fare un mucchio di prove (per il momento non sono ancora riuscito a limitare il traffico).

rik70
Iper Master
Iper Master
Messaggi: 2492
Iscritto il: gio 10 mar 2011, 9:21
Slackware: 15.0
Kernel: 5.15.x-generic
Desktop: Sway
Distribuzione: Arch Linux

Re: Limitare la banda per un host

Messaggio da rik70 »

Forse shorewall potrebbe fare al caso tuo, se non ti disturba utilizzarlo come firewall:

http://www.shorewall.net/traffic_shaping.htm

http://www.shorewall.net/simple_traffic_shaping.html

Ti servono - credo - le libmnl e le xtables-addons che trovi su netfilter.org (se non ci sono nella distro che utilizzi).

Ciao

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Limitare la banda per un host

Messaggio da Ansa89 »

rik70 ha scritto:Forse shorewall potrebbe fare al caso tuo, se non ti disturba utilizzarlo come firewall:

http://www.shorewall.net/traffic_shaping.htm

http://www.shorewall.net/simple_traffic_shaping.html
Grazie per la segnalazione.
Per le impostazioni del firewall preferirei usare direttamente iptables, senza passare attraverso altri tool.
Magari faccio ancora qualche tentativo e se vedo che proprio non ci salto fuori, provo shorewall.

rik70 ha scritto:(se non ci sono nella distro che utilizzi)
Uso debian: "xtables-addons" c'è tra i pacchetti di default; invece "libmnl" lo trovo solo per la versione testing e unstable.
Tuttavia, tra i pacchetti disponibili c'è già "shorewall", quindi non credo che dovrò preoccuparmi per "libmnl".

Avatar utente
Ansa89
Iper Master
Iper Master
Messaggi: 2703
Iscritto il: mer 29 ago 2007, 17:57
Nome Cognome: Stefano Ansaloni
Slackware: 14.2 64bit
Kernel: 4.9.61
Desktop: XFCE 4.12
Località: Modena

Re: Limitare la banda per un host

Messaggio da Ansa89 »

Risolto:

Codice: Seleziona tutto

#!/bin/bash

# IP di cui limitare il traffico
IP="x.x.x.x"

# Interfaccia del server verso la lan
# Serve per configurare la velocità di download
IN_IF="in"
# Interfaccia del server verso internet
# Serve per configurare la velocità di upload
OUT_IF="out"

# Massima velocità di download (kbps/kbit/mbps/mbit)
DOWN="max_d"
# Massima velocità di upload (kbps/kbit/mbps/mbit)
UP="max_u"

# Se la rete non è usata, l'host può arrivare a questa velocità di download (kbps/kbit/mbps/mbit)
CEIL_DW="ceil_d"
# Se la rete non è usata, l'host può arrivare a questa velocità di upload (kbps/kbit/mbps/mbit)
CEIL_UP="ceil_u"

# Uso htb per la root handle
tc qdisc add dev $IN_IF root handle 1:0 htb
tc qdisc add dev $OUT_IF root handle 1:0 htb

# Aggiungo le classi, impostando come rate massimo
# la velocità che l'host può raggiungere quando la rete
# non viene usata (uso sempre htb)
tc class add dev $IN_IF parent 1:0 classid 1:1 htb rate $CEIL_DW
tc class add dev $OUT_IF parent 1:0 classid 1:1 htb rate $CEIL_UP

# Aggiungo le classi per impostare il limite della banda
# e aggiungo il "ceil" per consentirne il prestito
tc class add dev $IN_IF parent 1:1 classid 1:10 htb rate DOWN ceil $CEIL_DW
tc class add dev $OUT_IF parent 1:1 classid 1:10 htb rate UP ceil $CEIL_UP

# Uso sfq per gestire la coda di pacchetti che arrivano alle classi
tc qdisc add dev $IN_IF parent 1:10 handle 30:0 sfq perturb 10
tc qdisc add dev $OUT_IF parent 1:10 handle 30:0 sfq perturb 10

# Aggiungo il filtraggio vero e proprio della banda
tc filter add dev $IN_IF parent 1:0 prio 1 protocol ip u32 match ip dst $IP flowid 1:10
tc filter add dev $OUT_IF parent 1:0 prio 1 protocol ip u32 match ip src $IP flowid 1:10

Rispondi