Zusammenfassend: Ich habe einen dedizierten Server mit ein paar Freunden, die einen Torrent-Client mit Web-GUI ausführen. Jeder Benutzer führt einen Client unter seinem Benutzernamen auf dem Server aus, sodass die Downloads in seinem Benutzerverzeichnis erfolgen und nur er Zugriff auf seine eigenen Dateien usw. hat.
Wie kann ich die monatliche Bandbreite pro Benutzer überwachen und begrenzen?
Ich dachte, es müsste einen Weg geben, iptables zu benutzen. Durch Überwachen der von allen Prozessen von Benutzer X verwendeten Bandbreite. Wenn sie mehr als die monatlich zulässige Bandbreite von Y GB verwendet haben, erhalten sie die Meldung, dass das Netzwerk für ihren Torrent-Client blockiert wird oder der Client vollständig beendet wird. Ich habe auch über Squid nachgedacht, aber da es mehrere Torrent-Clients verwenden würde, könnte dies eine Menge Serverressourcen verbrauchen ...
Ich benutze Debian Lenny.
Ich bin mir nicht sicher, wie ich das machen soll ...
Wäre das überhaupt möglich? Ich bin dankbar für auch nur Teillösungen dafür ...
Antworten:
Sie können den Befehl 'tc' zur Verkehrssteuerung verwenden.
Geben Sie jedem Ihrer Freunde einen anderen Port für BitTorrent. Markieren Sie die TCP-Pakete mit iptables für jeden Port.
Verwenden Sie dann den Befehl tc, um die maximale Bandbreite und Rate für jeden Benutzer festzulegen.
Am Monatsende können Sie die 'tc'-Befehle löschen und hinzufügen, um die Zähler zurückzusetzen.
Sie können die Nutzung für jeden Benutzer folgendermaßen überwachen:
Wenn Sie Debian Install Shorewall verwenden, ist es wirklich einfach, Traffic Shaping durchzuführen, ohne sich mit iptables herumzuschlagen. Sie bearbeiten nur tcdevices, tcclasses und tcrules im Verzeichnis / etc / shorewall. Weitere Informationen finden Sie hier: http://www.shorewall.net/traffic_shaping.htm
Wie die andere Person angedeutet hat, ist es wahrscheinlich besser, Pakete nach Benutzernamen zu kennzeichnen als nach Port. Auf diese Weise können die Ports geändert werden, ohne iptables zu aktualisieren.
quelle
Sie können versuchen, die
--quota
Option in iptables zu verwenden, mit der Sie ein Übertragungslimit in Byte festlegen können. Da Sie mehrere Torrent-Clients--uid-owner
ausführen , die jeweils unter einem anderen Benutzernamen ausgeführt werden, können Sie dies mit der Option kombinieren , wie von katriel vorgeschlagen.Auf diese Weise können Sie ein Übertragungslimit pro Zeitraum (Tag / Woche / Monat / usw.) erzwingen, ohne die Download-Geschwindigkeit Ihrer Benutzer begrenzen zu müssen.
Um die Paketzähler dauerhaft zu machen, müssen Sie sie regelmäßig speichern (z. B. durch einen Cron-Job), damit Sie sie wiederherstellen können, falls Sie den Server neu starten oder die Firewall-Regeln leeren müssen.
quelle
Nur um die obige Frage zu ergänzen.
Sie könnten iptables mit User Matching verwenden, um die Pakete wie folgt zu färben:
Verwenden Sie dann 'tc', um die Anzahl pro Benutzer zu begrenzen.
quelle
Abhängig davon, wie viel monatlichen Datenverkehr Sie für jeden Benutzer pro Monat zulassen möchten, können Sie ein entsprechendes Bandbreitenlimit festlegen, indem Sie einige der von den anderen Benutzern vorgeschlagenen Tools verwenden.
Angenommen, Sie möchten ein maximales Download-Limit von 250 GB / Monat festlegen . Wenn Sie dies durch die Anzahl der Stunden pro Monat (~ 730) und dann durch 3600 dividieren, erhalten Sie die maximale Download-Rate, die in diesem Beispiel bei rund 100 KB / s liegt .
Wenn Sie dann eine maximale DL-Rate von 100 KB / s festlegen, erzwingen Sie automatisch Ihr Download-Limit von 250 GB / Monat (vorausgesetzt natürlich, dass Ihr Traffic Shaper ordnungsgemäß funktioniert). Wenn Ihre Benutzer nicht schneller als 100 KB / s herunterladen können, können sie nicht mehr als 250 GB / Monat herunterladen.
Um die Downloadrate zu begrenzen, können Sie
tc
einige der anderen erwähnten Tools verwenden. Wenn Sie nicht direkt damit umgehen möchtentc
, können Sie cbq.init verwenden , das ziemlich einfach einzurichten ist. Dieses Skript war in Debian Etch alsshaper
Paket vorhanden, scheint aber danach entfernt worden zu sein. Wie auch immer, es ist nur ein einfaches Skript, das Sie von SourceForge herunterladen können.Natürlich ist dieser Ansatz in Ihrem Fall möglicherweise nicht hilfreich (wenn Sie beispielsweise möchten, dass Ihre Benutzer mit der maximal verfügbaren Geschwindigkeit herunterladen und trotzdem Ihr monatliches Limit durchsetzen können, funktioniert mein Vorschlag nicht).
quelle
Ich weiß, dass dies ein alter Post ist, aber selbst ich bin heute auf der Suche nach Antworten darauf gestoßen und habe irgendwann etwas zusammengesetzt, das perfekt für mich funktioniert. Ich habe einen Downlink mit 25 MBit / s und einen Uplink mit 2,5 MBit / s und es gibt 4 Personen und 5 Server, die diesen Link gemeinsam nutzen. Bei Servern ist die Uplink-Bandbreite von entscheidender Bedeutung, bei 4 Personen ist der Downlink jedoch nützlich, sodass niemand alles in den Griff bekommt.
Ich verwende Centos 6.3 als Router, aber diese Befehle sollten unter jedem Linux funktionieren. eth0 ist mein Uplink zum Provider eth1 ist meine LAN-Verbindung über einen 24-Port-Switch und einen WLAN-Zugangspunkt
Um die Anzahl der Benutzer zu begrenzen, verwenden Sie 2 iptables-Zeilen pro Benutzer
um Uploads zu begrenzen:
um Downloads zu begrenzen
Ändern Sie einfach Ihre IP-Adresse und die eth-Ports so, dass sie dem entsprechen, den Sie einschränken möchten
quelle
Der Vollständigkeit halber gibt es einen Userspace-Daemon namens
trickle
. Es kann verwendet werden, um die Bandbreite eines einzelnen Prozesses zu begrenzen. Die Verwendung ist sehr einfach:trickle -d 10 aptitude install wesnoth
Um beispielsweise die von aptitude verwendete Bandbreite zu begrenzen, können Sie schreiben: Da es jedoch mit LD_PRELOAD funktioniert, kann es leicht von einem Benutzer mit Shell-Zugriff überschrieben werden.quelle
Schauen Sie sich den useripacct- Kernel- Patch an (dieser hat tatsächlich eine ziemlich lange Geschichte ). In den Dokumenten für die alte Version wird anscheinend auch die Kontingentdurchsetzung sowie die Überwachung bereitgestellt. Außerdem können Sie Ihre eigenen Richtlinienskripts bereitstellen.
Da die Useripacct-Ersteller auf einen Kernel-Patch zurückgreifen mussten, um das gewünschte Verhalten zu erzielen, ist es unwahrscheinlich, dass standardmäßig eine einfachere Methode verfügbar ist. Die einzige Alternative scheint eine Bandbreitenbeschränkung (durch Tc oder Trickle) zu sein, wie in den meisten anderen Antworten hier vorgeschlagen (aber nicht genau das, wonach Sie suchen), oder die Erstellung einer VM für jeden Benutzer (unter Verwendung einer schlanken Betriebssystemvirtualisierung) von so etwas wie OpenVZ ) und Accounting-Verkehr pro VM (was von so etwas wie vnstat ziemlich einfach beurteilt wird ). Das scheint allerdings übertrieben zu sein (plötzlich müssen Sie statt eines Systems eine Reihe von VMs verwalten).
quelle