Podsumowując: Mam dedykowany serwer z kilkoma przyjaciółmi obsługującymi klienta torrent z webowym GUI. Każdy użytkownik uruchamia klienta pod swoją nazwą użytkownika na serwerze, więc pobieranie odbywa się w jego katalogu użytkownika i tylko on ma dostęp do własnych plików itp.
Jak mogę monitorować i ograniczać przepustowość miesięcznie dla poszczególnych użytkowników?
Myślałem, że może być sposób na użycie iptables. I poprzez monitorowanie przepustowości używanej przez wszystkie procesy użytkownika X. A jeśli wykorzystali więcej niż ich miesięczna dozwolona przepustowość Y GB, otrzymywali komunikat informujący, że sieć zostaje zablokowana dla klienta torrent lub klient zostaje całkowicie zabity. Myślałem również o kałamarnicy, ale ponieważ używałbym wielu klientów torrentowych, mogłoby to zużywać wiele zasobów serwerowych ...
Używam Debian Lenny.
Nie jestem pewien jak to zrobić ...
czy byłoby to w ogóle możliwe? Jestem wdzięczny za choćby częściowe rozwiązania tego ...
Odpowiedzi:
Możesz użyć polecenia kształtowania ruchu „tc”.
Daj każdemu ze znajomych inny port do użycia dla BitTorrenta. Oznacz pakiety TCP za pomocą iptables dla każdego portu.
Następnie użyj polecenia tc, aby ustawić maksymalną przepustowość i szybkość dla każdego użytkownika.
Pod koniec miesiąca możesz usunąć i dodać polecenia „tc”, aby zresetować liczniki.
Możesz monitorować użycie dla każdego użytkownika poprzez:
Jeśli korzystasz z instalacji brzegowej Debiana, bardzo łatwo jest kształtować ruch bez bałagania w iptables. Po prostu edytujesz tcdevices, tcclasses i tcrules w katalogu / etc / shorewall. Więcej informacji tutaj: http://www.shorewall.net/traffic_shaping.htm
Jak sugeruje druga osoba, oznaczanie pakietów według nazwy użytkownika jest prawdopodobnie lepsze niż według portu, w ten sposób porty można zmieniać bez aktualizacji iptables.
źródło
Możesz spróbować użyć
--quota
opcji w iptables, która pozwala ustawić limit transferu w bajtach. Ponieważ używasz wielu klientów torrent, każdy pod inną nazwą użytkownika, możesz połączyć to z--uid-owner
opcją, jak sugerowała Katriel.W ten sposób możesz egzekwować limit transferu w określonym przedziale czasowym (dzień / tydzień / miesiąc / itd.) Bez konieczności ograniczania prędkości pobierania użytkowników.
Aby utrwalić liczniki pakietów, należy je okresowo zapisywać (na przykład przez zadanie cron), aby można je było przywrócić na wypadek konieczności ponownego uruchomienia serwera lub opróżnienia reguł zapory.
źródło
Aby dodać powyższe pytanie.
Możesz użyć iptables z dopasowaniem użytkownika do pokolorowania pakietów w następujący sposób:
A następnie użyj „tc”, aby ograniczyć liczbę użytkowników.
źródło
W zależności od tego, ile miesięcznego ruchu chcesz dopuścić dla każdego użytkownika na miesiąc, możesz odpowiednio ustawić limit przepustowości, korzystając z niektórych narzędzi zasugerowanych przez innych użytkowników.
Załóżmy na przykład, że chcesz ustawić maksymalny limit pobierania wynoszący 250 GB / miesiąc . Teraz, jeśli podzielisz to przez liczbę godzin w miesiącu (~ 730), a następnie przez 3600, uzyskasz maksymalną prędkość pobierania, która w tym przykładzie wyniesie 100 KB / s .
Następnie, jeśli ustawisz maksymalną szybkość DL na 100 KB / s, automatycznie egzekwujesz limit pobierania 250 GB / miesiąc (zakładając oczywiście, że twój moduł do kształtowania ruchu działa poprawnie). Jeśli użytkownicy nie mogą pobierać szybciej niż 100 KB / s, nie będą mogli pobrać więcej niż 250 GB / miesiąc.
Aby ograniczyć szybkość pobierania, możesz użyć
tc
jednego z wymienionych narzędzi. Jeśli nie chcesz zajmować się bezpośredniotc
, możesz użyć cbq.init , który jest dość prosty w konfiguracji. Ten skrypt był obecny wshaper
pakiecie Debian Etch , ale wydaje się, że został później usunięty. W każdym razie jest to prosty skrypt, który można pobrać z SourceForge.Oczywiście to podejście może nie być przydatne w twoim przypadku (na przykład, jeśli chciałbyś, aby użytkownicy mogli pobierać z maksymalną dostępną prędkością, ale nadal egzekwować twój miesięczny limit, moja sugestia nie zadziałałaby).
źródło
wiem, że to jest stary post, ale nawet ja natknąłem się na niego, szukając dziś odpowiedzi i ostatecznie poskładałem coś, co działa idealnie dla mnie. Mam łącze wysyłające 25 Mb i łącze wysyłające 2,5 Mb, a 4 osoby i 5 serwerów dzielą się tym linkiem. z serwerami przepustowość łącza zwrotnego jest krytyczna, ale łącze zstępujące jest przydatne dla 4 osób, więc nikt tego nie zepsuje.
Używam centos 6.3 jako routera, ale te polecenia powinny działać na każdym systemie Linux. eth0 to moje łącze do dostawcy eth1 to moja sieć LAN za pomocą przełącznika 24-portowego i punktu dostępu Wi-Fi Ograniczam pobieranie do 5 z 25 Mb / s (około 500 KB / s) Ograniczam przesyłanie do 200 KB / s (około 25 KB / s)
następnie, aby ograniczyć użytkowników, używasz 2 linii iptables na użytkownika
aby ograniczyć przesyłanie:
ograniczyć pobieranie
wystarczy zmienić adres IP i porty eth, aby dopasować, kogo chcesz ograniczyć
źródło
Dla kompletności istnieje demon przestrzeni użytkownika o nazwie
trickle
. Można go użyć do ograniczenia przepustowości pojedynczego procesu. Użycie jest bardzo proste: np. W celu ograniczenia przepustowości używanej przez aptitude, możesz napisać:trickle -d 10 aptitude install wesnoth
Ponieważ jednak działa przy użyciu LD_PRELOAD, może być łatwo zastąpiony przez użytkownika z dostępem do powłoki.źródło
Spójrz na useripacct jądra plastra (to faktycznie ma dość długą historię ). W dokumentacji dla starej wersji wydaje się, że zapewnia ona także egzekwowanie limitów, a także monitorowanie, a także możliwe jest dostarczenie własnych skryptów zasad.
Biorąc pod uwagę, że twórcy useripacct musieli skorzystać z poprawki jądra, aby uzyskać pożądane zachowanie, wydaje się mało prawdopodobne, aby domyślnie dostępna była prostsza metoda. Jedyną alternatywą wydaje się być ograniczenie przepustowości (przez coś takiego jak tc lub trickle), jak sugeruje większość innych odpowiedzi tutaj (ale tak naprawdę nie to, czego szukasz), lub utworzenie maszyny wirtualnej dla każdego użytkownika (przy użyciu lekkiej wirtualizacji systemu operacyjnego) przez coś takiego jak OpenVZ ) i rozliczanie ruchu na maszynę wirtualną (co jest dość łatwe do oszacowania przez coś takiego jak vnstat ). Wygląda to na przesadę (nagle masz kilka maszyn wirtualnych do administrowania zamiast jednego systemu).
źródło