Jak ograniczyć użycie przepustowości sieci w Linux za pomocą strumienia

Jak ograniczyć użycie przepustowości sieci w Linux za pomocą strumienia

Czy kiedykolwiek spotkałeś sytuacje, w których jedna aplikacja zdominowała twoją przepustowość sieciową? Jeśli kiedykolwiek byłeś w sytuacji, w której jedna aplikacja zjadła cały Twój ruch, wówczas wycenisz rolę aplikacji Shaper Shaper.

Albo jesteś Administrator systemu lub po prostu Użytkownik Linux, Musisz nauczyć się, jak kontrolować prędkości przesyłania i pobierania aplikacji, aby upewnić się, że przepustowość sieci nie jest spalona przez jedną aplikację.

[Może się również podobać: 16 przydatnych narzędzi do monitorowania przepustowości do analizy użycia sieci w Linux]

Co jest spritle?

Sączyć jest narzędziem shaper z sieci, które pozwala nam zarządzać prędkościami przesyłania i pobierania aplikacji, aby zapobiec jednej z nich do HOG (lub większości) dostępnej przepustowości.

Kilka słów, Trickle pozwala kontrolować szybkość ruchu sieciowego na zasadzie dla aplikacji, w przeciwieństwie do kontroli użytkownika, co jest klasycznym przykładem kształtowania przepustowości w środowisku klient-serwer, i jest prawdopodobnie konfiguracją, że jesteśmy więcej zaznajomiony z.

Jak działa spritle?

Ponadto struga może pomóc nam w zdefiniowaniu priorytetów na podstawie zastosowania, aby po ustaleniu ogólnych limitów dla całego systemu aplikacje priorytetowe nadal otrzymały więcej przepustowości automatycznie.

Aby wykonać to zadanie, strumień ustawia ograniczenia ruchu w sposobie wysyłania i odbierania danych, za pomocą połączeń TCP. Musimy zauważyć, że oprócz szybkości przesyłania danych Trickle nie modyfikuje w żaden sposób zachowania procesu, który kształtuje w danym momencie.

Czego nie może się spływać?

Jedyne ograniczenie, że tak powiem, jest to, że strumy nie będzie działać z aplikacjami lub binarami powiązanymi statycznie Suid Lub SGID Ustawione bity, ponieważ wykorzystuje dynamiczne łączenie i ładowanie, aby umieścić się między ukształtowanym procesem a powiązanym gniazdem sieciowym. Trickle działa następnie jako proxy między tymi dwoma komponentami oprogramowania.

Ponieważ Trickle nie wymaga uprawnień Superuser w celu uruchomienia, użytkownicy mogą ustawić własne ograniczenia ruchu. Ponieważ może to nie być pożądane, zbadamy, jak ustalić ogólne limity, których użytkownicy systemu nie mogą przekroczyć. Innymi słowy, użytkownicy nadal będą mogli zarządzać stawkami ruchu, ale zawsze w granicach ustawionych przez administratora systemu.

Środowisko testowe

W tym artykule wyjaśnimy, jak ograniczyć przepustowość sieci używaną przez aplikacje na serwerze Linux z strumieniem.

Aby wygenerować niezbędny ruch, użyjemy NCFTPPUT I NCFTPGET (Oba narzędzia są dostępne poprzez instalowanie NCFTP) na kliencie (Centos serwer - Dev1: 192.168.0.17), I VSFTPD na serwerze (Debian - Dev2: 192.168.0.15) do celów demonstracyjnych. Te same instrukcje również działają Czerwony kapelusz, Fedora i systemy oparte na Ubuntu.

Instalowanie NCFTP i VSFTPD w Linux

1. Dla RHEL/CENTOS 8/7, Włącz repozytorium EPEL. Dodatkowe pakiety dla Enterprise Linux (Epel) to repozytorium wysokiej jakości oprogramowania bezpłatnego i open source prowadzonego przez projekt Fedora i jest w 100% kompatybilny z jego spinoffami, takimi jak Red Hat Enterprise Linux I Centos. Obydwa sączyć I NCFTP są udostępniane w tym repozytorium.

2. zainstalować NCFTP następująco:

# Yum Update && Sudo Yum Instaluj NCFTP [na systemach opartych na Redhat] # aktualizacja Aptitude && Aptitude instaluj NCFTP [na systemach opartych na debian] 

3. Skonfiguruj serwer FTP na osobnym serwerze. Należy pamiętać, że chociaż FTP jest z natury niepewne, nadal jest powszechnie używany w przypadkach, gdy zabezpieczenia w przesyłaniu lub pobieraniu plików nie jest potrzebne.

Używamy go w tym artykule, aby zilustrować nagrody naprzód i ponieważ pokazuje to prędkości transferu w Stdout na kliencie, a my opuścimy dyskusję na temat tego, czy powinien być używany, czy nie powinien być używany na inną datę i godzinę.

# Yum Update && Yum Instaluj VSFTPD [na systemach opartych na Redhat] # Apt Aktualizacja && Apt Zainstaluj VSFTPD [na systemach opartych na debian] 

Teraz edytuj /etc/vsftpd/vsftpd.conf Plik na serwerze FTP w następujący sposób:

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

Dokonaj następujących zmian:

anonimous_enable = nie local_enable = tak chroot_local_user = tak zezwolić 

Następnie upewnij się, że rozpocznij VSFTPD dla bieżącej sesji i włączyć ją do automatycznego rozpoczęcia przyszłych butów:

# SystemCtl start vsftpd [dla systemów opartych na systemd] # Systemctl Włącz VSFTPD # usługa vsftpd start [dla systemów inicjowych] # CHKCONFIG VSFTPD ON 

4. Jeśli zdecydowałeś się skonfigurować serwer FTP w Centos/Rhel Droplet z klawiszami SSH dla zdalnego dostępu, będziesz potrzebować konta użytkownika chronionego hasłem z odpowiednim katalogiem i plikami do przesłania i pobierania żądanej treści poza katalogiem domowym Root's Home.

Następnie możesz przeglądać do swojego katalogu domowego, wprowadzając następujący adres URL w przeglądarce. Okno logowania wyskakuje monit o prawidłowe konto użytkownika i hasło na serwerze FTP.

ftp: // 192.168.0.15 

Jeśli uwierzytelnianie się powiedzie, zobaczysz zawartość swojego katalogu domowego. Później w tym samouczku będziesz mógł odświeżyć tę stronę, aby wyświetlić pliki przesłane podczas poprzednich kroków.

Drzewo katalogu FTP

Jak zainstalować strumień w Linux

Teraz zainstaluj spritle przez mniam Lub trafny.

Aby zapewnić udaną instalację, jest uważane za dobrą praktykę, aby upewnić się, że aktualnie zainstalowane pakiety są aktualne (za pomocą użycia Aktualizacja Yum) Przed zainstalowaniem samego narzędzia.

# Yum -y Update && Yum Zainstaluj spritle [na systemach opartych na Redhat] # apt -y aktualizacja && apt Zainstaluj spritle [na systemach opartych na debian] 

Sprawdź, czy strumy będzie działać z pożądanym binarnym. Jak wyjaśniliśmy wcześniej, struktura będzie działać tylko z binarami za pomocą bibliotek dynamicznych lub wspólnych. Aby sprawdzić, czy możemy użyć tego narzędzia z określoną aplikacją, możemy użyć dobrze znanego ldd użyteczność, gdzie ldd oznacza dynamiczne zależności listy.

W szczególności będziemy szukać obecności glibc (Biblioteka GNU c) na liście dynamicznych zależności dowolnego programu, ponieważ właśnie biblioteka definiuje wywołania systemu zaangażowane w komunikację za pośrednictwem gniazd.

Uruchom następujące polecenie przeciwko danej binarnej, aby sprawdzić, czy można użyć strumienia do kształtowania przepustowości:

# ldd $ (który [binarny]) | Grep Libc.Więc 

Na przykład,

# ldd $ (który NCFTP) | Grep Libc.Więc 

którego wyjście to:

# libc.Więc.6 => /lib64 /libc.Więc.6 (0x00007efff2e6c000) 

Ciąg między nawiasami wyjściowymi może zmienić się z systemu na system, a nawet między kolejnymi przebiegami tego samego polecenia, ponieważ reprezentuje adres obciążenia biblioteki w pamięci fizycznej.

Jeśli powyższe polecenie nie zwraca żadnych wyników, oznacza to, że binar Libc, i dlatego w takim przypadku nie można użyć strumienia jako shaper przepustowości.

Dowiedz się, jak używać strumień w Linux

Najbardziej podstawowe użycie strużki jest w trybie samodzielnym. Korzystając z tego podejścia, Trickle służy do wyraźnego zdefiniowania prędkości pobierania i przesyłania danej aplikacji. Jak wyjaśniliśmy wcześniej, ze względu na zwięzłość, użyjemy tej samej aplikacji do pobierania i przesyłania testów.

Bieganie struktury w trybie samodzielnym

Porównujemy prędkości pobierania i przesyłania z i bez użycia strumienia. -D Opcja wskazuje prędkość pobierania w KB/s, podczas gdy -u Flaga mówi Tricle, aby ograniczyć prędkość przesyłania przez tę samą jednostkę. Ponadto użyjemy -S flaga, która określa, że ​​strumy powinno działać w trybie samodzielnym.

Podstawowa składnia do uruchamiania strumienia w trybie samodzielnym jest następująca:

# spritle -s -d [szybkość pobierania w kb/s] -u [szybkość przesyłania w kb/s] 

Aby samodzielnie wykonać następujące przykłady, upewnij się sączyć I NCFTP zainstalowane na komputerze klienckim (192.168.0.17 w moim przypadku).

Przykład 1: Przesłanie 2.8 MB Plik PDF z strumieniem i bez.

Używamy swobodnego dystrybucji Podstawy Linux Plik PDF (dostępny stąd) dla następujących testów.

Możesz początkowo pobrać ten plik do bieżącego katalogu roboczego za pomocą następującego polecenia:

# wget http: // trening linux.Be/Files/Books/Linuxfun.PDF 

Składnia do przesłania pliku do naszego serwera FTP bez strumienia jest następująca:

# ncftpput -u nazwa użytkownika -p hasło 192.168.0.15 /Remote_directory lokalny nazwa filmu 

Gdzie /remote_directory jest ścieżką katalogu przesyłania w stosunku do domu nazwy użytkownika i Lokalna nazwa filmu to plik w bieżącym katalogu roboczym.

W szczególności bez strumienia otrzymujemy szczytową prędkość przesyłania 52.02 MB/s (Należy pamiętać, że nie jest to prawdziwa średnia prędkość przesyłania, ale natychmiastowy szczyt wyjściowy), a plik zostaje przesłany niemal natychmiast:

# ncftpput -u nazwa użytkownika -p hasło 192.168.0.15 /testDir Linuxfun.PDF 

Wyjście:

Linuxfun.PDF: 2.79 MB 52.02 MB/s 

Z strumieniem ograniczymy szybkość przesyłania w temperaturze 5 kb/s. Przed przesłaniem pliku po raz drugi musimy go usunąć z katalogu docelowego; W przeciwnym razie, NCFTP Poinformuje nas, że plik w katalogu docelowym jest taki sam, jak próbujemy przesłać, i nie wykonamy przelewu:

# rm/absolutne/ścieżka/do/docelowe/katalog/linuxfun.PDF 

Następnie:

# spritle -s -U 5 ncftpput -u nazwa użytkownika -p hasło 111.111.111.111 /testDir Linuxfun.PDF 

Wyjście:

Linuxfun.PDF: 2.79 MB 4.94 kb/s 

W powyższym przykładzie widzimy, że średnia prędkość przesyłania spadła do ~ 5 kb/s.

Przykład 2: Pobieranie tego samego 2.8 MB Plik PDF z strumieniem i bez

Najpierw pamiętaj o usunięciu pliku PDF z oryginalnego katalogu źródłowego:

