Tröpfeln – Steuern des Netzwerkdatenverkehrs von Anwendungen in Linux

Haben Sie jemals Situationen erlebt, in denen eine Anwendung Ihre Netzwerkbandbreite dominiert hat? Wenn Sie jemals in einer Situation waren, in der eine Anwendung den gesamten Datenverkehr verbraucht hat, dann werden Sie die Rolle der Trickle-Bandbreitenformer-Anwendung schätzen.

Ob Sie ein Systemadministrator sind oder nur ein Linux-Benutzer, müssen Sie lernen, wie Sie die Upload- und Download-Geschwindigkeiten für Anwendungen steuern, um sicherzustellen, dass Ihre Netzwerkbandbreite nicht von einer einzelnen Anwendung aufgebraucht wird.

Was ist Trickle?

Trickle ist ein Netzwerk-Bandbreitenformer-Tool, das es uns ermöglicht, die Upload- und Download-Geschwindigkeiten von Anwendungen zu verwalten, um zu verhindern, dass eine von ihnen die gesamte (oder die meisten) verfügbaren Bandbreite beansprucht.

In wenigen Worten ermöglicht Trickle das Steuern des Netzwerkverkehrs pro Anwendung, im Gegensatz zum Benutzersteuerung, was das klassische Beispiel für Bandbreitenformung in einer Client-Server-Umgebung ist und wahrscheinlich die Konfiguration ist, mit der wir vertrauter sind.

Wie funktioniert Trickle?

Darüber hinaus kann ein Trickle uns dabei helfen, Prioritäten pro Anwendung festzulegen, sodass, wenn globale Limits für das gesamte System festgelegt wurden, Anwendungen mit Priorität automatisch mehr Bandbreite erhalten.

Um diese Aufgabe zu erfüllen, setzt Trickle Verkehrslimits für die Weise, wie Daten über TCP-Verbindungen an und von Sockets gesendet und empfangen werden. Wir müssen beachten, dass Trickle die Datentransferraten nicht ändert und das Verhalten des geformten Prozesses zu einem gegebenen Zeitpunkt in keiner Weise modifiziert.

Was kann Trickle nicht tun?

Die einzige Einschränkung besteht darin, dass Trickle nicht mit statisch verknüpften Anwendungen oder Binärdateien funktioniert, die die SUID– oder SGID-Bits gesetzt haben, da es dynamische Verknüpfung und Laden verwendet, um sich zwischen dem geformten Prozess und dem zugehörigen Netzwerksocket zu platzieren. Trickle agiert dann als Proxy zwischen diesen beiden Softwarekomponenten.

Da trickle keine Superuser-Berechtigungen zum Ausführen erfordert, können Benutzer ihre eigenen Datenverkehrsbeschränkungen festlegen. Da dies möglicherweise nicht wünschenswert ist, werden wir untersuchen, wie Gesamtlimits festgelegt werden können, die von Systembenutzern nicht überschritten werden können. Mit anderen Worten, Benutzer können weiterhin ihre Datenverkehrsraten verwalten, aber immer innerhalb der vom Systemadministrator festgelegten Grenzen.

Testumgebung

In diesem Artikel werden wir erklären, wie Sie die Netzwerkbandbreite, die von Anwendungen auf einem Linux-Server verwendet wird, mit einem Trickle begrenzen können.

Um den erforderlichen Datenverkehr zu generieren, verwenden wir ncftpput und ncftpget (beide Tools sind durch die Installation von ncftp verfügbar) auf dem Client (CentOS-Server – dev1: 192.168.0.17) und vsftpd auf dem Server (Debian – dev2: 192.168.0.15) zu Demonstrationszwecken.

Dieselben Anweisungen funktionieren auch auf RHEL-basierten und Debian-basierten Distributionen wie Ubuntu und Linux Mint.

So installieren Sie ncftp und vsftpd in Linux

1. Für RedHat-basierte Distributionen müssen Sie das EPEL-Repository aktivieren, das ein Repository hochwertiger freier und quelloffener Software ist, das vom Fedora-Projekt gepflegt wird.

Installieren Sie EPEL unter RHEL 9:

sudo subscription-manager repos --enable codeready-builder-for-rhel-9-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm

