Kuinka rajoittaa sovellusten käyttämää verkon kaistanleveyttä Linux-järjestelmässä Tricklen avulla


Oletko koskaan kohdannut tilanteita, joissa yksi sovellus hallitsi koko verkon kaistanleveyttä? Jos olet joskus ollut tilanteessa, jossa yksi sovellus söi kaiken liikenteesi, arvostat kaistanleveyden tihkumissovelluksen roolia.

Joko olet järjestelmänvalvoja tai vain Linux-käyttäjä, sinun on opittava hallitsemaan sovellusten lataus- ja latausnopeuksia varmistaaksesi, että verkkosi kaistanleveys ei kulu. yhdellä hakemuksella.

Mikä on Trickle?

Trickle on verkon kaistanleveyden muokkaustyökalu, jonka avulla voimme hallita sovellusten lähetys- ja latausnopeuksia, jotta yksittäinen niistä ei pääse kaappaamaan kaikkea (tai suurinta osaa) käytettävissä olevasta kaistanleveydestä.

Lyhyesti sanottuna trickle antaa sinun hallita verkon liikennenopeutta sovelluskohtaisesti, toisin kuin käyttäjäkohtaisessa hallinnassa, joka on klassinen esimerkki kaistanleveyden muokkaamisesta asiakas-palvelinympäristössä, ja se on luultavasti se asetus, jota olemme enemmän. perehtynyt.

Kuinka Trickle toimii?

Lisäksi nippu voi auttaa meitä määrittelemään prioriteetit sovelluskohtaisesti, jotta kun koko järjestelmälle on asetettu yleiset rajat, ensisijaiset sovellukset saavat edelleen automaattisesti lisää kaistanleveyttä.

Tämän tehtävän suorittamiseksi nippu asettaa liikennerajat tavalle, jolla tietoja lähetetään ja vastaanotetaan TCP-yhteyksiä käyttäviin socketeihin. On huomattava, että datansiirtonopeuksia lukuun ottamatta trickle ei muuta millään tavalla sen prosessin käyttäytymistä, jota se kulloinkin muovaa.

Mitä Trickle ei voi tehdä?

Ainoa niin sanotusti rajoitus on se, että trickle ei toimi staattisesti linkitetyissä sovelluksissa tai binääritiedostoissa, joissa on SUID- tai SGID-bitit asetettu, koska se käyttää dynaamista linkitystä ja lataamista itsensä muotoillun prosessin ja siihen liittyvän verkkopistorasian väliin. Trickle toimii sitten välityspalvelimena näiden kahden ohjelmistokomponentin välillä.

Koska trickle ei vaadi pääkäyttäjän oikeuksia toimiakseen, käyttäjät voivat asettaa omat liikennerajoituksensa. Koska tämä ei ehkä ole toivottavaa, tutkimme, kuinka asettaa yleisrajat, joita järjestelmän käyttäjät eivät voi ylittää. Toisin sanoen käyttäjät voivat edelleen hallita liikennemääriään, mutta aina järjestelmänvalvojan asettamissa rajoissa.

Testausympäristö

Tässä artikkelissa selitämme, kuinka voit rajoittaa Linux-palvelimen sovellusten käyttämää verkon kaistanleveyttä.

Luodaksemme tarvittavan liikenteen käytämme ncftpput ja ncftpget (molemmat työkalut ovat saatavilla asentamalla ncftp) asiakassovellukseen (CentOS palvelin – dev1: 192.168.0.17) ja vsftpd palvelimella (Debian – dev2: 192.168.0.15 ) esittelytarkoituksiin. Samat ohjeet toimivat myös RedHat-, Fedora- ja Ubuntu-pohjaisissa järjestelmissä.

ncftp:n ja vsftpd:n asentaminen Linuxiin

1. Ota EPEL-tietovarasto käyttöön RHEL/CentOS 8/7 -käyttöjärjestelmässä. Extra Packages for Enterprise Linux (EPEL) on Fedora-projektin ylläpitämä korkealaatuisten ilmaisten ja avoimen lähdekoodin ohjelmistojen arkisto, joka on 100-prosenttisesti yhteensopiva sen lisäohjelmien, kuten Red Hat Enterprise, kanssa. Linux ja CentOS. Sekä trickle että ncftp ovat saatavilla tästä arkistosta.

2. Asenna ncftp seuraavasti:

yum update && sudo yum install ncftp		[On RedHat based systems]
aptitude update && aptitude install ncftp	[On Debian based systems]	

3. Asenna FTP-palvelin erilliseen palvelimeen. Huomaa, että vaikka FTP on luonnostaan epävarma, sitä käytetään edelleen laajalti tapauksissa, joissa tiedostojen lähettämisen tai lataamisen turvallisuutta ei tarvita.

Käytämme sitä tässä artikkelissa havainnollistaaksemme tihkumisen palkkioita ja koska se näyttää siirtonopeudet asiakkaan stdoutissa, ja jätämme keskustelun siitä, pitäisikö sitä käyttää toiselle päivämäärä ja aika.

yum update && yum install vsftpd 		[On RedHat based systems]
apt update && apt install vsftpd 	[On Debian based systems]

Muokkaa nyt /etc/vsftpd/vsftpd.conf-tiedostoa FTP-palvelimella seuraavasti:

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

Tee seuraavat muutokset:

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

Varmista sen jälkeen, että käynnistät vsftpd:n nykyisessä istunnossasi ja ota se käyttöön automaattista käynnistystä varten tulevissa käynnistyksissä:

systemctl start vsftpd 		[For systemd-based systems]
systemctl enable vsftpd
service vsftpd start 			[For init-based systems]
chkconfig vsftpd on

4. Jos valitsit FTP-palvelimen määrittämisen CentOS/RHEL-pisarasovellukseen, jossa on SSH-avaimia etäkäyttöä varten, tarvitset salasanalla suojatun käyttäjätilin asianmukaisella hakemistolla ja tiedostooikeudet halutun sisällön lataamiseen rootin kotihakemiston ULKOPUOLELLA.

Voit sitten selata kotihakemistoosi kirjoittamalla seuraavan URL-osoitteen selaimeesi. Näkyviin tulee kirjautumisikkuna, jossa sinua pyydetään antamaan kelvollinen käyttäjätili ja salasana FTP-palvelimelle.

ftp://192.168.0.15

Jos todennus onnistuu, näet kotihakemistosi sisällön. Myöhemmin tässä opetusohjelmassa voit päivittää sivun näyttääksesi tiedostot, jotka on ladattu edellisten vaiheiden aikana.

Kuinka asentaa Trickle Linuxiin

Asenna nyt trickle yumin tai apt-sovelluksen kautta.

Onnistuneen asennuksen varmistamiseksi on hyvä käytäntö varmistaa, että tällä hetkellä asennetut paketit ovat ajan tasalla (käyttämällä yum-päivitystä) ennen itse työkalun asentamista.

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

Tarkista, toimiiko trickle halutun binaarin kanssa. Kuten aiemmin selitimme, nokka toimii vain dynaamisia tai jaettuja kirjastoja käyttävien binäärien kanssa. Varmistaaksemme, voimmeko käyttää tätä työkalua tietyn sovelluksen kanssa, voimme käyttää hyvin tunnettua ldd -apuohjelmaa, jossa ldd tarkoittaa luettelon dynaamisia riippuvuuksia.

Tarkemmin sanottuna etsimme glibc:n (GNU C-kirjaston) läsnäoloa minkä tahansa ohjelman dynaamisten riippuvuuksien luettelosta, koska juuri tämä kirjasto määrittää järjestelmäkutsut, jotka liittyvät pisteiden kautta tapahtuvaan viestintään.

Suorita seuraava komento annettua binaaria vastaan nähdäksesi, voidaanko trickleä käyttää sen kaistanleveyden muokkaamiseen:

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

Esimerkiksi,

ldd $(which ncftp) | grep libc.so

jonka tulos on:

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

Hakasulkeissa oleva merkkijono lähdössä voi muuttua järjestelmästä toiseen ja jopa saman komennon myöhempien ajojen välillä, koska se edustaa kirjaston latausosoitetta fyysisessä muistissa.

Jos yllä oleva komento ei palauta tuloksia, se tarkoittaa, että binaari, jota vastaan se ajettiin, ei käytä libc -komentoa, joten trickleä ei voida käyttää kaistanleveyden muokkaajana.

Opi käyttämään Trickleä Linuxissa

Triklen peruskäyttö on standalone-tilassa. Tätä lähestymistapaa käyttämällä trickleä käytetään määrittämään tarkasti tietyn sovelluksen lataus- ja latausnopeudet. Kuten aiemmin selitimme, käytämme lyhyyden vuoksi samaa sovellusta lataus- ja lataustesteihin.

Tricklen juoksu itsenäisessä tilassa

