Folgende Situation: Wir sind eine Gruppe von Studenten, die die Internetverbindung für die örtlichen Wohnheime verwalten, mit insgesamt etwa 2000 Endbenutzern.
Wir haben ein Verkehrspunktsystem, jeder MB Down- oder Upload kostet Punkte, neue Punkte werden stundenweise hinzugefügt. Im Moment blockieren wir den Internetzugang eines Benutzers, wenn er alle seine Punkte ausgegeben hat (indem wir ihn in eine REJECT-Richtlinie in iptables auf unserem Debian-Gateway-Router einfügen).
Wir möchten nur die Bandbreite eines Benutzers begrenzen. Was ist der beste Weg, dies zu tun?
Die einfache Antwort wäre, ein Ratenlimit für den Switch-Port des Benutzers festzulegen (meistens Cisco Catalyst 3550s). Dies ist jedoch unerwünscht, da der Verkehr innerhalb unseres eigenen Netzwerks und zum Universitätsnetzwerk unbegrenzt bleiben sollte. Gibt es eine Möglichkeit, die Bandbreite nur für Pakete mit einem bestimmten Ziel- oder Quell-IP-Bereich (also sowohl Egress als auch Ingress) in Cisco IOS zu begrenzen? Ich konnte nichts finden.
Die andere Möglichkeit wäre, den Datenverkehr auf unserem Gateway-Router zu steuern. Mir fallen mehrere Lösungen ein:
tc oder tcng - beide scheinen eine eher arkane Syntax zu haben und bieten keine guten Funktionen für die Kontrolle des IP-Verkehrs. Eine dedizierte QDisc für so viele Leute würde den Router wahrscheinlich ziemlich verlangsamen. Darüber hinaus ist die Dokumentation zu beiden ziemlich veraltet.
shorewall - scheint eine ziemlich ordentliche Syntax für Konfigurationen zu haben, ich bin mir jedoch nicht sicher, ob es diese Menge an Verkehr und Benutzern verarbeiten kann und ob es für die Begrenzung des IP-Verkehrs geeignet ist
pfSense - sieht aus wie ein Betriebssystem für Zwecke wie das unsere. Es würde jedoch erfordern, dass wir unseren Gateway-Router vollständig neu installieren. Wir haben keine anderen BSD-Systeme und pfSense müsste über sehr gute Funktionen zur Verkehrsabrechnung verfügen (wir verwenden dort derzeit fprobe-ulog und ulog-acctd).
Was ist deine Erfahrung? Welche Lösung entspricht unseren Anforderungen und kann am einfachsten gewartet werden? Hast du noch andere ideen
Wenn Sie zusätzliche Informationen zu unserem System benötigen, zögern Sie bitte nicht zu fragen.
Danke im Voraus.
EDIT : Ich habe das System mit iptables
und implementiert tc
.
Jeder Benutzer hat ein / 28-Subnetz, eine VPN-IP (beide ab 10.0.0.0/8) und eine externe IP, die alle über eine iptables-Kette gesteuert werden. Diese Kette hat nur eine Regel, eine einfache RETURN
.
Alle fünf Minuten liest ein Python-Skript die Bytezähler dieser Regeln aus. Es setzt die Zähler zurück und aktualisiert das Verkehrspunktkonto des Benutzers in unserer PostgreSQL-Datenbank.
Wenn der Punktestand eines Benutzers unter einen bestimmten Schwellenwert fällt, werden zwei TC-Klassen für diesen Benutzer erstellt (eine für die eingehende und eine für die ausgehende Schnittstelle auf unserem Gateway-Router). Die IPs werden in TC-Filter eingegeben, die zu diesen Klassen gehören. Die Klassen sind durch einen HTB geschwindigkeitsbegrenzt.
Im Vergleich zum vorherigen System mit fprobe-ulog
und ist ulog-acctd
dies viel schneller, da die Bytezählung von iptables durchgeführt wird.
Die Netzwerkgeschwindigkeit hat sich für unsere Benutzer erheblich verbessert.
quelle
Dummynet ist meiner Meinung nach ein sehr guter Vorschlag. Aber ich bin mir sicher, dass iptables auch in der Lage sind, den Datenverkehr zu gestalten , sodass Sie dies einfach auf Ihrer Debian-Box tun können.
quelle
tc sollte gut funktionieren. Ich glaube, Sie möchten Ihre aktuellen iptables-Regeln so ändern, dass sie den Verkehr markieren und nicht ablehnen. Dann können Sie eine kleine Anzahl von tc-Regeln verwenden, um die Verkehrsformung auf diese markierten Flüsse anzuwenden.
Schauen Sie sich auch ipset an, um die Liste der gedrosselten Benutzer zu verwalten. http://ipset.netfilter.org/
quelle
Trafficpanel scheint eine Lösung zu sein. Unter anderem:
Eigentlich habe ich das Ding noch nie ausprobiert, sieht aber ok aus.
quelle