Installieren Sie EPEL unter CentOS 9, AlmaLinux 9, Rocky Linux 9:

sudo dnf config-manager --set-enabled crb
sudo dnf install epel-release

Installieren Sie EPEL unter RHEL 8:

sudo subscription-manager repos --enable codeready-builder-for-rhel-8-$(arch)-rpms
sudo dnf install https://dl.fedoraproject.org/pub/epel/epel-release-latest-8.noarch.rpm

Installieren Sie EPEL unter CentOS 8, AlmaLinux 8, Rocky Linux 8:

sudo dnf config-manager --set-enabled powertools
sudo dnf install epel-release

2. Installieren Sie anschließend ncftp wie folgt.

sudo dnf install ncftp         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install ncftp         [On Debian, Ubuntu and Mint]

3. Richten Sie einen FTP-Server in einem separaten Server ein. Bitte beachten Sie, dass obwohl FTP grundsätzlich unsicher ist, es dennoch weit verbreitet ist, wenn Sicherheit beim Hochladen oder Herunterladen von Dateien nicht erforderlich ist.

Wir verwenden es in diesem Artikel, um die Vorteile von Trickle zu veranschaulichen und weil es die Übertragungsraten in stdout auf dem Client zeigt, und wir werden die Diskussion darüber, ob es verwendet werden sollte oder nicht, auf einen anderen Zeitpunkt verschieben.

sudo dnf install vsftpd         [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]
sudo apt install vsftpd         [On Debian, Ubuntu and Mint]

Jetzt bearbeiten Sie die Datei /etc/vsftpd/vsftpd.conf auf dem FTP-Server wie folgt:

$ sudo nano /etc/vsftpd/vsftpd.conf
OR
$ sudo nano /etc/vsftpd.conf

Führen Sie die folgenden Änderungen durch:

anonymous_enable=NO
local_enable=YES
chroot_local_user=YES
allow_writeable_chroot=YES

Stellen Sie anschließend sicher, dass Sie vsftpd für Ihre aktuelle Sitzung starten und es für automatischen Start bei zukünftigen Neustarts aktivieren:

sudo systemctl start vsftpd
sudo systemctl enable vsftpd
sudo systemctl status vsftpd

4. Wenn Sie sich entscheiden, den FTP-Server in einem CentOS/RHEL-Droplet mit SSH-Schlüsseln für den Remote-Zugriff einzurichten, benötigen Sie ein passwortgeschütztes Benutzerkonto mit den entsprechenden Verzeichnis- und Dateiberechtigungen zum Hochladen und Herunterladen des gewünschten Inhalts AUSSERHALB des Home-Verzeichnisses von root.

Sie können dann zu Ihrem Home-Verzeichnis navigieren, indem Sie die folgende URL in Ihren Browser eingeben. Ein Anmeldefenster wird erscheinen und Sie zur Eingabe eines gültigen Benutzerkontos und Passworts auf dem FTP-Server auffordern.

ftp://192.168.0.15

Wenn die Authentifizierung erfolgreich ist, sehen Sie den Inhalt Ihres Home-Verzeichnisses. Später in diesem Tutorial können Sie diese Seite aktualisieren, um die Dateien anzuzeigen, die während früherer Schritte hochgeladen wurden.

FTP Directory Tree

So installieren Sie Trickle in Linux

Installieren Sie nun Trickle über yum oder apt.

Um eine erfolgreiche Installation sicherzustellen, wird empfohlen, sicherzustellen, dass die derzeit installierten Pakete auf dem neuesten Stand sind (mit yum update), bevor Sie das Tool selbst installieren.

sudo yum -y update && sudo yum  install trickle  [On RedHat based systems]
sudo apt -y update && sudo apt install trickle 	 [On Debian based systems]

Überprüfen Sie, ob Trickle mit dem gewünschten Binärprogramm funktioniert. Wie wir bereits erklärt haben, funktioniert Trickle nur mit Binärdateien, die dynamische oder gemeinsam genutzte Bibliotheken verwenden.Um zu überprüfen, ob wir dieses Tool mit einer bestimmten Anwendung verwenden können, können wir das bekannte Hilfsprogramm ldd verwenden, wobei ldd für die Auflistung dynamischer Abhängigkeiten steht.

Um zu überprüfen, ob wir dieses Tool mit einer bestimmten Anwendung verwenden können, können wir das bekannte ldd Werkzeug verwenden, wobei ldd für Liste dynamischer Abhängigkeiten steht.

Insbesondere werden wir nach dem Vorhandensein von glibc (der GNU C-Bibliothek) in der Liste der dynamischen Abhängigkeiten eines gegebenen Programms suchen, da es genau diese Bibliothek ist, die die Systemaufrufe definiert, die an der Kommunikation über Sockets beteiligt sind.

Führen Sie den folgenden Befehl gegen ein gegebenes Binär aus, um zu sehen, ob Trickle verwendet werden kann, um dessen Bandbreite zu formen:

sudo ldd $(which [binary]) | grep libc.so

Zum Beispiel,

sudo ldd $(which ncftp) | grep libc.so

dessen Ausgabe ist:

sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)

Der zwischen Klammern in der Ausgabe stehende String kann von System zu System und sogar zwischen nachfolgenden Ausführungen desselben Befehls wechseln, da er die Lastadresse der Bibliothek im physischen Speicher darstellt.

Wenn der obige Befehl keine Ergebnisse zurückgibt, bedeutet dies, dass das Binär, gegen das er ausgeführt wurde, libc nicht verwendet, und somit kann Trickle in diesem Fall nicht als Bandbreitenformungsprogramm verwendet werden.

Erfahren Sie, wie Sie Trickle in Linux verwenden

Die grundlegendste Verwendung von Trickle ist im Standalone-Modus. Bei dieser Vorgehensweise wird Trickle verwendet, um die Download- und Upload-Geschwindigkeiten einer gegebenen Anwendung explizit festzulegen. Wie wir bereits erklärt haben, werden wir zur Kürze dasselbe Anwendung für Download- und Upload-Tests verwenden.

Trickle im Standalone-Modus ausführen.

Wir werden die Download- und Upload-Geschwindigkeiten mit und ohne den Einsatz von trickle vergleichen. Das -d -Option gibt die Download-Geschwindigkeit in KB/s an, während das -u -Flag trickle anweist, die Upload-Geschwindigkeit in derselben Einheit zu begrenzen. Darüber hinaus verwenden wir das -s -Flag, das angibt, dass trickle im Standalone-Modus ausgeführt werden soll.

Die grundlegende Syntax zum Ausführen von trickle im Standalone-Modus lautet wie folgt:

sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]

Um die folgenden Beispiele selbst durchzuführen, stellen Sie bitte sicher, dass trickle und ncftp auf dem Client-Rechner (192.168.0.17 in meinem Fall) installiert sind.

Beispiel 1: Hochladen einer 2,8 MB großen Datei mit und ohne Trickle

Wir verwenden die kostenlose verteilbare Linux Fundamentals PDF-Datei (verfügbar von hier) für die folgenden Tests.

Sie können diese Datei zunächst mit dem folgenden wget-Befehl in Ihrem aktuellen Arbeitsverzeichnis herunterladen:

wget http://linux-training.be/files/books/LinuxFun.pdf 

Die Syntax zum Hochladen einer Datei auf unseren FTP-Server ohne trickle lautet wie folgt:

sudo ncftpput -u username -p password 192.168.0.15  /remote_directory local-filename 

Dabei ist /remote_directory der Pfad des Upload-Verzeichnisses relativ zum Heimatverzeichnis des Benutzernamens und local-filename ist eine Datei in Ihrem aktuellen Arbeitsverzeichnis.

Genau genommen erhalten wir ohne Trickle eine Spitzen-Upload-Geschwindigkeit von 52,02 MB/s (bitte beachten Sie, dass dies nicht die tatsächliche durchschnittliche Upload-Geschwindigkeit ist, sondern eine augenblickliche Startspitze), und die Datei wird fast sofort hochgeladen:

sudo ncftpput -u username -p password 192.168.0.15  /testdir LinuxFun.pdf 

Ausgabe:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Mit Trickle werden wir die Upload-Übertragungsrate auf 5 KB/s begrenzen. Bevor wir die Datei zum zweiten Mal hochladen, müssen wir sie aus dem Zielverzeichnis löschen.

