Kako omejiti omrežno pasovno širino, ki jo uporabljajo aplikacije v sistemu Linux s sistemom Trickle


Ste se že kdaj srečali s situacijami, ko je ena aplikacija prevladovala nad vso pasovno širino vašega omrežja? Če ste bili kdaj v situaciji, ko je ena aplikacija pojedla ves vaš promet, boste cenili vlogo aplikacije za oblikovanje pasovne širine.

Če ste skrbnik sistema ali le uporabnik Linuxa, se morate naučiti, kako nadzirati hitrosti nalaganja in prenosa programov, da zagotovite, da pasovne širine vaše mreže ne zažge ena sama aplikacija.

[Morda vam bo všeč tudi: 16 uporabnih orodij za nadzor pasovne širine za analizo uporabe omrežja v Linuxu]

Kaj je Trickle?

Trickle je orodje za oblikovanje pasovne širine omrežja, ki nam omogoča upravljanje hitrosti nalaganja in prenosa aplikacij, da prepreči, da bi katera koli izmed njih pasla vso (ali večino) razpoložljive pasovne širine.

Z nekaj besedami vam kapljice omogočajo nadzor nad hitrostjo omrežnega prometa na posamezno aplikacijo, v nasprotju s kontrolo na uporabnika, kar je klasičen primer oblikovanja pasovne širine v okolju odjemalec-strežnik, in verjetno je nastavitev, da smo bolj seznanjen z.

Kako Trickle deluje?

Poleg tega nam kapljica lahko pomaga določiti prioritete za posamezno aplikacijo, tako da bodo, ko bodo določene splošne omejitve za celoten sistem, prednostne aplikacije samodejno še vedno prejemale več pasovne širine.

Za izpolnitev te naloge kapljica nastavi omejitve prometa na način pošiljanja in prejemanja podatkov iz vtičnic s povezavami TCP. Upoštevati moramo, da, razen hitrosti prenosa podatkov, tok ne spreminja vedenja procesa, ki ga v danem trenutku oblikuje.

Kaj ne more narediti Trickle?

Edina omejitev, tako rekoč, je, da curka ne bo delovala s statično povezanimi aplikacijami ali binarnimi datotekami z nastavljenimi bodi SUID ali SGID, saj uporablja dinamično povezovanje in nalaganje, da se postavi med oblikovan proces in z njim povezano omrežno vtičnico. Nato Trickle deluje kot posrednik med tema dvema komponentama programske opreme.

Ker tok za izvajanje ne zahteva privilegijev, lahko uporabniki sami nastavijo omejitve prometa. Ker to morda ni zaželeno, bomo raziskali, kako določiti splošne omejitve, ki jih uporabniki sistema ne smejo preseči. Z drugimi besedami, uporabniki bodo še vedno lahko upravljali svoje stopnje prometa, vendar vedno v mejah, ki jih je določil skrbnik sistema.

V tem članku bomo razložili, kako s curkom omejiti pasovno širino omrežja, ki jo uporabljajo aplikacije v strežniku Linux.

Za ustvarjanje potrebnega prometa bomo na odjemalcu (strežnik CentOS - dev1: 192.168.0.17) uporabili ncftpput in ncftpget (obe orodji sta na voljo z namestitvijo ncftp) in vsftpd na strežniku (Debian - dev2: 192.168.0.15) za predstavitvene namene. Ista navodila delujejo tudi na sistemih, ki temeljijo na RedHat, Fedora in Ubuntu.

Namestitev ncftp in vsftpd v Linux

1. Za RHEL/CentOS 8/7 omogočite repozitorij EPEL. Dodatni paketi za Enterprise Linux (EPEL) so shramba visokokakovostne brezplačne in odprtokodne programske opreme, ki jo vzdržuje projekt Fedora, in je 100% združljiva s svojimi spinoffi, kot sta Red Hat Enterprise Linux in CentOS. V tem repozitoriju so na voljo tako trickle kot ncftp.

