01.09.10 14:01 Kategorie: Verschiedenes

NAT mit Bandbreiten-Limit

Übermittlung Ihrer Stimme...
Noch nicht bewertet. Seien Sie der Erste, der diesen Artikel bewertet!
Klicken Sie auf den Bewertungsbalken, um diesen Artikel zu bewerten.

Es gibt mehrere gute Gründe die Geschwindigkeit von Verbindungen zu drosseln. In einer Firewall oder einem DSL-Router will man in der Regel die Geschwindigkeit einzelner Dienste drosseln, um zum Beispiel während eines FTP-Uploads noch gemütlich surfen zu können.


Im Linux Bereich erledigen die Programme iptables und tc diese Aufgabe zuverlässig.

Bei einem Server kann es auch sehr interessant sein, um für zeitkritische Dienste wie Live-Streaming Ressourcen garantieren zu können.

Während wir bei der Suche nach Scripten zur Bandbreitenbegrenzungen für Arbeitsplazpcs recht schnell im Internet fündig wurden, haben wir für ein Script zur Bandbreitensteuerung für ein Servertbackend noch etwas selbst experimentieren müssen.

Der elegantere Weg ist es hier die Traffic-Regeln auf dem NAT-Server einstellen zu können, statt jeden Backendserver einzeln konfigurieren zu müssen.

Ein Script traffic.sh erledigt die Bandbreitenbegrenzung

  1. DEV=eth0
  2. IPT=/sbin/iptables
  3. TC=/sbin/tc
  4. $IPT -t mangle -F
  5. $TC qdisc del dev $DEV ingress > /dev/null 2>&1
  6. $TC qdisc del dev $DEV root > /dev/null 2>&1
  7. $TC qdisc del dev lo root > /dev/null 2>&1
  8.  
  9. $TC qdisc add dev $DEV root handle 1:0 htb default 12 r2q 6
  10. $TC class add dev $DEV parent 1:0 classid 1:1 htb rate 100mbit ceil 100mbit
  11. $TC class add dev $DEV parent 1:1 classid 1:10 htb rate 1mbit ceil
  12. 2mbit prio 0
  13. $TC class add dev $DEV parent 1:1 classid 1:11 htb rate 5mbit ceil
  14. 10mbit prio 1
  15. $TC class add dev $DEV parent 1:1 classid 1:12 htb rate 100mbit ceil
  16. 100mbit prio 2
  17.  
  18. $TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 10 fw
  19. flowid 1:10
  20. $TC filter add dev $DEV parent 1:0 prio 0 protocol ip handle 11 fw
  21. flowid 1:11
  22. $TC qdisc add dev $DEV parent 1:10 handle 10: sfq perturb 10
  23. $TC qdisc add dev $DEV parent 1:11 handle 11: sfq perturb 10
  24. $TC qdisc add dev $DEV parent 1:12 handle 12: sfq perturb 10

Ein Script ipnat.sh sorgt neben dem Nating auch für die Markierung der Pakete


  1. #!/bin/bash
  2. IPTABLES=`which iptables`;
  3. #skript muss als root laufen, sonst hat er nicht die nötige rechte die
  4. Tablen und Kernel einstellungen anzupassen!
  5. MYNAME=`whoami`;
  6. if [ $MYNAME != "root" ]; then
  7. exec `which sudo` $0 $1;
  8. fi
  9. case $1 in
  10. "start")
  11. echo "1" > /proc/sys/net/ipv4/ip_forward;
  12. # clear the NAT table to be sure
  13. $IPTABLES -t nat -F
  14. $IPTABLES -t mangle -F
  15. $IPTABLES -A PREROUTING -t mangle -s 10.10.10.100 -p tcp -j MARK
  16. --set-mark 10
  17. $IPTABLES -t nat -A PREROUTING -p tcp -d 192.168.111.72 --dport 80
  18. -j DNAT --to-destination 10.10.10.100:80
  19. ;;
  20. "stop")
  21. echo "0" > /proc/sys/net/ipv4/ip_forward;
  22. $IPTABLES -t nat -F
  23. ;;
  24. "stop")
  25. echo "0" > /proc/sys/net/ipv4/ip_forward;
  26. $IPTABLES -t nat -F
  27. ;;
  28. "restart")
  29. $0 stop
  30. $0 start
  31. ;;
  32. *)
  33. echo "Usage: $0 start|stop|restart"
  34. ;;
  35. esac

In diesem Beispiel ist das Entscheidende, dass auf dem NAT-Server alle Pakete markiert werden, die von der IP -s 10.10.10.100, also unserem Backendserver auf das System gelangen.

Stehen im Backend jetzt zum Beispiel ein Streamingserver und ein Webserver, lassen sich sehr einfach die Pakete vom Streamingserver höher priorisieren.

Deutlich ergänzende Möglichkeiten kann auch ein echter Loadbalancer mit LVS bieten.


*

CAPTCHA Bild zum Spamschutz
Wenn Sie das Wort nicht lesen können, bitte hier klicken.
*
*

* Bitte ausfüllen

test, 08-09-10 11:34:
test
Folgen Sie uns auf:
Werden Sie Fan!
Empfehlen Sie uns: