Jak mogę ograniczyć przepustowość pobierania / wysyłania?

77

Jak mogę ograniczyć przepustowość pobierania / wysyłania dla:

  • Cały system operacyjny.
  • Jeden interfejs sieciowy.
  • Pojedyncza aplikacja.
Jewhene
źródło
wondershaperZłożyłem błąd dotyczący problemu w Ubuntu 17.10, który może być podobny do tego, co dzieje się z @Zeromatiker w Ubuntu 17.04: bugs.launchpad.net/ubuntu/+source/wondershaper/+bug/1745421
aguadopd

Odpowiedzi:

42

Ograniczanie pojedynczego interfejsu jest łatwe, ale globalne limity prędkości wymagają bardziej złożonych reguł, podobnie jak reguły oparte na aplikacjach. Nie twierdzę, że nie da się tego zrobić, ale wymaga to sporo zagłębiania się w wewnętrzne elementy sieci.

Oto krótki poradnik dotyczący ustawiania limitu interfejsu

Jeśli naprawdę chcesz skonfigurować reguły oparte aplikacji, należy szukać w pewnym ramach zapory, jak Shorewall , które posiadają funkcje pomocnicze, aby skonfigurować kształtowanie. Nawet z tymi narzędziami wymaga sporo staranności i testowania, aby go zainstalować. Robienie czegoś takiego jak ad hoc nie jest jeszcze takie łatwe.

Ressu
źródło
wondershaper nie działa Nie wiem dlaczego (nawet wondershaper eth0 1000 1000 nie ma przepustowości internetu. Muszę ograniczyć całą przepustowość eth0 nie tylko określonych aplikacji. jak to zrobić?
Arash
67

Chociaż jest to stare pytanie, natknąłem się na to, szukając odpowiedzi na to samo pytanie. Limity systemu operacyjnego i interfejsu zostały już omówione we wcześniejszej odpowiedzi, więc oto sposób na ustawienie limitów specyficznych dla aplikacji. Użyj aplikacji o nazwie strużka. Tak też sudo apt-get install trickle. Możesz ograniczyć przesyłanie / pobieranie dla określonej aplikacji, uruchamiając

trickle -u (upload limit in KB/s) -d (download limit in KB/s) application

Spowoduje to uruchomienie aplikacji z określonymi limitami. Możesz także określić czas wygładzania, aby pobierać próbki w pożądanym okresie, na wypadek, gdyby Twoja aplikacja miała gwałtowne zużycie przepustowości i chcesz, aby impulsy były dozwolone, o ile średnia jest zgodna ze specyfikacjami.

SMeznaric
źródło
14
Dziękuję Ci bardzo! To rozwiązanie jest idealne do kontrolowania przepustowości dla poszczególnych aplikacji. Proszę nie wahaj się opublikować odpowiedzi, nawet jeśli pytanie ma już lata. Do wykorzystania w przyszłości: Może pojawić się komunikat o błędzie, taki jak trickle: Could not reach trickled, working independently: No such file or directory. Możesz usunąć to ostrzeżenie, uruchamiając strużkę w trybie autonomicznym za pomocą trickle -s.
Glutanimate,
Jak usunąć limit ograniczony strumieniem?
Mysz anonimowa
2
Trickle uruchomi dla Ciebie aplikację z wymuszonymi limitami. Wszystko, co musisz zrobić, to zrestartować aplikację bez użycia polecenia trickle.
SMeznaric
1
dziękuję bardzo za tę odpowiedź. Właśnie tego szukałem
Ali,
1
Dokładnie to, czego potrzebowałem, próbując zasymulować wolne połączenie sieciowe.
Ethan Kamiński
5

Jeśli chcesz ograniczyć przepustowość dla określonego adresu IP, możesz użyć tego:

tc qdisc add dev eth1 root handle 1: htb default 12
tc class add dev eth1 parent 1: classid 1:10 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:11 htb rate 2500kbps
tc class add dev eth1 parent 1: classid 1:12 htb rate 5000kbps

tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.105 flowid 1:10
tc filter add dev eth1 protocol ip parent 1:0 prio 1 u32 match ip dst 192.168.2.106 flowid 1:11
Billtian
źródło
4
to było dość skomplikowane. Kilka # komentarzy przeszedłoby długą drogę. Możesz na przykład dodać linki lub wyjaśnienia dla qdisc, classids, htb itp.
oligofren
Więc domyślnie powyższe ogranicza wszystko do 5000 kb / s, chyba że zostanie przefiltrowane do innej kolejki? A jeśli nie chcemy ograniczać wszystkiego ?
Ken Sharp