2. Namestite ncftp, kot sledi:

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

3. Nastavite strežnik FTP v ločenem strežniku. Upoštevajte, da čeprav je FTP že sam po sebi negotov, se še vedno pogosto uporablja v primerih, ko varnost pri nalaganju ali prenosu datotek ni potrebna.

V tem članku ga uporabljamo za ponazoritev blagodati kapljic in ker prikazuje stopnje prenosa v stdout-u za stranko, razpravo o tem, ali naj se uporablja ali ne, bomo pustili za drug datum in čas.

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

Zdaj uredite datoteko /etc/vsftpd/vsftpd.conf na strežniku FTP, kot sledi:

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

Naredite naslednje spremembe:

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

Po tem obvezno zaženite vsftpd za trenutno sejo in jo omogočite za samodejni zagon v prihodnjih zagonih:

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

4. Če ste se odločili za nastavitev strežnika FTP v kapljici CentOS/RHEL s ključi SSH za oddaljeni dostop, boste potrebovali geslo zaščiten uporabniški račun z ustreznimi imeniškimi in datotečnimi dovoljenji za nalaganje in prenos želene vsebine ZUNAJ koreninskega doma imenik.

Nato lahko pobrskate do domačega imenika tako, da v svoj brskalnik vnesete naslednji URL. Odprlo se bo okno za prijavo, v katerem boste morali vnesti veljaven uporabniški račun in geslo na strežniku FTP.

ftp://192.168.0.15

Če preverjanje pristnosti uspe, boste videli vsebino domačega imenika. Kasneje v tej vadnici boste lahko osvežili stran, da bodo prikazane datoteke, ki so bile naložene v prejšnjih korakih.

Kako namestiti Trickle v Linux

Zdaj namestite trickle prek yum ali apt.

Da bi zagotovili uspešno namestitev, se pred namestitvijo samega orodja prepričajte, da so trenutno nameščeni paketi posodobljeni (z uporabo yum update).

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

Preverite, ali kapljice delujejo z želeno binarno datoteko. Kot smo že pojasnili, kapljica deluje samo z binarnimi datotekami, ki uporabljajo dinamične knjižnice ali knjižnice v skupni rabi. Če želite preveriti, ali lahko uporabljamo to orodje z določeno aplikacijo, lahko uporabimo dobro znani pripomoček ldd, kjer ldd pomeni dinamične odvisnosti seznama.

Natančneje, poiskali bomo prisotnost glibc (knjižnice GNU C) na seznamu dinamičnih odvisnosti katerega koli programa, ker ravno ta knjižnica določa sistemske klice, vključene v komunikacijo prek vtičnic.

Zaženite naslednji ukaz proti dani binarni datoteki, da preverite, ali lahko s kapljanjem oblikujemo pasovno širino:

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

Na primer

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

katerega izhod je:

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

Niz med oklepaji v izhodu se lahko spreminja od sistema do sistema in celo med naslednjimi teki istega ukaza, saj predstavlja naslov nalaganja knjižnice v fizičnem pomnilniku.

Če zgornji ukaz ne vrne nobenih rezultatov, to pomeni, da binarni zapis, s katerim je bil zagnan, ne uporablja libc in zato kapljic v tem primeru ni mogoče uporabiti kot oblikovalca pasovne širine.

Naučite se uporabljati Trickle v Linuxu

Najosnovnejša uporaba kapljic je v samostojnem načinu. S tem pristopom se tok uporablja za eksplicitno določitev hitrosti prenosa in nalaganja določene aplikacije. Kot smo že pojasnili, bomo zaradi kratkosti uporabili isto aplikacijo za preskuse prenosa in nalaganja.

