Ik ben bezig met het opzetten van een Linux server voor op een LANparty met +- 80 deelnemers. Er komt een internet verbinding van 60mbit en ik wil voorkomen dat een downloader alle bandbreedte inpikt en vervolgens de gamers achterlaat met een ping van over de 100ms.
Ik dacht zelf om d.m.v. Linux QoS een aantal dingen af te dwingen. De bedoeling is om de bandbreedte per IP te beperken. Daarvoor heb ik al het e.e.a uitgezocht en ben op het volgende script uitgekomen:
Het bovenstaande script beperkt helaas alleen de bandbreedte voor één IP en niet een hele range. Ik wil eigenlijk dat iedere deelnemer een eigen queue heeft met hetzelfde limiet. Het probleem is dan dat ik voor ieder IP een losse regel moet maken en dat moet dan naderhand op locatie nog gebeuren. Het lijkt me geen goed plan om een losse regel toe te voegen voor elk IP-adres in de DHCP range.
Daarbij wil ik niet dat het limiet op 60/80 komt te liggen. Het komt toch nooit voor dat iedereen tegelijk een patch aan het downloaden is. Stel dat ik mijn plan hierboven doorvoer (met bijv. een limiet van 6mbit), wordt dan bij 11 downloadende users de bandbreedte alsnog gelijkmatig verdeeld? Dan is nog maar de vraag of 80 queue's in QoS nog betrouwbaar blijft en vooral de performance niet beïnvloedt.
Als laatste is er een reglement waarin staat dat het geen facebook, msn, enz... -party gaat worden. Bittorrent of nieuwsgroepen is helemaal uit den boze. De LAN duurt maar 2 dagen en om te voorkomen dat iedereen constant aan het internetten blijft ipv te gamen, of juist daarvoor naar de LAN komen, wil ik deze services preventief blokkeren. Ik weet dat ik een Layer 7 (Application layer) filter nodig heb om DPI toe te passen. Alleen krijg ik sterk de indruk dat dit momenteel nogal een uitgestorven techniek in de Linux wereld is. Er is namelijk alleen support voor relatief oude kernels. Ik heb zelf de sources gepatcht voor support op de Linux 3.1.x kernels en iptables met de L7 extensie from source gebouwd. Vervolgens voeg ik de iptables rule toe:
Alles lijkt te werken (geen foutmeldingen), maar toch wordt het verkeer niet gefilterd. Heeft iemand hier een advies voor, want wellicht is dit niet de beste aanpak.
De discussie of ik de layer 7 filter wel of niet moet toepassen wil ik best aangaan, maar dat is niet het hoofddoel van dit topic.
Ik dacht zelf om d.m.v. Linux QoS een aantal dingen af te dwingen. De bedoeling is om de bandbreedte per IP te beperken. Daarvoor heb ik al het e.e.a uitgezocht en ben op het volgende script uitgekomen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| DEV=eth0 MAX=60mbit LIMIT=6mbit IP=192.168.10.98 echo "Resetting traffic shaping..." tc qdisc del dev ${DEV} root handle 1 > /dev/null 2> /dev/null iptables -t mangle -F echo "Setting up base rules..." tc qdisc add dev ${DEV} root handle 1: htb default 9999 tc class add dev ${DEV} parent 1: classid 1:9999 htb rate ${MAX} ceil ${MAX} burst 5k prio 9999 echo "Limitting traffic from ${IP} to ${LIMIT}..." tc class add dev ${DEV} parent 1:0 classid 1:1 htb rate ${LIMIT} ceil ${LIMIT} burst 5k prio 1 iptables -t mangle -A PREROUTING -i ${DEV} -s ${IP} -j CONNMARK --set-mark 1 tc filter add dev ${DEV} parent 1:0 protocol ip prio 1 handle 1 fw flowid 1:1 echo "Adding mark status reset rule..." iptables -t mangle -A POSTROUTING -j CONNMARK --restore-mark |
Het bovenstaande script beperkt helaas alleen de bandbreedte voor één IP en niet een hele range. Ik wil eigenlijk dat iedere deelnemer een eigen queue heeft met hetzelfde limiet. Het probleem is dan dat ik voor ieder IP een losse regel moet maken en dat moet dan naderhand op locatie nog gebeuren. Het lijkt me geen goed plan om een losse regel toe te voegen voor elk IP-adres in de DHCP range.
Daarbij wil ik niet dat het limiet op 60/80 komt te liggen. Het komt toch nooit voor dat iedereen tegelijk een patch aan het downloaden is. Stel dat ik mijn plan hierboven doorvoer (met bijv. een limiet van 6mbit), wordt dan bij 11 downloadende users de bandbreedte alsnog gelijkmatig verdeeld? Dan is nog maar de vraag of 80 queue's in QoS nog betrouwbaar blijft en vooral de performance niet beïnvloedt.
Als laatste is er een reglement waarin staat dat het geen facebook, msn, enz... -party gaat worden. Bittorrent of nieuwsgroepen is helemaal uit den boze. De LAN duurt maar 2 dagen en om te voorkomen dat iedereen constant aan het internetten blijft ipv te gamen, of juist daarvoor naar de LAN komen, wil ik deze services preventief blokkeren. Ik weet dat ik een Layer 7 (Application layer) filter nodig heb om DPI toe te passen. Alleen krijg ik sterk de indruk dat dit momenteel nogal een uitgestorven techniek in de Linux wereld is. Er is namelijk alleen support voor relatief oude kernels. Ik heb zelf de sources gepatcht voor support op de Linux 3.1.x kernels en iptables met de L7 extensie from source gebouwd. Vervolgens voeg ik de iptables rule toe:
code:
1
| iptables -t mangle -A PREROUTING -m layer7 --l7proto msnmessenger -j MARK --set-mark 7 |
Alles lijkt te werken (geen foutmeldingen), maar toch wordt het verkeer niet gefilterd. Heeft iemand hier een advies voor, want wellicht is dit niet de beste aanpak.
De discussie of ik de layer 7 filter wel of niet moet toepassen wil ik best aangaan, maar dat is niet het hoofddoel van dit topic.