Kuinka rajoittaa verkon kaistanleveyden käyttöä Linuxissa Tricklen avulla


Oletko koskaan kohdannut tilanteita, joissa yksi sovellus hallitsi koko verkon kaistanleveyttä? Jos olet joskus ollut tilanteessa, jossa yksi sovellus söi kaiken liikenteen, sinun tulee arvostaa juoksevan kaistanleveyden muotoilijan sovelluksen roolia.

Joko olet järjestelmänvalvoja tai vain Linux-käyttäjä, sinun on opittava hallitsemaan sovellusten lähetys- ja latausnopeuksia varmistaaksesi, että yksittäinen sovellus ei polta verkon kaistanleveyttä.

[Saatat pitää myös: 16 hyödyllistä kaistanleveyden seurantatyökalua verkon käytön analysointiin Linuxissa]

Mikä on Trickle?

Trickle on verkon kaistanleveyden muotoilutyökalu, jonka avulla voimme hallita sovellusten lähetys- ja latausnopeuksia, jotta kukaan niistä ei tartu kaikkeen (tai suurimpaan osaan) käytettävissä olevasta kaistanleveydestä.

Muutamalla sanalla, trickle antaa sinun hallita verkkoliikennenopeutta sovelluskohtaisesti, toisin kuin käyttäjäkohtainen hallinta, joka on klassinen esimerkki kaistanleveyden muokkaamisesta asiakas-palvelinympäristössä, ja se on luultavasti asetus, jota olemme enemmän perehtynyt.

Kuinka Trickle toimii?

Lisäksi virtaus voi auttaa meitä määrittämään prioriteetit sovelluskohtaisesti, jotta kun koko järjestelmälle on asetettu yleiset rajoitukset, prioriteettisovellukset saavat yhä enemmän kaistanleveyttä.

Tämän tehtävän suorittamiseksi juoksu asettaa liikennerajat tielle, jolla data lähetetään ja vastaanotetaan pistorasioista TCP-yhteyksiä käyttäen. Meidän on huomattava, että muut kuin tiedonsiirtonopeudet, virtaus ei muuta millään tavalla prosessin käyttäytymistä, jota se muokkaa milloin tahansa.

Mitä Trickle ei voi tehdä?

Ainoa niin sanottu rajoitus on, että trickle ei toimi staattisesti linkitettyjen sovellusten tai binääritiedostojen kanssa, joissa SUID- tai SGID-bitit on asetettu, koska se käyttää dynaamista linkitystä ja latausta asettamaan itsensä muotoillun prosessin ja siihen liittyvän verkkopistokkeen välille. 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 liikennerajansa. Koska tämä ei välttämättä ole toivottavaa, tutkitaan, kuinka asetetaan kokonaisrajat, joita järjestelmän käyttäjät eivät voi ylittää. Toisin sanoen käyttäjät voivat silti hallita liikennemääriä, mutta aina järjestelmänvalvojan asettamissa rajoissa.

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

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

Ncftp: n ja vsftpd: n asentaminen Linuxiin

1. Ota käyttöön EPEL-arkisto RHEL/CentOS 8/7: lle. Extra Packages for Enterprise Linux (EPEL) on Fedora-projektin ylläpitämä korkealaatuisten ilmaisten ja avoimen lähdekoodin ohjelmistovarasto, joka on 100% yhteensopiva sen spinoffien, kuten Red Hat Enterprise Linuxin ja CentOSin, kanssa. 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. Määritä FTP-palvelin erilliseen palvelimeen. Huomaa, että vaikka FTP on luonnostaan epävarma, sitä käytetään edelleen laajalti tapauksissa, joissa tiedostojen lataamisen tai lataamisen suojausta ei tarvita.

Käytämme sitä tässä artikkelissa havainnollistamaan tippumisen paljouksia ja koska se näyttää siirtonopeudet asiakkaan vakiomuodossa, ja jätämme keskustelun siitä, pitäisikö sitä käyttää toisena päivämääränä ja kellonaikana.

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

Muokkaa nyt FTP-palvelimen /etc/vsftpd/vsftpd.conf -tiedostoa 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

Sen jälkeen varmista, että aloitat vsftpd nykyiselle istunnollesi ja otat sen käyttöön automaattisen käynnistyksen yhteydessä tulevissa kengissä:

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

4. Jos päätit asentaa FTP-palvelimen CentOS/RHEL-pisaraan SSH-avaimilla etäkäyttöä varten, tarvitset salasanalla suojatun käyttäjätilin, jolla on asianmukaiset hakemisto- ja tiedostoluvat halutun sisällön lähettämiseen ja lataamiseen OUTSIDE-juuren kotona hakemistoon.