Primerjali bomo hitrosti prenosa in nalaganja z uporabo curka in brez njega. Možnost -d označuje hitrost prenosa v KB/s, medtem ko zastavica -u pove, da omeji hitrost nalaganja z isto enoto. Poleg tega bomo uporabili zastavico -s , ki določa, da se kapljice izvajajo v samostojnem načinu.

Osnovna sintaksa za izvajanje curka v samostojnem načinu je naslednja:

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

Če želite sami izvesti naslednje primere, poskrbite, da so na odjemalskem računalniku nameščeni trickle in ncftp (v mojem primeru 192.168.0.17).

Za naslednje teste uporabljamo prosto razširljivo datoteko PDF Fundamentals Linux (na voljo tukaj).

To datoteko lahko sprva prenesete v trenutni delovni imenik z naslednjim ukazom:

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

Sintaksa za nalaganje datoteke na naš FTP strežnik brez kapljic je naslednja:

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

Kjer je/remote_directory pot mape za nalaganje glede na dom uporabniškega imena, local-filename pa je datoteka v vašem trenutnem delovnem imeniku.

Natančneje, brez kapljic dosežemo največjo hitrost nalaganja 52,02 MB/s (upoštevajte, da to ni dejanska povprečna hitrost nalaganja, ampak trenutni začetni vrh) in datoteka se naloži skoraj takoj:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB   52.02 MB/s

S kapljicami bomo omejili hitrost prenosa datotek na 5 KB/s. Preden datoteko naložimo drugič, jo moramo izbrisati iz ciljnega imenika; sicer nas bo ncftp obvestil, da je datoteka v ciljnem imeniku enaka tisti, ki jo poskušamo naložiti, in ne bo izvedla prenosa:

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

Nato:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB	4.94 kB/s

V zgornjem primeru lahko vidimo, da je povprečna hitrost nalaganja padla na ~ 5 KB/s.

Najprej ne pozabite izbrisati PDF iz izvirnega imenika:

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

Upoštevajte, da bodo naslednji primeri oddaljeno datoteko prenesli v trenutni imenik v odjemalskem računalniku. To dejstvo označuje obdobje (‘.‘), Ki se prikaže za naslovom IP strežnika FTP.

Brez kapljic:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB  260.53 MB/s

S kapljicami, ki omejujejo hitrost prenosa na 20 KB/s:

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

Izhod:

LinuxFun.pdf:                                        	2.79 MB   17.76 kB/s

Zagon Trickle v nadzorovanem [neupravljanem] načinu

Trickle se lahko izvaja tudi v neupravljanem načinu po vrsti parametrov, določenih v /etc/trickled.conf. Ta datoteka določa, kako se curka (demon) obnaša in upravlja s curkom.

Poleg tega, če želimo nastaviti globalne nastavitve, ki jih bodo na splošno uporabljale vse aplikacije, bomo morali uporabiti ukazeni ukaz. Ta ukaz zažene demon in nam omogoča, da določimo omejitve prenosa in nalaganja, ki si jih bodo delile vse aplikacije, ki se izvajajo skozi tok, ne da bi morali vsakič določiti omejitve.

Na primer, tek:

# trickled -d 50 -u 10

Hitrost prenosa in nalaganja katere koli aplikacije, ki se izvaja po kapljicah, bo omejena na 30 KB/s oziroma 10 KB/s.

Prosimo, upoštevajte, da lahko kadar koli preverite, ali se poteka in s kakšnimi argumenti:

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

Izhod:

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

V tem primeru bomo uporabili videoposnetek "On je darilo", ki ga je mogoče distribuirati na voljo s te povezave.

To datoteko bomo sprva prenesli v vaš trenutni delovni imenik z naslednjim ukazom:

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

Najprej bomo začeli demon z zgoraj navedenim ukazom:

# trickled -d 30 -u 10

Brez kapljic:

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

Izhod:

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

S kapljicami:

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

Izhod:

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

Kot lahko vidimo v zgornjem izhodu, se je hitrost prenosa datotek zmanjšala na ~ 10 KB/s.