Andernfalls wird uns ncftp mitteilen, dass die Datei im Zielverzeichnis dieselbe ist, die wir hochladen möchten, und wird die Übertragung nicht durchführen:

rm /absolute/path/to/destination/directory/LinuxFun.pdf 

Dann:

trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf 

Ausgabe:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

Im obigen Beispiel können wir sehen, dass die durchschnittliche Upload-Geschwindigkeit auf etwa 5 KB/s gesunken ist.

Beispiel 2: Herunterladen der gleichen 2,8MB-Datei mit und ohne Trickle

Zunächst müssen Sie sich vergewissern, dass die PDF aus dem ursprünglichen Quellverzeichnis gelöscht wurde:

rm /absolute/path/to/source/directory/LinuxFun.pdf 

Bitte beachten Sie, dass die folgenden Fälle die Remote-Datei in das aktuelle Verzeichnis auf dem Client-Computer herunterladen. Dies wird durch den Punkt (‚.‚) angezeigt, der nach der IP-Adresse des FTP-Servers erscheint.

Ohne Trickle:

ncftpget -u username -p  password 111.111.111.111 . /testdir/LinuxFun.pdf 

Ausgabe:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Mit Trickle, begrenzt auf die Download-Geschwindigkeit von 20 KB/s:

trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf 

Ausgabe:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Trickle im überwachten [unverwalteten] Modus ausführen

Trickle kann auch im unverwalteten Modus ausgeführt werden, indem eine Reihe von Parametern in /etc/trickled.conf definiert werden. Diese Datei legt fest, wie trickled (der Daemon) sich verhält und Trickle verwaltet.

Zusätzlich, wenn wir globale Einstellungen festlegen möchten, die von allen Anwendungen insgesamt verwendet werden sollen, müssen wir den „trickled“ Befehl verwenden. Dieser Befehl startet den Daemon und ermöglicht es uns, Download- und Upload-Grenzen festzulegen, die von allen Anwendungen geteilt werden, die durch Trickle ausgeführt werden, ohne dass wir jedes Mal Grenzen angeben müssen.

Zum Beispiel, Ausführen:

trickled -d 50 -u 10

Dies wird bewirken, dass die Download- und Upload-Geschwindigkeiten jeder Anwendung, die durch Trickle ausgeführt wird, auf 30 KB/s und 10 KB/s begrenzt sind, jeweils.

Bitte beachten Sie, dass Sie jederzeit überprüfen können, ob Trickle ausgeführt wird und mit welchen Argumenten:

ps -ef | grep trickled | grep -v grep

Ausgabe:

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10

Beispiel 3: Hochladen einer 19MB MP4-Datei auf einen FTP-Server unter Verwendung von Trickle

In diesem Beispiel verwenden wir das kostenfrei verteilbare „He is the gift“ Video, das von diesem Link heruntergeladen werden kann.

Wir werden diese Datei zunächst in Ihrem aktuellen Arbeitsverzeichnis mit dem folgenden Befehl herunterladen:

wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Zunächst starten wir den Trickle-Daemon mit dem oben aufgeführten Befehl:

trickled -d 30 -u 10

Ohne Trickle:

ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

Ausgabe:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   36.31 MB/s

Mit Trickle:

trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4 

Ausgabe:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB	9.51 kB/s

Wie wir in der obigen Ausgabe sehen können, fiel die Upload-Übertragungsrate auf ~10 KB/s.

Beispiel 4: Herunterladen des gleichen Videos mit Trickle

Wie in Beispiel 2 wird die Datei in das aktuelle Arbeitsverzeichnis heruntergeladen.

Ohne Trickle:

ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Ausgabe:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB  108.34 MB/s

Mit Trickle:

trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4 

Ausgabe:

2014-00-1460-he-is-the-gift-360p-eng.mp4:           	18.53 MB   29.28 kB/s

Das ist in Übereinstimmung mit der zuvor festgelegten Download-Begrenzung (30 KB/s).

Hinweis: Sobald der Daemon gestartet wurde, ist es nicht mehr erforderlich, individuelle Grenzen für jedes Programm festzulegen, das Trickle verwendet.