Voit sitten selata kotihakemistoon 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ää kyseisen sivun näyttämään edellisten vaiheiden aikana ladatut tiedostot.

Kuinka asentaa Trickle Linuxiin

Asenna nyt trickle yumin tai aptin kautta.

Onnistuneen asennuksen varmistamiseksi pidetään hyvänä käytäntönä varmistaa, että nykyiset asennetut paketit ovat ajan tasalla (yum-päivityksen avulla) ennen 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 binäärin kanssa. Kuten aiemmin selitimme, virtaus toimii vain binääritiedostojen kanssa, jotka käyttävät dynaamisia tai jaettuja kirjastoja. Sen varmistamiseksi, voimmeko käyttää tätä työkalua tietyn sovelluksen kanssa, voimme käyttää tunnettua ldd-apuohjelmaa, jossa ldd tarkoittaa luettelon dynaamisia riippuvuuksia.

Etsimme erityisesti glibc: n (GNU C-kirjasto) läsnäoloa minkä tahansa ohjelman dynaamisten riippuvuuksien luettelosta, koska juuri se kirjasto määrittelee systeemien kautta tapahtuvaan viestintään liittyvät järjestelmäkutsut.

Suorita seuraava komento tiettyä binääriä 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 tuotos on:

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

Lähdön sulkeiden välinen merkkijono voi muuttua järjestelmästä toiseen ja jopa saman komennon myöhempien suoritusten 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: tä, joten trickleä ei voida käyttää kaistanleveyden muotoilijana siinä tapauksessa.

Opi käyttämään Tricklea Linuxissa

Tiputuksen tavallisin käyttö on itsenäisessä tilassa. Tätä lähestymistapaa käytettäessä trickleä käytetään nimenomaisesti määrittämään tietyn sovelluksen lataus- ja latausnopeudet. Kuten aiemmin selitimme, käytämme lyhyyden vuoksi samaa sovellusta lataus- ja lataustesteihin.

Vertaamme lataus- ja latausnopeuksia tricklen kanssa ja ilman sitä. -d -vaihtoehto osoittaa latausnopeuden kilotavuina/s, kun taas -u -lippu käskee tippua rajoittamaan latausnopeutta samalla yksiköllä. Lisäksi käytämme lippua -s , joka määrittelee, että virtauksen tulisi toimia erillisessä tilassa.

Perussyntaksi, joka suoritetaan tiputtamiseksi itsenäisessä tilassa, on seuraava:

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

Jotta voit suorittaa seuraavat esimerkit yksin, varmista, että asiakas- koneeseen on asennettu trickle ja ncftp (minun tapauksessani 192.168.0.17).

Käytämme vapaasti jaettavaa Linux Fundamentals PDF-tiedostoa (saatavana täältä) seuraaviin testeihin.

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

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

Syntaksi tiedoston lataamiseksi FTP-palvelimellemme ilman virtausta on seuraava:

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

Missä/remote_directory on lataushakemiston polku suhteessa käyttäjänimen kotiin, ja local-tiedostonimi on tiedosto nykyisessä työhakemistossasi.

Tarkemmin sanottuna, ilman virtausta, huippulatausnopeus on 52,02 MB/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 

Tuotos:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Tricklen avulla rajoitamme lähetyssiirtonopeutta 5 kt/s. Ennen kuin lataamme tiedoston toisen kerran, meidän on poistettava se kohdehakemistosta. muuten ncftp ilmoittaa meille, että kohdehakemistossa oleva tiedosto on sama, jota yritämme ladata, eikä se 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 

Tuotos:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

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

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ä tosiasia ilmaistaan ajanjaksolla (’.’), Joka näkyy FTP-palvelimen IP-osoitteen jälkeen.

Ilman virtausta:

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

Tuotos:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Rajoituksella, latausnopeuden rajoittaminen 20 kt/s:

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

Tuotos:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Tricklen ajaminen valvotussa tilassa [hallitsematon]

Trickle voi toimia myös hallitsemattomassa tilassa seuraamalla parametrissa /etc/trickled.conf määriteltyjä parametreja. Tämä tiedosto määrittää, kuinka huijaus (daemon) käyttäytyy ja hallitsee virumista.

Lisäksi, jos haluamme asettaa yleiset asetukset kaikkien sovellusten käytettäväksi, meidän on käytettävä trickled-komentoa. Tämä komento ajaa daemonin ja antaa meille mahdollisuuden määritellä lataus- ja latausrajat, jotka jaetaan kaikille trickle-sovelluksille ilman, että meidän tarvitsee määrittää rajoja joka kerta.

Esimerkiksi käynnissä:

# trickled -d 50 -u 10

