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ä,
- [palvelu] ilmoittaa sen sovelluksen nimen, jonka kaistanleveyden käyttöä aiomme muokata.
- 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].
- 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).
- 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.