Bandbreitenbegrenzung

Post Reply
Message
Author
sweeper
Posts: 1
Joined: 12. May 2003 18:49

Bandbreitenbegrenzung

#1 Post by sweeper »

HI !

Ich hoff ihr könnt mir helfen.
Ich bin Admin in einem Studentenheim. Wir besitzen eine 2MBit Standleitung für 80 Leute.
Nur es gibt ein großes Problem. Viele Benutzer verwenden Kazaa , Emule ,...
Das bremst unsere Anbindung ziemlich ein.

Es gibt Leute die den Anschluss nicht nur für Download verwenden wollen, sondern auch fürs spielen. Aber es reicht die VErbindung nicht wirklich aus.

Deshalb möcht ich eine Bandbreitenbegrenzung realisieren , die die User auf einen gewissen Up und Download begrenzen sollen.

Weiters sollen die Referenten (wir sind 5 ) natürlich eine größere Bandbreite zur VEfügung haben.

Wie kann ich das realisieren. Der Server läuft auf Suse 8.2.

Welche Config Datein muss ich bearbeiten oder gibt es schon fertige Programme ??


Bitte um Hilfe
Grüße
Roli

petameta
prolinux-forum-admin
Posts: 1294
Joined: 14. Feb 2003 13:19

Re: Bandbreitenbegrenzung

#2 Post by petameta »

Also Qos (Quality of Service) ist unter Linux nicht leicht. Versuch es mal mit der htb-Klasse, die ist relativ einfach (das heißt nicht, daß es einfach ist :).

Befrag mal google nach Quality of Service und htb.

Descartes

Re: Bandbreitenbegrenzung

#3 Post by Descartes »

Mir fallen dazu mal schnell Quality-of-Service (QoS) und Class-Based-Queueing (CBQ) ein.

Kapitel 9 (Bandwidth Management) von "Linux Advanced Routing & Traffic Control" schon gelesen?
<a href="http://lartc.org/" target="_blank"><!--auto-->http://lartc.org/</a><!--auto-->

und wie stehts mit

"Controlling Bandwidth" (with FreeBSD)
<a href="http://www.onlamp.com/pub/a/bsd/2001/07 ... tml?page=1" target="_blank"><!--auto-->http://www.onlamp.com/pub/a/bsd/2001/07 ... <!--auto-->
<a href="http://www.onlamp.com/pub/a/bsd/2001/07 ... tml?page=2" target="_blank"><!--auto-->http://www.onlamp.com/pub/a/bsd/2001/07 ... <!--auto-->

bzw.

Linux Firewall - the Traffic Shaper
<a href="http://www.securityfocus.com/infocus/1285" target="_blank"><!--auto-->http://www.securityfocus.com/infocus/1285</a><!--auto-->

Traffic Shaping with Linux v2.4 and HTB qdisc
<a href="http://talk.trekweb.com/~jasonb/article ... owto.shtml" target="_blank"><!--auto-->http://talk.trekweb.com/~jasonb/article ... <!--auto-->

Quality of Service (QoS) and Traffic Control (TC)
<a href="http://www.fibrespeed.net/~mbabcock/linux/qos_tc/" target="_blank"><!--auto-->http://www.fibrespeed.net/~mbabcock/lin ... <!--auto-->

roli

Re: Bandbreitenbegrenzung

#4 Post by roli »

pfu !

naja , sieht ja nicht sehr einfach aus. hätt mir das ein bisserl einfacher vorgestellt.

was kann ich den noch machen , damit mir die leute nicht die anbindung zuscheissen. mir geht das voll am arsch.
spiele selbst in einem clan und da is man eh so nach jeder ms her und dann downloaden die alle , dass die leitung explodiert.

habt ihr sonst einen vorschlag ??

vielleicht Kazaa sperren und emule ??? Geht das ?? Auf welchen Ports funkionieren die ???

Danke schonmal.
Ihr habt mich schon um einiges weitergebracht

Descartes

Re: Bandbreitenbegrenzung

#5 Post by Descartes »

KaZaA verwendet i.d.R. 1214/tcp
eMule und eDonkey trifft man meistens bei 4242/tcp, 4661/tcp, 4224/tcp, 5555/tcp, 6667/tcp, ... manchmal auch auf 21/tcp, 80/tcp oder 99/tcp

Das sicherste wäre, per QoS bzw. CBQ die für deine Online-Spiele benötigten Ports mit Priorität durchzurouten und dem sämtlichen restlichen Traffic eine sehr niedrige Priorität einzuräumen. Das funktioniert allerdings nur solange, bis einer deiner Studienkollegen spitz bekommt, welche Ports mit Priorität geroutet werden. Der wird dann mal fluggs seinen eMule oder eDonkey Client neu konfigurieren damit dieser eben diese Ports verwendet und schon hast du wieder das alte Problem.

