Hai mai incontrato situazioni in cui un’applicazione dominava la larghezza di banda della tua rete? Se ti sei mai trovato in una situazione in cui un’applicazione ha consumato tutto il tuo traffico, allora apprezzerai il ruolo dell’applicazione di modellamento della larghezza di banda a goccia.
Sia che tu sia un amministratore di sistema o semplicemente un utente Linux, devi imparare a controllare le velocità di upload e download delle applicazioni per assicurarti che la larghezza di banda della tua rete non venga consumata da un’unica applicazione.
Cos’è Trickle?
Trickle è uno strumento di modellamento della larghezza di banda di rete che ci consente di gestire le velocità di upload e download delle applicazioni al fine di evitare che una di esse si accaparri tutta (o la maggior parte) della larghezza di banda disponibile.
In poche parole, Trickle ti consente di controllare il traffico di rete a livello di applicazione, a differenza del controllo per utente, che è l’esempio classico di modellazione della larghezza di banda in un ambiente client-server, e probabilmente è la configurazione con cui abbiamo più familiarità.
Come Funziona Trickle?
Inoltre, un Trickle può aiutarci a definire priorità a livello di applicazione in modo che, quando sono stati impostati limiti complessivi per l’intero sistema, le app a priorità più alta ottengano ancora più larghezza di banda automaticamente.
Per realizzare questo compito, Trickle imposta limiti di traffico nel modo in cui i dati vengono inviati e ricevuti da socket che utilizzano connessioni TCP. Dobbiamo notare che oltre ai tassi di trasferimento dei dati, Trickle non modifica in alcun modo il comportamento del processo che sta modellando in un dato momento.
Cosa Trickle Non Può Fare?
L’unica limitazione, per così dire, è che Trickle non funzionerà con applicazioni o binari staticamente collegati o con i bit SUID o SGID impostati poiché utilizza il collegamento e il caricamento dinamico per inserirsi tra il processo modellato e la sua socket di rete associata. Trickle funge quindi da proxy tra questi due componenti software.
Poiché Trickle non richiede privilegi di superutente per essere eseguito, gli utenti possono impostare i propri limiti di traffico. Poiché ciò potrebbe non essere desiderabile, esploreremo come impostare limiti complessivi che gli utenti di sistema non possono superare. In altre parole, gli utenti saranno comunque in grado di gestire i propri tassi di traffico, ma sempre entro i limiti impostati dall’amministratore di sistema.
Ambiente di Test
In questo articolo, spiegheremo come limitare la larghezza di banda di rete utilizzata dalle applicazioni in un server Linux con Trickle.
Per generare il traffico necessario, utilizzeremo ncftpput e ncftpget (entrambi gli strumenti sono disponibili installando ncftp) sul client (CentOS server – dev1: 192.168.0.17), e vsftpd sul server (Debian – dev2: 192.168.0.15) a scopo dimostrativo.
Le stesse istruzioni funzionano anche su distribuzioni basate su RHEL e Debian come Ubuntu e Linux Mint.
Come Installare ncftp e vsftpd in Linux
1. Per le distribuzioni basate su RedHat, è necessario abilitare il repository EPEL, che è un repository di software di alta qualità libero e open source mantenuto dal progetto Fedora.
Installare EPEL su 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
Installare EPEL su CentOS 9, AlmaLinux 9, Rocky Linux 9:
sudo dnf config-manager --set-enabled crb sudo dnf install epel-release
Installare EPEL su 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
Installare EPEL su CentOS 8, AlmaLinux 8, Rocky Linux 8:
sudo dnf config-manager --set-enabled powertools sudo dnf install epel-release
2. Successivamente, installare ncftp come segue.
sudo dnf install ncftp [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install ncftp [On Debian, Ubuntu and Mint]
3. Configurare un server FTP in un server separato. Si noti che sebbene FTP sia intrinsecamente insicuro, è ancora ampiamente utilizzato nei casi in cui la sicurezza nel caricare o scaricare file non è necessaria.
Lo stiamo utilizzando in questo articolo per illustrare i vantaggi di trickle e perché mostra i tassi di trasferimento in stdout sul client, e lasceremo la discussione su se dovrebbe o non dovrebbe essere utilizzato per un’altra data e ora.
sudo dnf install vsftpd [On RHEL/CentOS/Fedora and Rocky/AlmaLinux] sudo apt install vsftpd [On Debian, Ubuntu and Mint]
Ora, modificare il file /etc/vsftpd/vsftpd.conf sul server FTP come segue:
$ sudo nano /etc/vsftpd/vsftpd.conf OR $ sudo nano /etc/vsftpd.conf
Effettuare le seguenti modifiche:
anonymous_enable=NO local_enable=YES chroot_local_user=YES allow_writeable_chroot=YES
Dopo di che, assicurarsi di avviare vsftpd per la sessione corrente e abilitarlo per l’avvio automatico nei futuri avvii:
sudo systemctl start vsftpd sudo systemctl enable vsftpd sudo systemctl status vsftpd
4. Se scegli di configurare il server FTP in un droplet CentOS/RHEL con chiavi SSH per l’accesso remoto, avrai bisogno di un account utente protetto da password con le appropriate autorizzazioni di directory e file per caricare e scaricare i contenuti desiderati FUORI dalla directory home di root.
Puoi quindi navigare nella tua directory home inserendo l’URL seguente nel tuo browser. Verrà visualizzata una finestra di accesso che ti chiederà un account utente e una password validi sul server FTP.
ftp://192.168.0.15
Se l’autenticazione riesce, vedrai i contenuti della tua directory home. Più avanti in questo tutorial, sarai in grado di aggiornare quella pagina per visualizzare i file che sono stati caricati durante i passaggi precedenti.

Come Installare Trickle in Linux
Ora installa trickle tramite yum o apt.
Per garantire un’installazione riuscita, è considerata buona prassi assicurarsi che i pacchetti attualmente installati siano aggiornati (usando yum update) prima di installare lo strumento stesso.
sudo yum -y update && sudo yum install trickle [On RedHat based systems] sudo apt -y update && sudo apt install trickle [On Debian based systems]
Verifica se trickle funzionerà con il binario desiderato. Come abbiamo spiegato in precedenza, trickle funzionerà solo con binari che utilizzano librerie dinamiche o condivise.
Per verificare se possiamo utilizzare uno strumento con un’applicazione specifica, possiamo utilizzare il noto utilità ldd, dove ldd sta per elenca dipendenze dinamiche.
In particolare, cercheremo la presenza di glibc (la libreria C GNU) nell’elenco delle dipendenze dinamiche di un determinato programma perché è proprio quella libreria che definisce le chiamate di sistema coinvolte nella comunicazione tramite socket.
Esegui il seguente comando contro un determinato binario per vedere se trickle può essere utilizzato per modellare la sua larghezza di banda:
sudo ldd $(which [binary]) | grep libc.so
Ad esempio,
sudo ldd $(which ncftp) | grep libc.so
il cui output è:
sudo libc.so.6 => /lib64/libc.so.6 (0x00007efff2e6c000)
La stringa tra parentesi nell’output può cambiare da sistema a sistema e persino tra esecuzioni successive dello stesso comando poiché rappresenta l’indirizzo di caricamento della libreria in memoria fisica.
Se il comando di cui sopra non restituisce risultati, significa che il binario contro cui è stato eseguito non utilizza libc, e quindi trickle non può essere utilizzato come modellatore di larghezza di banda in quel caso.
Impara come utilizzare Trickle in Linux
L’uso più basilare di trickle è in modalità stand-alone. Utilizzando questo approccio, trickle viene utilizzato per definire esplicitamente le velocità di download e upload di un’applicazione specifica. Come abbiamo spiegato in precedenza, per brevità, utilizzeremo lo stesso programma per i test di download e upload.
Esecuzione di Trickle in modalità stand-alone
Confronteremo le velocità di download e upload con e senza l’uso di trickle. L’opzione -d
indica la velocità di download in KB/s, mentre la bandiera -u
dice a trickle di limitare la velocità di upload nella stessa unità. Inoltre, useremo la bandiera -s
, che specifica che trickle dovrebbe funzionare in modalità autonoma.
La sintassi di base per eseguire trickle in modalità autonoma è la seguente:
sudo trickle -s -d [download rate in KB/s] -u [upload rate in KB/s]
Per eseguire gli esempi seguenti da soli, assicurati di avere trickle e ncftp installati sul client (192.168.0.17 nel mio caso).
Esempio 1: Caricamento di un file da 2,8MB con e senza Trickle
Stiamo utilizzando il file PDF Linux Fundamentals gratuitamente distribuito (disponibile da qui) per i test seguenti.
Inizialmente, puoi scaricare questo file nella tua directory di lavoro corrente con il seguente comando wget:
wget http://linux-training.be/files/books/LinuxFun.pdf
La sintassi per caricare un file sul nostro server FTP senza trickle è la seguente:
sudo ncftpput -u username -p password 192.168.0.15 /remote_directory local-filename
Dove /remote_directory è il percorso della directory di upload relativo alla home dell’utente, e local-filename è un file nella tua directory di lavoro corrente.
In particolare, senza Trickle, otteniamo una velocità di upload massima di 52,02 MB/s (si noti che questa non è la velocità di upload media reale, ma un picco istantaneo iniziale), e il file viene caricato quasi istantaneamente:
sudo ncftpput -u username -p password 192.168.0.15 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 52.02 MB/s
Con Trickle, limiteremo la velocità di trasferimento di upload a 5 KB/s. Prima di caricare il file per la seconda volta, dobbiamo eliminarlo dal directory di destinazione.
Altrimenti, ncftp ci informerà che il file nel directory di destinazione è lo stesso che stiamo cercando di caricare e non eseguirà il trasferimento:
rm /absolute/path/to/destination/directory/LinuxFun.pdf
Quindi:
trickle -s -u 5 ncftpput -u username -p password 111.111.111.111 /testdir LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 4.94 kB/s
Nell’esempio sopra, possiamo vedere che la velocità di upload media è scesa a circa 5 KB/s.
Esempio 2: Scaricamento dello stesso file da 2,8 MB con e senza Trickle
Prima, ricordate di eliminare il PDF dal directory di origine:
rm /absolute/path/to/source/directory/LinuxFun.pdf
Si noti che i casi seguenti scaricheranno il file remoto nel directory corrente nella macchina client. Questo fatto è indicato dalla periodo (‘.‘) che appare dopo l’indirizzo IP del server FTP.
Senza Trickle:
ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 260.53 MB/s
Con Trickle, limitando la velocità di download a 20 KB/s:
trickle -s -d 30 ncftpget -u username -p password 111.111.111.111 . /testdir/LinuxFun.pdf
Output:
LinuxFun.pdf: 2.79 MB 17.76 kB/s
Esecuzione di Trickle in modalità non supervisionata [non gestita]
Trickle può anche funzionare in modalità non gestita, seguendo una serie di parametri definiti in /etc/trickled.conf. Questo file definisce come si comporta e gestisce Trickle.
Inoltre, se vogliamo impostare impostazioni globali da utilizzare, in generale, da tutte le applicazioni, dobbiamo utilizzare il comando trickled. Questo comando esegue il demone e ci consente di definire i limiti di download e upload che saranno condivisi da tutte le applicazioni eseguite tramite trickle senza che dobbiamo specificare i limiti ogni volta.
Ad esempio, eseguendo:
trickled -d 50 -u 10
Ciò limiterà le velocità di download e upload di qualsiasi applicazione eseguita tramite trickle a 30 KB/s e 10 KB/s, rispettivamente.
Si noti che è possibile verificare in qualsiasi momento se trickled è in esecuzione e con quali argomenti:
ps -ef | grep trickled | grep -v grep
Output:
root 16475 1 0 Dec24 ? 00:00:04 trickled -d 50 -u 10
Esempio 3: Caricamento di un file MP4 da 19MB su Server FTP utilizzando Trickle
In questo esempio utilizzeremo il video “He is the gift” disponibile gratuitamente per il download da questo link.
Inizialmente scaricheremo questo file nella directory di lavoro corrente con il seguente comando:
wget http://media2.ldscdn.org/assets/missionary/our-people-2014/2014-00-1460-he-is-the-gift-360p-eng.mp4
Per prima cosa, avviaremo il demone trickled con il comando elencato in precedenza:
trickled -d 30 -u 10
Senza trickle:
ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Output:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 36.31 MB/s
Con trickle:
trickle ncftpput -u username -p password 192.168.0.15 /testdir 2014-00-1460-he-is-the-gift-360p-eng.mp4
Output:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 9.51 kB/s
Come possiamo vedere nell’output sopra, la velocità di trasferimento dell’upload è scesa a ~10 KB/s.
Esempio 4: Scaricamento dello stesso video con Trickle
Come nell’Esempio 2, scarriveremo il file nella directory di lavoro corrente.
Senza trickle:
ncftpget -u username -p password 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Output:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 108.34 MB/s
Con trickle:
trickle ncftpget -u username -p password 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.mp4
Output:
2014-00-1460-he-is-the-gift-360p-eng.mp4: 18.53 MB 29.28 kB/s
Il che è in linea con il limite di download impostato in precedenza (30 KB/s).
Nota: Una volta avviato il demone, non è necessario impostare limiti individuali per ogni applicazione che utilizza trickle.
Come abbiamo accennato in precedenza, è possibile personalizzare ulteriormente la formazione della larghezza di banda di trickle attraverso trickled.conf. Una sezione tipica in questo file consiste nel seguente:
[service] Priority = <value> Time-Smoothing = <value> Length-Smoothing = <value>
Dove,
- [service] indica il nome dell’applicazione la cui utilizzo della larghezza di banda intendiamo modellare.
- Priorità ci consente di specificare un servizio con una priorità più alta rispetto a un altro, evitando così che un’unica applicazione consumi tutta la larghezza di banda che il demone sta gestendo. Minore è il numero, maggiore è la larghezza di banda assegnata a [service].
- Time-Smoothing [in secondi]: definisce con quale intervallo di tempo trickled cercherà di consentire all’applicazione di trasferire e/o ricevere dati. Valori più piccoli (tra 0,1 e 1 s) sono ideali per applicazioni interattive e daranno luogo a una sessione più continua (liscia), mentre valori leggermente più grandi (1-10 s) sono migliori per applicazioni che necessitano di trasferimento di massa. Se non viene specificato alcun valore, viene utilizzato il valore predefinito (5 s).
- Lunghezza-Smoothing [in KB]: l’idea è la stessa di Time-Smoothing, ma basata sulla lunghezza di un’operazione I/O. Se non viene specificato alcun valore, viene utilizzato il valore predefinito (10 KB).
La modifica dei valori di smoothing si tradurrà nell’utilizzo, da parte dell’applicazione specificata da [service], di velocità di trasferimento all’interno di un intervallo anziché di un valore fisso. Sfortunatamente, non esiste una formula per calcolare i limiti inferiore e superiore di questo intervallo, poiché dipende principalmente da ogni scenario specifico.
Il seguente è un file di esempio trickled.conf nel client CentOS 7 (192.168.0.17):
[ssh] Priority = 1 Time-Smoothing = 0.1 Length-Smoothing = 2 [ftp] Priority = 2 Time-Smoothing = 1 Length-Smoothing = 3
Utilizzando questa configurazione, trickled priorizzerà le connessioni SSH rispetto ai trasferimenti FTP. Si noti che un processo interattivo, come SSH, utilizza valori di smoothing temporale minori, mentre un servizio che esegue trasferimenti di dati in blocco (FTP) utilizza un valore maggiore.
I valori di smoothing sono responsabili delle velocità di download e upload nel nostro esempio precedente non corrispondenti al valore esatto specificato dal demone trickled ma variando in un intervallo vicino ad esso.
[ Potresti anche piacere: Come Proteggere e Consolidare il Server OpenSSH ]
Conclusione
In questo articolo, abbiamo esplorato come limitare la larghezza di banda utilizzata da applicazioni utilizzando trickle su distribuzioni basate su Fedora e Debian / derivate. Altri possibili casi d’uso includono, ma non si limitano a:
- Limitare la velocità di download attraverso un’utility del sistema come wget, o un client torrent, ad esempio.
- Limitare la velocità con cui il tuo sistema può essere aggiornato tramite `yum` (o `aptitude`, se sei in un sistema basato su Debian), il sistema di gestione dei pacchetti.
- Se il tuo server si trova dietro un proxy o un firewall (o è il proxy o il firewall stesso), puoi utilizzare trickle per impostare limiti sia sulla velocità di download e upload che sulla velocità di comunicazione con i client o l’esterno.
Le domande e i commenti sono ben accetti. Sentiti libero di utilizzare il modulo sottostante per inviarli a noi.
Source:
https://www.tecmint.com/limit-linux-network-bandwidth-usage-with-trickle/