Kuidas piirata võrgu ribalaiuse kasutamist Linuxis Trickle'i abil


Kas olete kunagi kohanud olukordi, kus kogu teie võrgu ribalaiuses domineeris üks rakendus? Kui olete kunagi olnud olukorras, kus üks rakendus sõi kogu teie liikluse ära, siis väärtustate läbiva ribalaiuse kujundaja rolli.

Kas olete süsteemi administraator või lihtsalt Linuxi kasutaja, peate õppima, kuidas juhtida rakenduste üles- ja allalaadimiskiirust, veendumaks, et teie võrgu ribalaiust ei põletaks üks rakendus.

[Samuti võib teile meeldida: 16 kasulikku ribalaiuse jälgimise tööriista Linuxi võrgukasutuse analüüsimiseks]

Mis on Trickle?

Trickle on võrgu ribalaiuse kujundaja, mis võimaldab meil hallata rakenduste üles- ja allalaadimiskiirusi, et ükski neist ei kahjustaks kogu (või enamikku) olemasolevat ribalaiust.

Mõne sõnaga võimaldab trickle teil võrguliikluse kiirust juhtida rakenduste kaupa, erinevalt kasutajate juhtimisest, mis on kliendi-serveri keskkonnas klassikaline ribalaiuse kujundamise näide ja ilmselt on see seadistus, mida oleme rohkem tuttav.

Kuidas Trickle töötab?

Lisaks võib nipp aidata meil määratleda prioriteedid rakenduse kaupa, nii et kui kogu süsteemile on seatud üldised piirangud, saavad prioriteetsed rakendused ikkagi automaatselt suurema ribalaiuse.

Selle ülesande täitmiseks seab trikk liikluspiirangud viisile, kuidas andmeid TCP-ühendusi kasutades pistikupesadesse edastatakse ja sealt võetakse. Peame märkima, et peale andmeedastuskiiruse ei muuda voolamine mingil viisil selle protsessi käitumist, mida see igal hetkel kujundab.

Mida Trickle ei saa teha?

Ainus nii-öelda piirang on see, et triip ei tööta staatiliselt lingitud rakenduste või binaarrakendustega, mille SUID- või SGID-bitt on seatud, kuna see kasutab dünaamilist linkimist ja laadimist, et asetada end vormitud protsessi ja sellega seotud võrgupesa vahele. Seejärel toimib Trickle nende kahe tarkvarakomponendi vahelise puhverserverina.

Kuna trickle ei vaja käivitamiseks superkasutaja õigusi, saavad kasutajad ise oma liikluspiirangud seada. Kuna see ei pruugi olla soovitav, uurime, kuidas seada üldised piirangud, mida süsteemi kasutajad ei saa ületada. Teisisõnu saavad kasutajad endiselt oma liikluskiirusi hallata, kuid alati süsteemiadministraatori seatud piirides.

Selles artiklis selgitame, kuidas piirata võrgu ribalaiust, mida rakendused Linuxi serveris kasutavad.

Vajaliku liikluse loomiseks kasutame kliendis (CentOS server - dev1: 192.168.0.17) ja serveris vsftpd (Debian - dev2: 192.168.0.15) ncftpput ja ncftpget (mõlemad tööriistad on saadaval ncftp installimisel). tutvustamise eesmärgil. Samad juhised töötavad ka RedHati, Fedora ja Ubuntu põhistes süsteemides.

Ncftp ja vsftpd installimine Linuxi

1. RHEL/CentOS 8/7 puhul lubage EPEL-i hoidla. Extra Packages for Enterprise Linux (EPEL) on Fedora projekti hooldatud kvaliteetse tasuta ja avatud lähtekoodiga tarkvara hoidla ning ühildub 100% selle spinoffidega, nagu Red Hat Enterprise Linux ja CentOS. Nii trickle kui ka ncftp tehakse sellest hoidlast kättesaadavaks.

2. Installige ncftp järgmiselt:

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

3. Seadistage FTP-server eraldi serverisse. Pange tähele, et kuigi FTP on oma olemuselt ebaturvaline, kasutatakse seda siiski laialdaselt juhtudel, kui failide üleslaadimisel või allalaadimisel pole vaja turvalisust.

Kasutame seda käesolevas artiklis, et illustreerida tilgutamise paljusust ja kuna see näitab kliendi jaoks edastuskiiruseid standardselt, ning jätame arutelu selle üle, kas seda tuleks kasutada või mitte kasutada mõnel muul kuupäeval ja kellaajal.

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

Nüüd muutke FTP-serveris faili /etc/vsftpd/vsftpd.conf järgmiselt:

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

Tehke järgmised muudatused:

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

Pärast seda veenduge, et käivitaksite vsftpd oma praeguse seansi jaoks ja lubaksite selle automaatseks käivitamiseks tulevastel buutidel:

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

4. Kui otsustasite FTP-serveri seadistada kaugjuurdepääsuks SSH-võtmetega CentOS/RHEL-tilgakesse, vajate parooliga kaitstud kasutajakontot koos vastavate kataloogi- ja faililubadega soovitud sisu üles- ja allalaadimiseks VÄLJU juurest kataloogi.

Seejärel saate sirvida oma kodukataloogi, sisestades oma brauseris järgmise URL-i. Avaneb sisselogimisaken, mis palub teil FTP-serveris sisestada kehtiva kasutajakonto ja parooli.

ftp://192.168.0.15

Kui autentimine õnnestub, näete oma kodukataloogi sisu. Hiljem selles õpetuses saate seda lehte värskendada, et kuvada eelmiste toimingute ajal üles laaditud faile.

Kuidas Trickle'i Linuxi installida

Nüüd installige trickle yum või apt kaudu.

Eduka installimise tagamiseks peetakse heaks tavaks enne tööriista enda installimist veenduda, et praegu installitud paketid oleksid ajakohased (kasutades yum-värskendust).

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

Kontrollige, kas tilk töötab soovitud binaararvutiga. Nagu me varem selgitasime, töötab trikk ainult dünaamilisi või jagatud teeke kasutavate kahendfailidega. Kontrollimaks, kas saame seda tööriista teatud rakendusega kasutada, võime kasutada tuntud utiliiti ldd, kus ldd tähistab loendi dünaamilisi sõltuvusi.

Täpsemalt, otsime glibc (GNU C teek) olemasolu iga konkreetse programmi dünaamiliste sõltuvuste loendist, sest just see teek määratleb pistikupesade kaudu suhtlemisega seotud süsteemikõned.

Käivitage järgmine käsk etteantud binaararvuti vastu, et näha, kas selle ribalaiuse kujundamiseks saab kasutada tilkumist:

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

Näiteks,

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

mille väljund on:

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

Väljundis sulgude vahel võib string muutuda süsteemselt süsteemile ja isegi sama käsu järgnevate käitamiste vahel, kuna see tähistab füüsilises mälus asuva teegi laadimisaadressi.

Kui ülaltoodud käsk ei anna tulemusi, tähendab see, et binaarne fail, millega see käivitati, ei kasuta libc-d ja seega ei saa trickle'i sel juhul ribalaiuse kujundajana kasutada.

Siit saate teada, kuidas Trickle'i Linuxis kasutada

Nippimise kõige elementaarsem kasutamine on eraldiseisvas režiimis. Selle lähenemisviisi abil kasutatakse trickle'i, et selgesõnaliselt määratleda antud rakenduse allalaadimise ja üleslaadimise kiirus. Nagu me varem selgitasime, kasutame lühiduse huvides sama rakendust allalaadimise ja üleslaadimise testide jaoks.

Võrdleme allalaadimis- ja üleslaadimiskiirusi nippude kasutamisega ja ilma. Valik -d näitab allalaadimiskiirust KB/s-des, samas kui lipp -u annab käsu piirata üleslaadimiskiirust sama ühiku võrra. Lisaks kasutame lippu -s , mis täpsustab, et tilk peaks töötama iseseisvas režiimis.

Põhisüntaks, et käivitada eraldiseisvas režiimis tilkumine, on järgmine:

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

Järgmiste näidete iseseisvaks teostamiseks veenduge, et kliendimasinasse oleks installitud trickle ja ncftp (minu puhul 192.168.0.17).

Järgmiste testide jaoks kasutame vabalt levitatavat PDF-faili Linux Fundamentals (saadaval siit).

Esialgu saate selle faili oma praegusesse töökataloogi alla laadida järgmise käsuga:

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

Süntaks faili meie FTP-serverisse üleslaadimiseks on järgmine:

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

Kus/remote_directory on üleslaadimiskataloogi tee kasutajanime kodu suhtes ja kohalik-failinimi on fail teie praeguses töökataloogis.

Täpsemalt, ilma nihutamiseta saame üleslaadimise tippkiiruseks 52,02 MB/s (pange tähele, et see pole tegelik keskmine üleslaadimiskiirus, vaid kohene algustipp) ja fail laaditakse üles peaaegu koheselt:

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

Väljund:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

Nippimisega piirame üleslaadimise edastuskiirust kiirusega 5 KB/s. Enne faili teistkordset üleslaadimist peame selle sihtkataloogist kustutama; muul juhul teavitab ncftp meid, et sihtkataloogis olev fail on sama, mida proovime üles laadida, ja ei tee ülekannet:

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

Siis:

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

Väljund:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

Ülaltoodud näites näeme, et keskmine üleslaadimiskiirus langes ~ 5 KB/s.

Kõigepealt ärge unustage kustutada PDF algsest lähtekataloogist:

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

Pange tähele, et järgmistel juhtudel laaditakse kaugfail alla kliendimasina praegusesse kataloogi. Seda fakti näitab periood (‘.’), Mis ilmub pärast FTP-serveri IP-aadressi.

Nooluta:

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

Väljund:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

Nippimisega, piirates allalaadimiskiirust kiirusega 20 KB/s:

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

Väljund:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Trickle'i käitamine järelevalve all [haldamata]

Trickle võib töötada ka haldamata režiimis, järgides /etc/trickled.conf-s määratletud parameetrite jada. See fail määratleb, kuidas trikk (deemon) käitub ja juhib nipet.

Lisaks, kui soovime määrata globaalsed sätted, mida üldiselt peavad kõik rakendused kasutama, peame kasutama käsku trickled. See käsk käivitab deemoni ja võimaldab meil määratleda allalaadimis- ja üleslaadimispiirangud, mida jagavad kõik rakendused, mida läbib nipp, ilma et peaksime iga kord piiranguid määrama.

Näiteks töötab:

# trickled -d 50 -u 10

Põhjustab, et mis tahes rakenduse allalaadimise ja üleslaadimise kiirus on piiratud vastavalt 30 KB/s ja 10 KB/s.

Pange tähele, et saate igal ajal kontrollida, kas trickled töötab ja milliste argumentidega:

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

Väljund:

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

Selles näites kasutame vabalt levitatavat videot "Ta on kingitus", mille saate alla laadida sellelt lingilt.

Esialgu laadime selle faili teie praegusesse töökataloogi alla järgmise käsuga:

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

Kõigepealt alustame ülaltoodud käsuga niristatud deemoni:

# trickled -d 30 -u 10

Nooluta:

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

Väljund:

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

Nõrutusega:

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

Väljund:

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

Nagu näeme ülaltoodud väljundist, langes üleslaadimise edastuskiirus ~ 10 KB/s.

Nagu näites 2, laadime faili alla praegusesse töökataloogi.

Nooluta:

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

Väljund:

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

Nõrutusega:

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

Väljund:

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

Mis on kooskõlas varem seatud allalaadimispiiranguga (30 KB/s).

Märkus. Kui deemon on käivitatud, ei ole vaja seada igale rakendusele, mis kasutab tilkumist.

Nagu me varem mainisime, saab trickle.conf abil veelgi kohandada trickle'i ribalaiuse kujundamist. Selle faili tüüpiline jaotis koosneb järgmisest:

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

Kus

  1. [teenus] näitab selle rakenduse nime, mille ribalaiuse kasutamist kavatseme kujundada.
  2. Prioriteet võimaldab meil määrata teenusel suurema prioriteediga võrreldes teise, mis ei luba ühel rakendusel kogu ribalaiust, mida deemon haldab. Mida väiksem on number, seda suurem on ribalaius [teenusele] määratud.
  3. Ajapikendamine [sekundites]: määrab, milliste ajaintervallidega proovitakse rakendusel andmeid edastada ja/või vastu võtta. Väiksemad väärtused (vahemikus 0,1–1 s) sobivad ideaalselt interaktiivsete rakenduste jaoks ja nende tulemuseks on pidevam (sujuvam) seanss, samas kui veidi suuremad väärtused (1–10 s) on paremad hulgiedastust vajavate rakenduste jaoks. Kui väärtust pole määratud, kasutatakse vaikimisi (5 s).
  4. Pikkus-silumine [KB-des]: idee on sama mis ajapikenduses, kuid põhineb sisend-/väljundoperatsiooni pikkusel. Kui väärtust pole määratud, kasutatakse vaikimisi (10 KB).

Silumisväärtuste muutmine teisendab rakenduse, mille on määranud [service], kasutades fikseeritud väärtuse asemel intervalli piires ülekandekiirusi. Kahjuks pole selle intervalli alumise ja ülemise piiri arvutamiseks valemit, kuna see sõltub peamiselt igast konkreetsest juhtumist.

Järgmine on CentOS 7 kliendi (192.168.0.17) näidisfail trickled.conf:

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

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

Selle seadistuse kasutamisel seab trickled esikohale SSH-ühendused FTP-ülekannete asemel. Pange tähele, et interaktiivne protsess, näiteks SSH, kasutab väiksemaid aja sujuvaid väärtusi, samas kui teenus, mis teostab hulgiandmeid (FTP), kasutab suuremat väärtust.

Silumisväärtused vastutavad meie eelmise näite allalaadimis- ja üleslaadimiskiiruste eest, mis ei ühti täpse deemoni määratud täpse väärtusega, kuid liiguvad selle lähedal.

[Samuti võib teile meeldida: OpenSSH-i serveri turvalisus ja karastamine]

Järeldus

Selles artiklis oleme uurinud, kuidas piirata rakenduste kasutatavat ribalaiust Fedora-põhiste jaotuste ja Debiani/tuletisinstrumentide puhul trickle'i abil. Muude võimalike kasutusjuhtumite hulka kuuluvad muu hulgas:

  • Allalaadimiskiiruse piiramine süsteemi utiliidi kaudu, näiteks torrent-klient.
  • Piirates teie süsteemi värskendamise kiirust paketi haldussüsteemi kaudu \\ "aptitude \\", kui olete Debiani põhine süsteem).
  • Kui teie server juhtub olema puhverserveri või tulemüüri taga (või on see puhverserver või tulemüür ise), saate kasutada trickle'i, et seada piirangud nii allalaadimis- kui ka üleslaadimis- või suhtluskiirusele klientide või väljastpoolt.

Küsimused ja kommentaarid on teretulnud. Kasutage nende saatmiseks julgelt allolevat vormi.