Netzwerk Verkehr
Die heute gängigen Netzwerkkomponenten haben nur sehr eingeschränkte Möglichkeiten um den Netzwerkverkehr verschiedener Rechner fair zu behandeln. Ein einzelner Rechner kann einen Switch so beanspruchen, dass andere Rechner im Subnetz nur noch sehr eingeschränkt arbeiten können. Um das zu vermeiden setzt man am besten beim Verursacher, und kontrolliert dessen Verkehr. Wie man das bewerkstelligt erfährt man im folgenden Artikel:
Kontrollieren von Netzverkehr
Bevor man sich Gedanken derüber macht, wie man Netzwerkverkehr kontrollieren oder steuern kann, sollten zuerst einige Begriffe geklärt werden um Missverständnissen vorzubeugen:
Shaping
Unter Shaping versteht man die Steuerung der Übertragungsrate. Es wird nicht nur genutzt, um die Bandbreite zu begrenzen, sondern kann auch dazu dienen Spitzen bei der Netzauslastung zu glätten oder ein verbessertes Antwort-Verhalten zu erreichen. Shaping betrifft ausschließch den ausgehenden Netzverkehr.
Policing
Von Policing hingegen spricht man, wenn der eingehende Netzverkehr kontrolliert werden soll. Das ist um einiges komplexer als Shaping, da letztendlich der sendende Rechner die Datenrate bestimmt. Allerdings bieten die gängigen Netzprotokolle Mechanismen um auch den eingehenden Verkehr weitestgehend zu kontrollieren.
Beispiel
Ein einfaches Beispiel, mit dessen Hilfe man den ausgehenden Verkehr limitieren kann:
#!/bin/bash # Outgoing: # 1:0 (root) # | # 1:1 # / \ # 1:2 1:10 (default) # # Incoming: # ffff:0 (ingress) set -x DEV=eth0 ############################ # Outbound: ############################ /usr/sbin/tc qdisc del dev $DEV root /usr/sbin/tc qdisc add dev $DEV handle 1:0 root htb default 10 # # Classes # /usr/sbin/tc class add dev $DEV parent 1:0 classid 1:1 htb rate 1000mbit ceil 1000mbit /usr/sbin/tc class add dev $DEV parent 1:1 classid 1:2 htb rate 600mbit ceil 1000mbit /usr/sbin/tc class add dev $DEV parent 1:1 classid 1:10 htb rate 400mbit ceil 400mbit # # Filters # /usr/sbin/tc filter add dev $DEV protocol ip parent 1:0 prio 1 u32 match ip dport 22 0xffff flowid 1:2 /usr/sbin/tc filter add dev $DEV protocol ip parent 1:0 prio 2 u32 match ip dst 192.168.0.0/16 flowid 1:2
In obigen Beispiel werden verschiedene Klassen definiert (/usr/sbin/tc class):
Klasse reserviert maximal Bezeichnung
+- 1: root
+- 1:1 1000mbit 1000mbit
+- 1:2 600mbit 1000mbit
+- 1:10 400mbit 400mbit default
Anschließend werden verschiedene Verbindungen den vorher definierten Klassen zugeordnet: alle Verbindungen zum Port 22 (ssh) werden der Klasse 1:2 zugeordnet, ebenso alle Verbindungen ins Netz 192.168.0.0/16. Alle nicht explizit erwähnten Verbindungen laufen automatisch über die Klasse default und sind damit auf maximal 400mbit beschränkt.
Und ein Versuch auch den eingehenden Verkehr zu kontrollieren:
############################ # Inbound: ############################ /usr/sbin/tc qdisc del dev $DEV ingress /usr/sbin/tc qdisc add dev $DEV handle ffff: ingress # Filters /usr/sbin/tc filter add dev $DEV protocol ip parent ffff:0 prio 1 u32 match ip src 0.0.0.0/0 police rate 1000kbi t burst 1000kbit drop flowid ffff:1