Vielleicht kannst du aber auch die Online-Zocker in ein anderes Subnetz hängen, als die Daten-Leecher. Dann könntest du ein CBQ über Ports *und* Subnetz aufbauen. (Nur so eine wilde Idee. Keine Garantie, ob man das überhaupt so einrichten kann.)

Mit der Bandbreite verhält es sich wie mit der Rechenpower: Performance kommt durch Hardware -- oder in deinem Fall durch eine breitere Anbindung.

sputnik1969
Posts: 92
Joined: 26. Jul 2002 15:58
Location: Berlin

Re: Bandbreitenbegrenzung

#6 Post by sputnik1969 »

Da ich weiss, das es nicht ganz einfach ist mit dem QOS poste ich dir hier mal den QOS-Teil meiner Firewall :)
Allerdings ist meine selbstgebastelt, und ich weiss nicht genau wo du das bei deiner einfügen müsstest, aber möglicherweise kannst du es ja wenigstens als Basis verwenden... Ist relativ selbsterklärend....
Achso, von Port bist Port wird immer als VON:BIS dargestellt :)

Gestartet wird mit folgendem:

------------------------------Start
#!/bin/sh
#
# Shell-Skript fuer Quality of Service mit HTB
#
TC="/usr/sbin/tc"
IPTABLES="/sbin/iptables"
#################################### Ultra Hi
# SSH Telnet Spiele und andere PING-Kritische Applikationen
RATE10="64kbit"
CEIL10="125kbit"
# Bevorzugte Rechner
#DL10IPS="192.168.111.254"
# Ping me ;)
PROTOCOL10="1"
# TCP-Source-Ports
TSL10PORTS="22 23 6969:6999 27900:29999 32766:32799"
# UDP-Source-Ports
USL10PORTS="6969:6999 27900:29999 32766:32799 14567:14570"
# TCP-Ziel-Ports
TDL10PORTS="22 23 6969:6999 27900:29999 32766:32799 14567:14570"
# UDP-Ziel-Ports
UDL10PORTS="6969:6999 27900:29999 32766:32799 14567:14570"
#################################### Hi
RATE20="130kbit"
CEIL20="225kbit"
# Rechner in dieser Klasse
#DL20IPS="192.168.111.254"
# VPN/IPSec
PROTOCOL20="50 51"
# Internet-Telefonie und andere rück-BANDBREITEN-Kritische Applikationen (evtl. Web- oder FTP-Server)
TSL20PORTS="500 6660:6770"
USL20PORTS="500 6660:6770"
TDL20PORTS="500 6660:6770"
UDL20PORTS="500 6660:6770"
#################################### Default
RATE30="78kbit"
CEIL30="225kbit"
#DL30IPS="192.168.111.254"
PROTOCOL30=""
# Das übliche surfen etc.
TSL30PORTS="25 20 21 80 8000:8100 3128 81"
USL30PORTS=""
TDL30PORTS="25 80 8000:8100 20 21 3128 81"
UDL30PORTS=""
#################################### Extra Low
RATE40="64kbit"
CEIL40="225kbit"
#DL40IPS="192.168.111.254"
PROTOCOL40=""
# mein Donkey Overnet LimeWire Napster SoulSeek und ihre Chats & Messengers
# und anderes was nicht wirklich Zeitkritisch ist...
TSL40PORTS="1210:1918 4002:4003 4444:4450 4660:4669 12950:12960 16426:16430 6346:6350 9998:10000 5244:5250 2242:2250 5036:5137 7777"
USL40PORTS="1210:1918 4002:4003 4444:4450 4660:4669 12950:12960 16426:16430 6346:6350 9998:10000 5244:5250 2242:2250 5036:5137"
TDL40PORTS="1210:1918 4002:4003 4444:4450 4660:4669 12950:12960 16426:16430 6346:6350 9998:10000 5244:5250 2242:2250 5036:5137 7777"
UDL40PORTS="1210:1918 4002:4003 4444:4450 4660:4669 12950:12960 16426:16430 6346:6350 9998:10000 5244:5250 2242:2250 5036:5137"

EXTIF=ppp0
INTIF=eth0
DLINK="1536kbit"
ULINK="255kbit"

############
# Outgoing
############
$TC qdisc add dev $EXTIF root handle 1: htb default 12
echo Hauptklasse
$TC class add dev $EXTIF parent 1:0 classid 1:1 htb rate $ULINK ceil $ULINK
echo Klasse fuer ACK
$TC class add dev $EXTIF parent 1:1 classid 1:10 htb rate $RATE10 ceil $CEIL10 prio 0
echo Klasse fuer VPN/SSH
$TC class add dev $EXTIF parent 1:1 classid 1:11 htb rate $RATE20 ceil $CEIL20 prio 1
echo Klasse fuer normalen Traffic
$TC class add dev $EXTIF parent 1:1 classid 1:12 htb rate $RATE30 ceil $CEIL30 prio 2
echo Klasse fuer Bulk
$TC class add dev $EXTIF parent 1:1 classid 1:13 htb rate $RATE40 ceil $CEIL40 prio 3