Tako kot v primeru 2 bomo datoteko prenesli v trenutni delovni imenik.

Brez kapljic:

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

Izhod:

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

S kapljicami:

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

Izhod:

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

Kar je v skladu s prej določeno omejitvijo prenosa (30 KB/s).

Opomba: Ko je demon zagnan, ni treba nastaviti posameznih omejitev za vsako aplikacijo, ki uporablja tok.

Kot smo že omenili, lahko s pomočjo trickled.conf dodatno prilagodimo pasovno širino curka. Tipičen odsek te datoteke je sestavljen iz naslednjega:

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

Kje,

  1. [storitev] označuje ime aplikacije, katere pasovno širino nameravamo oblikovati.
  2. Prednost nam omogoča, da določimo, da ima storitev višjo prioriteto v primerjavi z drugo, s čimer ne dovoli, da bi ena sama aplikacija prekrila vso pasovno širino, ki jo upravlja demon. Nižja kot je številka, večja pasovna širina je dodeljena [storitvi].
  3. Izravnava časa [v sekundah]: določa, s kakšnimi časovnimi intervali bo poskušala aplikacija prenašati in/ali prejemati podatke. Manjše vrednosti (nekaj med območjem 0,1 - 1s) so idealne za interaktivne aplikacije in bodo imele za posledico bolj neprekinjeno (gladko) sejo, nekoliko večje vrednosti (1 - 10 s) pa boljše za aplikacije, ki potrebujejo prenos v velikem obsegu. Če vrednost ni podana, se uporabi privzeta vrednost (5 s).
  4. Izravnavanje dolžine [v KB]: ideja je enaka kot pri izravnavanju časa, vendar temelji na dolžini V/I operacije. Če vrednost ni podana, se uporabi privzeta vrednost (10 KB).

Sprememba izravnalnih vrednosti se bo prevedla v aplikacijo, ki jo določi [storitev], s pomočjo hitrosti prenosa znotraj intervala namesto fiksne vrednosti. Na žalost ni formule za izračun spodnje in zgornje meje tega intervala, saj je ta odvisna predvsem od posameznega scenarija.

Sledi vzorčna datoteka trickled.conf v odjemalcu 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

Z uporabo te nastavitve bo ukazoval prednost SSH povezavam pred prenosi FTP. Upoštevajte, da interaktivni postopek, kot je SSH, uporablja manjše časovne izravnave, medtem ko storitev, ki izvaja prenos podatkov v velikem obsegu (FTP), uporablja večjo vrednost.

Vrednosti glajenja so odgovorne za hitrosti prenosa in nalaganja v našem prejšnjem primeru, ki se ne ujemajo z natančno vrednostjo, ki jo določa ukašani demon, ampak se premikajo v intervalu blizu njega.

[Morda vam bo všeč tudi: Kako zavarovati in okrepiti strežnik OpenSSH]

Zaključek

V tem članku smo raziskali, kako omejiti pasovno širino, ki jo uporabljajo aplikacije z uporabo kapljic v distribucijah Fedora in Debian/izvedenih finančnih instrumentih. Drugi možni primeri uporabe vključujejo, vendar niso omejeni na:

  • Omejevanje hitrosti prenosa s sistemskim pripomočkom, kot je na primer hudourniški odjemalec.
  • Omejevanje hitrosti, s katero je mogoče vaš sistem posodobiti prek \\ "aptitude \\", če uporabljate sistem, ki temelji na Debianu), sistem za upravljanje paketov.
  • Če je vaš strežnik za proxyjem ali požarnim zidom (ali je sam proxy ali požarni zid), lahko s pomočjo kapljic nastavite omejitve hitrosti prenosa in nalaganja ali komunikacije s strankami ali zunanjo stranjo.

Vprašanja in komentarji so zelo dobrodošli. Uporabite spodnji obrazec, da jih pošljete na naš način.