Newsgroup: it.comp.os.linux.sys
Titolo: limitazione banda P2P

Il solito annoso e palloso problema..
Ho (come cliente) un club di giochi on line i cui utenti fanno anche web, 
un po' di ms messenger e del p2p.
L'intenzione sarebbe di dare la massima banda e la minima latenza ai 
giochi on line e limitare lo web (facile..) l'ftp (idem) ed il p2p 
(arrgh): E` fattibile via iptables?
Per completezza:
Linux 2.6.7 su slack 10,
iptables configurato via shorewall,
dhcp per i client (win xp)
-- 
Roberto Tagliaferri-Linux user #30785 <-> r.tagliaferri@(forse)
tosnet.it
	Prima di parlare collegare la spina del cervello,
	 leggere e in caso di schermata blu riavviare.

 (arrgh): E` fattibile via iptables?
Il problema piu` grande e` quello di riconoscere il traffico p2p,
visto che lavorando solo sulle porte non e` praticamente possibile.
Quindi devi partire usando 
http://l7-filter.sf.net
 per
l'identificazione e, non e` detto che funzioni nemmeno benissimo (se
non ricordo male, l'ultima volta che ho guardato il protocollo piu`
difficile da individuare era quello di winmx)
Poi per il trafic control e la gestione delle code usi tc di iproute2.
Vedi il solito 
http://lartc.org
-- 
Vuoi fare colpo su di lei con me?
Fai colpo su di lei con me! Fai colpo su di lei con me!
[Dr. Gonzo : Paura e delirio a Las Vegas]

 dhcp per i client (win xp)
Premesso che la mia non e' propriamente una soluzione, ma piuttosto, un
consiglio.
Ho affrontato il tuo stesso problema su un firewall OpenBSD nella mia rete
domestica ed ho risolto, in maniera un po' grezza, ma efficace, con alcune
valutazioni:
- I giochi, solitamente, utilizzano traffico UDP
- Il P2P utilizza porte >1024 e spara pacchetti di dimensioni notevoli
Potresti quindi suddividere cosi' il traffico:
Priorita' alta: ICMP + UDP
Priorita' media: Piccoli pacchetti TCP (controllo della connessione durante
il download), tutto cio' che non e' in priorita' bassa.
Priorita' bassa: FTP, HTTP, e pacchetti TCP di grandi dimensioni con porta >
1024
Ciao
Gabriele

 1024
Aggiungo che dare priorita` agli ack vuoti solitamente abbassa la
latenza.  (con OpenBSD anche questo e` facile; presumo lo sia anche su
linux)
Vale
PS. Posso tenere in considerazione la tua mail quando faremo la grande
chiamata per tirare su un gruppo sulla OpenBSD? :-)


 chiamata per tirare su un gruppo sulla OpenBSD? :-)
Certo!
Ciao
Gabriele

 escludere dallo shaping il traffico da/per ip della lan.
Il problema e` che non si puo` fare quello che dici, una volta che hai
attivato lo shaping su una interfaccia, tutto il traffico che passa da
quell'interfaccia passa dalla coda, hai visto che c'e` sempre una coda
default:
 default     Packets not matched by another queue are assigned to this
             one.  Exactly one default queue is required.
Il problema potrebbe essere aggirato o con una dummy interface (ma non
chiedermi come, ne duscutevo solo con whiplash tempo fa) oppure, se
altq puo` creare code su alias dell'interfaccia, fare uscire le
macchine su un ip alias dell'interfaccia quando vanno a chiamare un
server sul firewall; mentre farli uscire regolarmente quando devono
andare verso internet.
Ciao
f/u a me che qui ho paura di diventare OT (ma se a qualcuno interessa
l'argomento un f/up ad un altro gruppo piu` adatto e` gradito)  :-)


 Tu avevi avuto/risolto questo problema?
Stesso problema, risolto in fase di routing.
Setto la route di default (10.0.0.138 e` il router), ed assegno un realm
(10).
/sbin/ip route add via 10.0.0.138 dev eth0 realms 10 metric 1
# Classe principale da 100Mbps
/sbin/tc qdisc add dev eth0 root handle 1: cbq bandwidth 100Mbit avpkt 1000
[creo le varie classi]
Tutto il traffico in uscita dalla mia rete passa per il router, quindi:
/sbin/tc filter add dev eth0 parent 1: protocol ip prio 1000 route to 10 \
        classid 1:1
dove 1:1 e` una delle mie classi per lo shaping. Usando realm e prio
puoi creare una serie di filtri per smistare i pacchetti su varie classi
in base alle tue preferenze.
Tutto il resto e` diretto alla mia rete locale (nota la priorita` piu`
bassa):
/sbin/tc filter add dev eth0 parent 1:1 protocol ip prio 12 u32 match ip \
        dst 
0.0.0.0/0
 classid 1:20
In questo caso 1:20 e` una SFQ attaccata direttamente alla classe
principale:
/sbin/tc qdisc add dev eth0 parent 1:20 handle 20: sfq perturb 10
HTH,
Luca
-- 
Home: 
http://kronoz.cjb.net
Windows /win'dohz/ n. : thirty-two  bit extension and graphical shell to
a sixteen  bit patch to an  eight bit operating system  originally coded
for a  four bit microprocessor  which was  written by a  two-bit company
that can't stand a bit of competition.

 internet?
eth0 e` collegata ad uno switch a cui e` attaccato anche il router adsl.
La route di default prevede di inviare i pacchetti attraverso il router.
Ovviamente c'e` anche un regola che dice che 
10.0.0.0/8
 si raggiunge
direttamente da eth0:
root@dreamland:~# ip route ls
10.0.0.0/8
 dev eth0  proto kernel  scope link  src 10.0.0.1
default via 10.0.0.138 dev eth0  metric 1 realm 10
Luca
-- 
Home: 
http://kronoz.cjb.net
Non capisco tutta questa eccitazione per il Multitasking: 
io sono anni che leggo in bagno.

 default via 10.0.0.138 dev eth0  metric 1 realm 10
Quindi suppongo che i client della lan abbiano come gateway la
linux box, invece del router.
Ok: ora mi torna, anche se e' un po' anomala, come situazione. :)
-- 
Per non dimenticare:
http://snipurl.com/SdC_ed_il_vino

 linux box, invece del router.
Se ho capito, mi aspetto pero' che tu abbia settato
net.ipv4.conf.eth0.send_redirects = 0
Giusto?


 Ok: ora mi torna, anche se e' un po' anomala, come situazione. :)
Gli altri client sono dei notebook che non sono sempre connessi e si
arrangiano ;)
In una situazione piu` "seria" avresti il router attaccato su eth0, e il
resto della rete su eth1. La default ruote rimane sull'ip del router
adsl ed il traffic shaping viene fatto comunque su quella.
Luca
-- 
Home: 
http://kronoz.cjb.net
La mia opinione puo` essere cambiata, ma non il fatto che ho ragione.