Vertaamme lataus- ja lähetysnopeuksia tricklen kanssa ja ilman. Vaihtoehto -d ilmaisee latausnopeuden kilotavuina sekunnissa, kun taas -u -lippu käskee tihkua rajoittamaan latausnopeutta samalla yksiköllä. Lisäksi käytämme -s-lippua, joka määrittää, että tricklen tulee toimia itsenäisessä tilassa.

Perussyntaksi tricklen suorittamiseksi itsenäisessä tilassa on seuraava:

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

Jotta voit suorittaa seuraavat esimerkit itse, varmista, että trickle ja ncftp on asennettu asiakaskoneeseen (192.168.0.17 tapaus).

Esimerkki 1: 2,8 Mt:n PDF-tiedoston lataaminen nipulla ja ilman.

Käytämme vapaasti levitettävää Linux Fundamentals PDF-tiedostoa (saatavilla täältä) seuraaviin testeihin.

Voit aluksi ladata tämän tiedoston nykyiseen työhakemistoosi seuraavalla komennolla:

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

Syntaksi tiedoston lataamiseksi FTP-palvelimellemme ilman nokkauksia on seuraava:

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

Missä /etähakemisto on lataushakemiston polku suhteessa käyttäjänimen kotiin ja local-filename on tiedosto nykyisessä työhakemistossasi.

Tarkemmin sanottuna saamme ilman tihkumista huippulatausnopeuden 52,02 Mt/s (huomaa, että tämä ei ole todellinen keskimääräinen latausnopeus, vaan välitön aloitushuippu), ja tiedosto ladataan melkein välittömästi:

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

Lähtö:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Tricklellä rajoitamme lähetysnopeuden 5 kt/s. Ennen kuin lataamme tiedoston toisen kerran, meidän on poistettava se kohdehakemistosta; muussa tapauksessa ncftp ilmoittaa meille, että kohdehakemistossa oleva tiedosto on sama, jota yritämme ladata, eikä suorita siirtoa:

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

Sitten:

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

Lähtö:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

Yllä olevassa esimerkissä voimme nähdä, että keskimääräinen lähetysnopeus putosi arvoon ~5 kt/s.

Esimerkki 2: Saman 2,8 Mt:n PDF-tiedoston lataaminen nipulla ja ilman

Muista ensin poistaa PDF alkuperäisestä lähdehakemistosta:

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

Huomaa, että seuraavat tapaukset lataavat etätiedoston asiakaskoneen nykyiseen hakemistoon. Tämä on osoitettu pisteellä ('.'), joka näkyy FTP-palvelimen IP-osoitteen jälkeen.

Ilman valumista:

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

Lähtö:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Latausnopeuden rajoittaminen 20 kt/s:

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

Lähtö:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Tricklen juokseminen valvotussa [unhallinnassa]-tilassa

Trickle voi toimia myös hallitsemattomassa tilassa /etc/trickled.conf-tiedostossa määritettyjen parametrien sarjan mukaisesti. Tämä tiedosto määrittelee kuinka trickled (daemon) käyttäytyy ja hallitsee tricklediä.

Lisäksi, jos haluamme määrittää yleiset asetukset käytettäväksi kaikissa sovelluksissa, meidän on käytettävä trickled-komentoa. Tämä komento suorittaa demonin ja antaa meille mahdollisuuden määrittää lataus- ja lähetysrajat, jotka jaetaan kaikille ohjelmille ilman, että meidän tarvitsee määrittää rajoja joka kerta.

Esimerkiksi juokseminen:

trickled -d 50 -u 10

Aiheuttaa sen, että minkä tahansa sovelluksen latausnopeus rajoitetaan 30 kt/s ja 10 kt/s.

Huomaa, että voit milloin tahansa tarkistaa, onko trickled käynnissä ja millä argumenteilla:

ps -ef | grep trickled | grep -v grep

Lähtö:

root 	16475 	1  0 Dec24 ?    	00:00:04 trickled -d 50 -u 10
Esimerkki 3: 19 Mt:n mp4-tiedoston lataaminen FTP-palvelimellemme nipulla ja ilman.

Tässä esimerkissä käytämme vapaasti levitettävää "He on lahja" -videota, joka on ladattavissa tästä linkistä.

Lataamme tämän tiedoston aluksi nykyiseen työhakemistoosi seuraavalla komennolla:

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

Ensinnäkin käynnistämme trickled daemonin yllä luetellulla komennolla:

trickled -d 30 -u 10

Ilman valumista:

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

