Linux Server Hack - How to Limit Bandbreite mit Linux, TC, und iproute2!

Denken Sie daran, ich habe eine kurze Nachricht auf, wie man ein Load-Balancing-Skript (oder Bandbreitenbeschränkung)?
Nun, heute fand ich einen anderen kühlen Skript für die Begrenzung der Bandbreite. Ich glaube, das, wenn mehr kompliziert, aber wenn Sie es brauchen, könnte es sehr hilfreich sein.
Hier ist der Code über Adamsinfo.com:
# Setzen Sie einige Variablen
#! / bin / bash
EXT_IFACE = "eth0"
INT_IFACE = "eth1"
TC = "tc"
Units = "kbit"
LINE = "10000" # maximale Geschwindigkeit Link Extern
Limit = "5000" # höchstens, dass wir damit
# Setzen Sie einige Variablen für die einzelnen "Klassen", die wir verwenden, um interne Form Upload-Geschwindigkeit, dh die Gestaltung eth0
CLS1_RATE = "200" # Hohe Priorität Verkehr Klasse 200kbit
CLS2_RATE = "300" # Mittlere Priorität Klasse 300kbit
CLS3_RATE = "4500" # Bulk Klasse 4500kbit
# (Wir setzen kann, welche leihen, aus denen später)
# Setzen Sie einige Variablen für die einzelnen "Klassen", die wir verwenden, um Form internen Download-Geschwindigkeit, dh die Gestaltung eth1
INT_CLS1_RATE = "1000" # Priorität
INT_CLS2_RATE = "4000" # Bulk
# Löschen des aktuellen qdiscs. dh aufräumen
$ (TC) qdisc del dev $ () INT_IFACE root
$ (TC) qdisc del dev $ () EXT_IFACE root
# Root-qdiscs anhängen.Wir sind mit HTB hier und Befestigung dieser qdisc auf beide Schnittstellen. Wir nennen sie "1:0"
$ (TC qdisc hinzufügen) dev $ () INT_IFACE root HTB mit 1:0
$ (TC qdisc hinzufügen) dev $ () EXT_IFACE root HTB mit 1:0
# Root-Klassen erstellen, mit der Höchstwerte definiert
# Einer für eth1
$ (TC) Klasse hinzufügen dev $ () INT_IFACE Eltern 1:0 ClassID 1:1 HTB Satz $ (LIMIT)) $ (EINHEITEN ceil $ (LIMIT)) $ (EINHEITEN
# Einer für eth0
$ (TC) Klasse hinzufügen dev $ () EXT_IFACE Eltern 1:0 ClassID 1:1 HTB Satz $ (LIMIT)) $ (EINHEITEN ceil $ (LIMIT)) $ (EINHEITEN
# Erstellen Kind-Klassen
# Dies sind die für unsere interne Schnittstelle eth1
# Erstellen Sie eine Klasse der Aufschrift "1:2" und geben es über die Grenze definiert
$ (TC) Klasse hinzufügen dev $ () INT_IFACE Eltern 1:1 ClassID 1:2 HTB Satz $ () $ (INT_CLS1_RATE EINHEITEN) ceil $ (LIMIT)) $ (EINHEITEN
# Erstellen Sie eine Klasse der Aufschrift "1:3" und geben es über die Grenze definiert
$ (TC) Klasse hinzufügen dev $ () INT_IFACE Eltern 1:1 ClassID 1:3 HTB Satz $ () $ (INT_CLS2_RATE EINHEITEN) ceil $ () $ (INT_CLS2_RATE EINHEITEN)
# EXT_IF (Upload) jetzt. Wir auch, welche Klassen kann leihen und verleihen.
# Diese Klasse ist garantiert 200kbit und kann bis zu 5000kbit platzen, wenn verfügbar
$ (TC) Klasse hinzufügen dev $ () EXT_IFACE Eltern 1:1 ClassID 1:2 HTB Satz $ () $ (CLS1_RATE EINHEITEN) ceil $ (LIMIT)) $ (EINHEITEN
# Diese Klasse ist garantiert 300kbit und platzen können bis zu 5000kbit-200kbit = 4800kbit falls vorhanden
$ (TC) Klasse hinzufügen dev $ () EXT_IFACE Eltern 1:1 ClassID 1:3 HTB Satz $ () $ (CLS2_RATE EINHEITEN) ceil `echo $ (LIMIT) - $ () CLS1_RATE | bc` $ () EINHEITEN
# Diese Klasse kann 4500kbit ist garantiert und kann nicht platzen Vergangenheit (5000kbit-200kbit-300kbit = 4500kbit).
# Also auch, wenn unsere Bulk-Verkehr geht verrückt, die beiden oben genannten Klassen sind noch garantierte Verfügbarkeit.
$ (TC) Klasse hinzufügen dev $ () EXT_IFACE Eltern 1:1 ClassID 1:4 HTB Satz $ () $ (CLS3_RATE EINHEITEN) ceil `echo $ (LIMIT) - $ (CLS1_RATE) - $ () CLS2_RATE | bc` $ EINHEITEN ()
# Add pfifo. Lesen Sie mehr über pfifo anderswo, es ist außerhalb des Geltungsbereichs dieses HOWTO.
$ (TC qdisc hinzufügen) dev $ () INT_IFACE Eltern 1:2 mit 12: pfifo Limit 10
$ (TC qdisc hinzufügen) dev $ () INT_IFACE Eltern 1:3 mit 13: pfifo Limit 10
$ (TC qdisc hinzufügen) dev $ () EXT_IFACE Eltern 1:2 mit 12: pfifo Limit 10
$ (TC qdisc hinzufügen) dev $ () EXT_IFACE Eltern 1:3 mit 13: pfifo Limit 10
$ (TC qdisc hinzufügen) dev $ () EXT_IFACE Eltern 1:4 mit 14: pfifo Limit 10
# # # Geschehen hinzufügen alle Klassen, nun einige Regeln! # # #
# INT_IFACE
# Beachten Sie die "Sommerzeit" Richtung. Verkehr, die aus unseren internen Schnittstelle und auf unsere Server ist die Server-Download-Geschwindigkeit, so SOME_IMPORTANT_IP zugewiesen 1:2 Klasse zum Download bereit.
$ (TC) Filter hinzufügen dev $ () INT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip dst SOME_IMPORTANT_IP/32 flowid 1:2
$ (TC) Filter hinzufügen dev $ () INT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip dst SOME_OTHER_IMPORTANT_IP/32 flowid 1:2
# Alle anderen Server Download-Geschwindigkeit geht bis 1:3 - nicht so wichtig wie die beiden oben genannten
$ (TC) Filter hinzufügen dev $ () INT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip dst 0.0.0.0 / 0 flowid 1:3
# EXT_IFACE
# Priorisieren DNS-Anfragen
$ (TC) Filter hinzufügen dev $ () EXT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip src IMPORTANT_IP/32 mit IP-Sport 53 0xffff flowid 1:2
# SSH ist wichtig
$ (TC) Filter hinzufügen dev $ () EXT_IFACE Muttergesellschaft 1:0-Protokoll IP PRIO 1 U32 mit IP-src IMPORTANT_IP/32 mit IP-Sport 22 0xffff flowid 1:2
Unsere # exim-SMTP-Server ist auch wichtig
$ (TC) Filter hinzufügen dev $ () EXT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip src 217.10.156.197/32 mit IP-Sport 25 0xffff flowid 1:3
# Der Großteil
$ (TC) Filter hinzufügen dev $ () EXT_IFACE Muttergesellschaft 1:0-Protokoll ip prio 1 u32 match ip src 0.0.0.0 / 0 flowid 1:4


















