# rm/absolute/ścieżka/do/źródło/katalog/Linuxfun.PDF 

Należy pamiętać, że następujące przypadki pobierają plik zdalny do bieżącego katalogu na komputerze klienckim. Fakt ten wskazuje okres (''.') pojawia się po adresie IP serwera FTP.

Bez strumienia:

# ncftpget -u nazwa użytkownika -p hasło 111.111.111.111 . /testDir/Linuxfun.PDF 

Wyjście:

Linuxfun.PDF: 2.79 MB 260.53 MB/s 

Z strumieniem, ograniczenie prędkości pobierania przy 20 kb/s:

# spritle -s -d 30 ncftpget -u nazwa użytkownika -p hasło 111.111.111.111 . /testDir/Linuxfun.PDF 

Wyjście:

Linuxfun.PDF: 2.79 MB 17.76 kb/s 

Bieganie struktury w trybie nadzorowanym [niezarządzanym]

Trickle może również działać w trybie niezarządzanym, zgodnie z serią zdefiniowanych parametrów /itp./spritled.conf. Ten plik określa, jak spływający (demon) zachowuje się i zarządza strumieniem.

Ponadto, jeśli chcemy ustawić globalne ustawienia, ogólnie przez wszystkie aplikacje, będziemy musieli użyć polecenia spływanego. To polecenie uruchamia demon i pozwala nam zdefiniować limity pobierania i przesyłania, które będą udostępniane przez wszystkie aplikacje uruchomione przez strumień bez konieczności określania limitów za każdym razem.

Na przykład bieganie:

# spritled -d 50 -U 10 

Spowoduje, że prędkości pobierania i przesyłania dowolnej aplikacji są ograniczone do spritle 30 kb/s I 10 kb/s, odpowiednio.

Pamiętaj, że możesz sprawdzić w dowolnym momencie, czy spritled jest działający i z jakim argumentami:

# ps -ef | Grep spritled | grep -v grep 

Wyjście:

root 16475 1 0 dec24 ? 00:00:04 spritled -d 50 -U 10 
Przykład 3: Przesłanie pliku MP4 19 MB do naszego serwera FTP za pomocą strumienia i bez.

W tym przykładzie użyjemy swobodnego dystrybucji „He jest darem”Wideo, dostępne do pobrania z tego linku.

Początkowo pobieramy ten plik do twojego bieżącego katalogu roboczego za pomocą następującego polecenia:

# wget http: // media2.LDSCDN.Org/Assets/Missionary/Our-People-2014/2014-00-1460-He-Is-the-Gift-360p-eng.MP4 

Po pierwsze, zaczniemy Demon podstępny z poleceniem wymienionym powyżej:

# spritled -d 30 -U 10 

Bez strumienia:

# ncftpput -u nazwa użytkownika -p hasło 192.168.0.15 /TESTDIR 2014-00-1460-HE-IS-the-the-Gift-360p-eng.MP4 

Wyjście:

2014-00-1460-He-Is-the-Gift-360p-eng.MP4: 18.53 MB 36.31 MB/s 

Z Trickle:

# Trickle NCFTPPUT -u Nazwa użytkownika -p hasło 192.168.0.15 /TESTDIR 2014-00-1460-HE-IS-the-the-Gift-360p-eng.MP4 

Wyjście:

2014-00-1460-He-Is-the-Gift-360p-eng.MP4: 18.53 MB 9.51 kb/s 

Jak widać na powyższym wyjściu, szybkość przesyłania spadła do ~ 10 kb/s.

Przykład 4: Pobieranie tego samego filmu z strumieniem i bez

Jak w Przykład 2, Będziemy pobierać plik do bieżącego katalogu roboczego.

Bez strumienia:

# ncftpget -u nazwa użytkownika -p hasło 192.168.0.15 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.MP4 

Wyjście:

2014-00-1460-He-Is-the-Gift-360p-eng.MP4: 18.53 MB 108.34 MB/s 

Z Trickle:

# Tricle NCFTPGET -u Nazwa użytkownika -p hasło 111.111.111.111 . /testdir/2014-00-1460-he-is-the-gift-360p-eng.MP4 

Wyjście:

2014-00-1460-He-Is-the-Gift-360p-eng.MP4: 18.53 MB 29.28 kb/s 

Który jest zgodny z wcześniejszym zestawem limitu pobierania (30 kb/s).

Notatka: Że po uruchomieniu demona nie ma potrzeby ustalania indywidualnych limitów dla każdej aplikacji, która używa strumienia.

Jak wspomnialiśmy wcześniej, można dodatkowo dostosować kształtowanie przepustowości Spritle.conf. Typowa sekcja w tym pliku składa się z następujących:

[Service] Priorytet = gładkie czasowe = gładkie długość =  

Gdzie,

  1. [praca] Wskazuje nazwę aplikacji, której użycie przepustowości zamierzamy kształtować.
  2. Priorytet pozwala nam określić usługę, aby mieć wyższy priorytet w stosunku do innej, nie pozwalając jednej aplikacji na całą przepustowość, którą zarządza demon. Im niższa liczba, tym większa przepustowość przypisana do [Service].
  3. Gładko [W sekundach]: Określa, w których przedziały czasowe spróbują pozwolić aplikacji przesyłać i / lub odbierać dane. Mniejsze wartości (coś między zakresem 0.1 - 1) są idealne do interaktywnych aplikacji i spowodują bardziej ciągłą (gładką) sesję, podczas gdy nieco większe wartości (1–10 s) są lepsze w przypadku aplikacji wymagających przeniesienia masowego. Jeśli nie zostanie określona żadna wartość, używane jest domyślne (5 s).
  4. Gładka długość [W KB]: Pomysł jest taki sam jak w gładkim czasie, ale w oparciu o długość operacji we/wy. Jeśli nie zostanie określona żadna wartość, używana jest domyślna (10 kb).

Zmiana wartości wygładzania przełoży się na aplikację określoną przez [praca] Wykorzystanie prędkości transferu w przedziale zamiast stałej wartości. Niestety, nie ma wzoru do obliczenia dolnych i górnych granic tego przedziału, ponieważ zależy to głównie od każdego konkretnego scenariusza.

Poniżej znajduje się spritled.conf przykładowy plik w kliencie Centos 7 (192.168.0.17):

[SSH] Priorytet = 1 gładka czasowa = 0.1 gładka długość = 2 [ftp] Priorytet = 2 gładkie czasowe = 1 gładko do długości = 3 

Korzystając z tej konfiguracji, spritled będzie priorytetowo traktować połączenia SSH przez transfery FTP. Należy zauważyć, że interaktywny proces, taki jak SSH, wykorzystuje mniejsze wartości gładkie, podczas gdy usługa wykonująca transfer danych (FTP) wykorzystuje większą wartość.

Wartości wygładzania są odpowiedzialne za prędkości pobierania i przesyłania w naszym poprzednim przykładzie, nie pasując do dokładnej wartości określonej przez podstępny demon, ale porusza się w zbliżającym się do niego przedział.

[Możesz także polubił: Jak zabezpieczyć i utwardzić serwer OpenSsh]

Wniosek

W tym artykule zbadaliśmy, w jaki sposób ograniczyć przepustowość używaną przez aplikacje za pomocą struktury na dystrybucjach i debian / instrumentach pochodnych Fedora. Inne możliwe przypadki użycia obejmują między innymi:

  • Ograniczanie prędkości pobierania za pośrednictwem narzędzia systemowego, takiego jak na przykład klient WGET lub klient.
  • Ograniczając prędkość, z jaką Twój system można aktualizować za pośrednictwem „mniam” (lub „umiejętności”, jeśli jesteś w systemie opartym na debian), system zarządzania pakietami.
  • Jeśli twój serwer jest za proxy lub zaporą (lub jest sama proxy lub zapora), możesz użyć strumienia, aby ustawić limity zarówno pobierania, jak i prędkości przesyłania lub komunikacji z klientami lub na zewnątrz.

Pytania i komentarze są najbardziej mile widziane. Użyj poniższego formularza, aby wysłać je na naszą drogę.