# ACKs
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp -m length --length :64 -j MARK --set-mark 10

for a in $PROTOCOL40
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p $a -j MARK --set-mark 13
done
for a in $TSL40PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --sport $a -j MARK --set-mark 13
done
for a in $TDL40PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --dport $a -j MARK --set-mark 13
done
for a in $USL40PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --sport $a -j MARK --set-mark 13
done
for a in $UDL40PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --dport $a -j MARK --set-mark 13
done
for a in $DL40IPS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -s $a -j MARK --set-mark 13
done


for a in $PROTOCOL30
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p $a -j MARK --set-mark 30
done
for a in $TSL30PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --sport $a -j MARK --set-mark 12
done
for a in $TDL30PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --dport $a -j MARK --set-mark 12
done
for a in $USL30PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --sport $a -j MARK --set-mark 12
done
for a in $UDL30PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --dport $a -j MARK --set-mark 12
done
for a in $DL30IPS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -s $a -j MARK --set-mark 12
done



for a in $PROTOCOL20
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p $a -j MARK --set-mark 20
done
for a in $TSL20PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --sport $a -j MARK --set-mark 11
done
for a in $TDL20PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --dport $a -j MARK --set-mark 11
done
for a in $USL20PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --sport $a -j MARK --set-mark 11
done
for a in $UDL20PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --dport $a -j MARK --set-mark 11
done
for a in $DL20IPS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -s $a -j MARK --set-mark 11
done



for a in $PROTOCOL10
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p $a -j MARK --set-mark 10
done
for a in $TSL10PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --sport $a -j MARK --set-mark 10
done
for a in $TDL10PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p tcp --dport $a -j MARK --set-mark 10
done
for a in $USL10PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --sport $a -j MARK --set-mark 10
done
for a in $UDL10PORTS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -p udp --dport $a -j MARK --set-mark 10
done
for a in $DL10IPS
do
$IPTABLES -A POSTROUTING -t mangle -o $EXTIF -s $a -j MARK --set-mark 10
done

$TC filter add dev $EXTIF parent 1:0 prio 0 protocol ip handle 10 fw flowid 1:10
$TC filter add dev $EXTIF parent 1:0 prio 0 protocol ip handle 11 fw flowid 1:11
$TC filter add dev $EXTIF parent 1:0 prio 0 protocol ip handle 13 fw flowid 1:13
$TC filter add dev $EXTIF parent 1:0 prio 0 protocol ip handle 12 fw flowid 1:12

#########
# SFQ
#########
$TC qdisc add dev $EXTIF parent 1:10 handle 10: sfq perturb 1 quantum 1492
$TC qdisc add dev $EXTIF parent 1:11 handle 11: sfq perturb 2 quantum 1492
$TC qdisc add dev $EXTIF parent 1:12 handle 12: sfq perturb 2 quantum 1492
$TC qdisc add dev $EXTIF parent 1:13 handle 13: sfq perturb 2 quantum 1492
------------------------------Stop
Stoppen mit
------------------------------Start
iptables -F -t mangle

tc qdisc del dev ppp0 root 2> /dev/null > /dev/null
tc qdisc del dev ppp0 ingress 2> /dev/null > /dev/null
tc qdisc del dev eth0 root 2> /dev/null > /dev/null
tc qdisc del dev lo root 2> /dev/null > /dev/null

------------------------------Stop

Ich hoffe es vereinfacht dir das ganze ein wenig...
Last edited by sputnik1969 on 13. May 2003 3:41, edited 2 times in total.

Blinky

Re: Bandbreitenbegrenzung

#7 Post by Blinky »

ging nich auch ip-adresse an die hardware-adresse (mac) binden? wenn einer ins netz will muss er eben zu dir kommen und seine hardwareadresse mitteilen. und so könnte man doch für jede ip (oder auch einen bereich) die regeln einzeln festlegen ...

aber ehrlich gesagt denke ich nicht, dass das bei 80 Leuten wirklich was bringt für's spielen ... surfen wird gehen, aber spielen kannst knicken. da wird die leitung schon durch die anfragen "getötet", egal welche ports du da vorbeileitest ... würd ich jetzt mal so behaupten (weil ich das auch schon probiert habe, und egal was ich angestellt habe, ging zwar jedesmal surfen bei vollem up- und download, aber spielen ging nie wirklich ... vielleicht hab ich auch noch nicht die richtigen einstellungen gefunden)

Post Reply