Linux Server Hack - Hoe Bandwidth Limit met Linux, TC, en iproute2!

Herinner Ik heb een snelle post over hoe je een load-balancing script (of bandbreedte throttling) schrijven?
Nou, vandaag vond ik een andere coole script voor het beperken van bandbreedte. Ik geloof dat dit meer als een ingewikkeld, maar als je het nodig hebt, kan het zeer nuttig zijn.
Hier is de code via Adamsinfo.com:
# Set some variables
#!/bin/bash
EXT_IFACE=”eth0″
INT_IFACE=”eth1″
TC=”tc”
UNITS=”kbit”
LINE=”10000″ #maximum ext link speed
LIMIT=”5000″ #maximum that we'll allow
# Stel enkele variabelen voor individuele "klassen" die we zullen gebruiken om de interne upload snelheid vorm, dwz het vormgeven van eth0
CLS1_RATE = "200" # Hoge prioriteit verkeer klasse heeft 200kbit
CLS2_RATE = "300" # middelhoge prioriteit klasse heeft 300kbit
CLS3_RATE = "4500" # Bulk klasse heeft 4500kbit
# (We stellen welke kan lenen waaruit later)
# Stel enkele variabelen voor individuele "klassen" die we zullen gebruiken om de interne download snelheid vorm, dwz het vormgeven eth1
INT_CLS1_RATE = "1000" # Prioriteit
INT_CLS2_RATE = "4000" # Bulk
# Delete current qdiscs.
dwz schoon
TC $ () qdisc del dev $ () INT_IFACE root
TC $ () qdisc del dev $ () EXT_IFACE root
# Bevestig wortel qdiscs.
We gebruiken HTB hier, en verbonden deze qdisc beide interfaces.
We label it "1:0"
TC $ () qdisc toevoegen dev $ () INT_IFACE wortel handvat 1:0 HTB
TC $ () qdisc toevoegen dev $ () EXT_IFACE wortel handvat 1:0 HTB
# Maak wortel klassen, met de maximale grenswaarden vastgesteld
# Een voor eth1
$ () TC klasse toe te voegen dev $ () INT_IFACE ouder 1:0 classid 1:1 HTB tarief LIMIT $ () $ () EENHEDEN ceil LIMIT $ () $ () EENHEDEN
# Een voor eth0
$ () TC klasse toe te voegen dev $ () EXT_IFACE ouder 1:0 classid 1:1 HTB tarief LIMIT $ () $ () EENHEDEN ceil LIMIT $ () $ () EENHEDEN
# Create kind klassen
# Dit zijn voor onze interne interface eth1
# Maak een klasse etiket "1:2" en geef het de limiet hierboven omschreven
$ () TC klasse toe te voegen dev $ () INT_IFACE ouder 1:1 classid 1:2 HTB tarief INT_CLS1_RATE $ () $ () EENHEDEN ceil LIMIT $ () $ () EENHEDEN
# Maak een klasse label "1:3" en geef het de limiet hierboven omschreven
$ () TC klasse toe te voegen dev $ () INT_IFACE ouder 1:1 classid 1:3 HTB tarief INT_CLS2_RATE $ () $ () EENHEDEN ceil INT_CLS2_RATE $ () $ () EENHEDEN
# EXT_IF (upload) nu.
We hebben ook vastgesteld welke klassen kunnen lenen en uitlenen.
# Deze klasse is gegarandeerd 200kbit en kan barsten tot 5000kbit indien beschikbaar
$ () TC klasse toe te voegen dev $ () EXT_IFACE ouder 1:1 classid 1:2 HTB tarief CLS1_RATE $ () $ () EENHEDEN ceil LIMIT $ () $ () EENHEDEN
# Deze klasse is gegarandeerd 300kbit en kan barsten tot 5000kbit-200kbit = 4800kbit indien beschikbaar
$ () TC klasse toe te voegen dev $ () EXT_IFACE ouder 1:1 classid 1:3 HTB tarief CLS2_RATE $ () $ () EENHEDEN ceil `echo $ (LIMIT) - $ (CLS1_RATE) | bc` $ () EENHEDEN
# Deze klasse kan gegarandeerd is 4500kbit en kan niet barsten verleden (5000kbit-200kbit-300kbit = 4500kbit).
# Dus zelfs als onze bulkverkeer goes crazy, de twee klassen hierboven zijn nog gegarandeerde beschikbaarheid.
$ () TC klasse toe te voegen dev $ () EXT_IFACE ouder 1:1 classid 1:4 HTB tarief CLS3_RATE $ () $ () EENHEDEN ceil `echo $ (LIMIT) - $ (CLS1_RATE) - $ (CLS2_RATE) | bc` $ EENHEDEN ()
# Voeg pfifo.
Lees meer over pfifo elders, het is buiten het bereik van deze HOWTO.
TC $ () qdisc toevoegen dev $ () INT_IFACE ouder 1:2 handvat 12: pfifo max. 10
TC $ () qdisc toevoegen dev $ () INT_IFACE ouder 1:3 handvat 13: pfifo max. 10
TC $ () qdisc toevoegen dev $ () EXT_IFACE ouder 1:2 handvat 12: pfifo max. 10
TC $ () qdisc toevoegen dev $ () EXT_IFACE ouder 1:3 handvat 13: pfifo max. 10
TC $ () qdisc toevoegen dev $ () EXT_IFACE ouder 1:4 handvat 14: pfifo max. 10
# # # Gedaan toevoegen van alle klassen, nu ingesteld sommige regels!
# # #
# INT_IFACE
# Let op de richting van de 'zomertijd'.
Verkeer dat van onze interne interface gaat en om onze servers is uit download snelheid server, dus SOME_IMPORTANT_IP wordt toegewezen to 1:2 klasse voor download.
$ () TC filter toe te voegen dev $ () INT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip dst SOME_IMPORTANT_IP/32 flowid 1:2
$ () TC filter toe te voegen dev $ () INT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip dst SOME_OTHER_IMPORTANT_IP/32 flowid 1:2
# Alle andere servers download snelheid gaat naar 1:3 - niet zo belangrijk als de twee bovengenoemde
$ () TC filter toe te voegen dev $ () INT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip dst 0.0.0.0 / 0 flowid 1:3
# EXT_IFACE
# Prioriteren DNS verzoeken
$ () TC filter toe te voegen dev $ () EXT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 wedstrijd ip sport 53 0xffff flowid 1:2
# SSH is belangrijk
$ () TC filter toe te voegen dev $ () EXT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip src IMPORTANT_IP/32 wedstrijd ip sport 22 0xffff flowid 1:2
# Onze exim SMTP-server is ook belangrijk
$ () TC filter toe te voegen dev $ () EXT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip src 217.10.156.197/32 match ip sport 25 0xffff flowid 1:3
# Het leeuwendeel
$ () TC filter toe te voegen dev $ () EXT_IFACE ouder 1:0 protocol ip prio 1 u32 match ip src 0.0.0.0 / 0 flowid 1:4