Wie bereits erwähnt, kann man die Bandbreitenbegrenzung von Trickle weiter anpassen, indem man trickled.conf verwendet. Ein typischer Abschnitt in dieser Datei besteht aus dem Folgenden:

[service]
Priority = <value>
Time-Smoothing = <value>
Length-Smoothing = <value>

Wo,

  • [service] den Namen des Programms angibt, dessen Bandbreitenverbrauch wir begrenzen möchten.
  • Priorität ermöglicht es uns, ein Dienst höher zu priorisieren als ein anderer, wodurch ein einzelnes Programm nicht die gesamte Bandbreite aushungern kann, die der Daemon verwaltet. Je niedriger die Zahl, desto mehr Bandbreite wird [service] zugewiesen.
  • Zeit-Glättung [in Sekunden]: definiert, in welchen Zeitintervallen trickled versuchen wird, dem Programm Daten zu übertragen und/oder zu empfangen. Kleinere Werte (etwas zwischen dem Bereich von 0,1 – 1 s) sind ideal für interaktive Anwendungen und führen zu einer kontinuierlicheren (glatteren) Sitzung, während etwas größere Werte (1 – 10 s) besser für Anwendungen sind, die eine Massenübertragung benötigen. Wenn kein Wert angegeben wird, wird der Standardwert (5 s) verwendet.
  • Längen-Glättung [in KB]: Die Idee ist die gleiche wie bei der Zeit-Glättung, basiert jedoch auf die Länge einer E/A-Operation. Wenn kein Wert angegeben ist, wird der Standardwert (10 KB) verwendet.

Die Änderung der Glättungswerte wird in die von [service] angegebene Anwendung übersetzt, indem Übertragungsraten innerhalb eines Intervalls anstelle eines festen Werts verwendet werden. Leider gibt es keine Formel zur Berechnung der unteren und oberen Grenzen dieses Intervalls, da sie hauptsächlich von jedem spezifischen Szenario abhängen.

Folgendes ist eine trickled.conf Beispieldatei auf dem CentOS 7 Client (192.168.0.17):

[ssh]
Priority = 1
Time-Smoothing = 0.1
Length-Smoothing = 2

[ftp]
Priority = 2
Time-Smoothing = 1
Length-Smoothing = 3

Mit dieser Einstellung wird den SSH-Verbindungen bei der Verteilung der Priorität gegenüber FTP-Übertragungen Priorität eingeräumt. Beachten Sie, dass ein interaktiver Prozess wie SSH kleinere Zeit-Glättungswerte verwendet, während ein Dienst, der Massendatenübertragungen (FTP) durchführt, einen größeren Wert verwendet.

Die Glättungswerte sind verantwortlich für die Download- und Upload-Geschwindigkeiten in unserem vorherigen Beispiel, die nicht dem genauen Wert entsprechen, der vom trickled-Daemon angegeben wurde, sondern in einem Intervall in der Nähe davon bewegen.

[ Vielleicht gefällt Ihnen auch: Wie man einen OpenSSH Server sichert und härtet ]

Schlussfolgerung

In diesem Artikel haben wir untersucht, wie man die Bandbreite, die von Anwendungen verwendet wird, mit Trickle auf Fedora-basierten Distributionen und Debian / Derivaten begrenzt. Andere mögliche Anwendungsfälle umfassen, aber nicht beschränkt sind auf:

  • Begrenzen der Downloadgeschwindigkeit über ein Systemwerkzeug wie wget oder einen Torrent-Client, zum Beispiel.
  • Begrenzen der Geschwindigkeit, mit der Ihr System über `yum` (oder `aptitude`, wenn Sie in einem Debian-basierten System sind) aktualisiert werden kann, das Paketverwaltungssystem.
  • Wenn sich Ihre Server hinter einem Proxy oder einer Firewall befinden (oder selbst der Proxy oder die Firewall ist), können Sie Trickle verwenden, um Limits für sowohl die Download- und Upload- als auch die Kommunikationsgeschwindigkeit mit den Clients oder der Außenwelt festzulegen.

Fragen und Kommentare sind herzlich willkommen. Nutzen Sie die unten stehende Form, um sie uns zuzusenden.

Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/