Lähtö:

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

Nokkauksen kanssa:

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

Lähtö:

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

Kuten yllä olevasta tulosteesta näkyy, lähetysnopeus putosi arvoon ~10 kt/s.

Esimerkki 4: Saman videon lataaminen nipulla ja ilman

Kuten Esimerkissä 2, lataamme tiedoston nykyiseen työhakemistoon.

Ilman valumista:

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

Lähtö:

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

Nokkauksen kanssa:

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

Lähtö:

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

Joka on aiemmin asetetun latausrajan (30 kt/s) mukainen.

Huomaa: kun demoni on käynnistetty, ei tarvitse asettaa yksittäisiä rajoituksia jokaiselle trickleä käyttävälle sovellukselle.

Kuten aiemmin mainitsimme, tricklen kaistanleveyden muotoilua voidaan edelleen muokata trickled.conf:n kautta. Tämän tiedoston tyypillinen osio koostuu seuraavista:

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

Missä,

  1. [palvelu] osoittaa sen sovelluksen nimen, jonka kaistanleveyden käyttöä aiomme muokata.
  2. Prioriteetti antaa meille mahdollisuuden määrittää palvelulle korkeampi prioriteetti suhteessa toiseen, jolloin yksittäinen sovellus ei voi kaapata kaikkea demonin hallitsemaa kaistanleveyttä. Mitä pienempi numero, sitä enemmän kaistanleveyttä [palvelulle] on määritetty.
  3. Time-Smoothing [sekunneissa]: määrittää, millä aikaväleillä trickled yrittää antaa sovelluksen siirtää ja/tai vastaanottaa tietoja. Pienemmät arvot (jokin välillä 0,1 - 1 s) ovat ihanteellisia interaktiivisille sovelluksille ja johtavat jatkuvaan (tasaiseen) istuntoon, kun taas hieman suuremmat arvot (1 - 10 s) ovat parempia sovelluksille, jotka tarvitsevat joukkosiirtoa. Jos arvoa ei ole määritetty, käytetään oletusarvoa (5 s).
  4. Length-Smoothing [KB]: idea on sama kuin Time-Smoothingissa, mutta perustuu I/O-operaation pituuteen. Jos arvoa ei ole määritetty, käytetään oletusarvoa (10 kt).

Tasoitusarvojen muuttaminen muuttuu [palvelu]:n määrittämäksi sovellukseksi, joka käyttää tietyn aikavälin siirtonopeuksia kiinteän arvon sijaan. Valitettavasti ei ole kaavaa tämän aikavälin ala- ja ylärajan laskemiseksi, koska se riippuu pääasiassa kustakin tapausskenaariosta.

Seuraava on trickled.conf-esimerkkitiedosto CentOS 7 -asiakassovelluksessa (192.168.0.17):

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

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

Tätä asetusta käyttämällä trickled priorisoi SSH-yhteydet FTP-siirtoihin nähden. Huomaa, että interaktiivinen prosessi, kuten SSH, käyttää pienempiä ajan tasoitusarvoja, kun taas joukkotiedonsiirtoja (FTP) suorittava palvelu käyttää suurempaa arvoa.

Tasoitusarvot ovat vastuussa siitä, että edellisessä esimerkissämme lataus- ja latausnopeudet eivät täsmää trickled daemonin määrittämän arvon kanssa, vaan liikkuvat lähellä sitä.

Johtopäätös

Tässä artikkelissa olemme tutkineet kuinka rajoittaa sovellusten käyttämää kaistanleveyttä Fedora-pohjaisissa jakeluissa ja Debian/johdannaisissa. Muita mahdollisia käyttötapauksia ovat, mutta eivät rajoitu niihin:

  • Latausnopeuden rajoittaminen järjestelmäapuohjelman, kuten wget, tai torrent-asiakasohjelman avulla.
  • Rajoitetaan nopeutta, jolla järjestelmäsi voidaan päivittää paketinhallintajärjestelmän "yum" (tai "aptitude", jos olet Debian-pohjaisessa järjestelmässä) kautta.
  • Jos palvelimesi sattuu olemaan välityspalvelimen tai palomuurin takana (tai välityspalvelin tai palomuuri itse), voit asettaa rajoituksia sekä lataus- että lähetysnopeudelle tai kommunikaationopeudelle asiakkaiden tai ulkopuolisten kanssa.

Kysymykset ja kommentit ovat erittäin tervetulleita. Käytä alla olevaa lomaketta lähettääksesi ne meille.