Aiheuttaa, että minkä tahansa sovelluksen latausnopeus on rajoitettu 30 kt/s ja vastaavasti 10 kt/s.

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

# ps -ef | grep trickled | grep -v grep

Tuotos:

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

Tässä esimerkissä käytämme vapaasti jaettavaa "Hän on lahja" -videota, joka on ladattavissa tältä linkiltä.

Alun perin lataamme tämän tiedoston nykyiseen työhakemistoon seuraavalla komennolla:

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

Ensinnäkin aloitamme huijatun daemonin yllä luetellulla komennolla:

# trickled -d 30 -u 10

Ilman virtausta:

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

Tuotos:

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

Tiputuksella:

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

Tuotos:

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

Kuten voimme nähdä yllä olevasta lähdöstä, latauksen siirtonopeus putosi ~ 10 kt/s.

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

Ilman virtausta:

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

Tuotos:

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

Tiputuksella:

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

Tuotos:

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

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

Huomaa: Kun daemon on käynnistetty, ei tarvitse asettaa yksittäisiä rajoituksia kullekin sovellukselle, joka käyttää tricklea.

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

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

Missä,

  1. [palvelu] ilmoittaa sen sovelluksen nimen, jonka kaistanleveyden käyttöä aiomme muokata.
  2. Prioriteetti antaa meille mahdollisuuden määrittää, että palvelulla on korkeampi prioriteetti suhteessa toiseen, mikä ei salli yksittäisen sovelluksen työntää kaikkea kaistanleveyttä, jota demoni hallitsee. Mitä pienempi numero, sitä enemmän kaistanleveyttä osoitetaan [palvelulle].
  3. Ajan tasoittaminen [sekunneissa]: määrittää, millä aikavälillä tippuu yrittää antaa sovelluksen siirtää ja/tai vastaanottaa tietoja. Pienemmät arvot (jotain välillä 0,1 - 1 s) ovat ihanteellisia interaktiivisille sovelluksille ja johtavat jatkuvempaan (sujuvampaan) istuntoon, kun taas hieman suuremmat arvot (1 - 10 s) ovat parempia sovelluksille, jotka tarvitsevat joukkolähetyksiä. Jos arvoa ei määritetä, käytetään oletusarvoa (5 s).
  4. Pituuden tasaus [kilotavuina]: idea on sama kuin aika-tasoituksessa, mutta perustuu I/O-operaation pituuteen. Jos arvoa ei määritetä, käytetään oletusarvoa (10 kt).

Tasausarvojen muuttaminen siirtyy [service] -palvelun määrittelemään sovellukseen käyttämällä siirtonopeuksia aikavälillä kiinteän arvon sijaan. Valitettavasti ei ole kaavaa tämän välin ala- ja ylärajan laskemiseksi, koska se riippuu lähinnä kustakin erityistapauksesta.

Seuraava on esimerkki trickled.conf CentOS 7 -asiakasohjelmasta (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äytettäessä trickled priorisoi SSH-yhteydet FTP-siirtojen sijaan. Huomaa, että vuorovaikutteinen prosessi, kuten SSH, käyttää pienempiä aikaa tasoittavia arvoja, kun taas palvelu, joka suorittaa joukkotiedonsiirtoja (FTP), käyttää suurempaa arvoa.

Tasoitusarvot ovat vastuussa edellisen esimerkkimme lataus- ja latausnopeuksista, jotka eivät vastaa tarkan arvon, joka on määritelty, mutta liikkuu lähellä sitä.

[Saatat pitää myös: OpenSSH-palvelimen suojaaminen ja parantaminen]

Johtopäätös

Tässä artikkelissa olemme tutkineet, kuinka rajoittaa sovellusten käyttämää kaistanleveyttä Fedorapohjaisten jakelujen ja Debianin/johdannaisten trickle-ohjelmilla. Muita mahdollisia käyttötapauksia ovat muun muassa seuraavat:

  • Latausnopeuden rajoittaminen järjestelmän apuohjelman, kuten torrent-asiakasohjelman, avulla.
  • Rajoittaa nopeutta, jolla järjestelmääsi voidaan päivittää\"aptitude \" -toiminnon avulla, jos olet Debian-pohjainen järjestelmä), paketinhallintajärjestelmä.
  • Jos palvelimesi sattuu olemaan välityspalvelimen tai palomuurin taakse (tai se on itse välityspalvelin tai palomuuri), voit asettaa trickle-toiminnon asettamaan rajoituksia sekä lataus- että lähetys- tai tiedonsiirtonopeudelle asiakkaiden tai ulkopuolisten kanssa.

Kysymykset ja kommentit ovat erittäin tervetulleita. Voit lähettää ne meille vapaasti käyttämällä alla olevaa lomaketta.