następująca sytuacja: Jesteśmy grupą studentów zarządzających połączeniem internetowym dla lokalnych domów studenckich, z łączną liczbą około 2000 użytkowników końcowych.
Mamy system punktów ruchu, każdy MB pobiera lub przesyła punkty kosztów, nowe punkty są dodawane z godziny na godzinę. W tej chwili blokujemy dostęp użytkownika do Internetu, gdy on wyda wszystkie swoje punkty (umieszczając go w polityce ODRZUCENIA w iptables na naszym routerze bramy Debiana).
Chcielibyśmy jedynie ograniczyć przepustowość użytkownika. Jak najlepiej to zrobić?
Prostą odpowiedzią byłoby ustawienie ograniczenia prędkości na porcie przełącznika użytkownika (głównie Cisco Catalyst 3550s). Jest to jednak niepożądane, ponieważ ruch wewnątrz naszej sieci i do sieci uniwersytetów powinien pozostać nieograniczony. Czy istnieje sposób ograniczenia przepustowości tylko dla pakietów z określonym miejscem docelowym lub źródłowym zakresem adresów IP (zarówno wejścia, jak i wejścia) w systemie Cisco IOS? Nic nie mogłem znaleźć.
Innym sposobem byłoby kontrolowanie ruchu na naszym routerze bramkowym. Przychodzi mi na myśl kilka rozwiązań:
tc lub tcng - wygląda na to, że oba mają dość tajemniczą składnię i żadna z nich nie oferuje dobrych funkcji do kontroli ruchu według IP. Dedykowana funkcja QDisc dla tak wielu osób prawdopodobnie znacznie spowolniłaby router. Co więcej, dokumentacja obu jest dość nieaktualna.
shorewall - wydaje się, że ma dość zgrabną składnię dla konfiguracji, jednak nie jestem pewien, czy poradzi sobie z taką ilością ruchu i użytkowników i czy nadaje się do ograniczania ruchu na IP
pfSense - wygląda jak system operacyjny przeznaczony do takich celów jak nasz. Wymagałoby to jednak od nas całkowitej ponownej instalacji routera bramy. Nie mamy innych systemów BSD, a pfSense musiałby mieć bardzo dobre możliwości rozliczania ruchu (obecnie używamy tam również programów fprobe-ulog i ulog-acctd).
Jakie masz wrażenia? Które rozwiązanie odpowiada naszym potrzebom i które można najłatwiej utrzymać? Czy masz inne pomysły?
Jeśli potrzebujesz dodatkowych informacji na temat naszego systemu, nie wahaj się zapytać.
Z góry dziękuję.
EDYCJA : Wdrożyłem system za pomocą iptables
i tc
.
Każdy użytkownik ma podsieć / 28, adres IP VPN (oba od 10.0.0.0/8) i zewnętrzny adres IP, wszyscy są sterowani przez jeden łańcuch iptables. Ten łańcuch ma tylko jedną zasadę, prostą RETURN
.
Co pięć minut skrypt w języku Python odczytuje liczniki bajtów tych reguł. Resetuje liczniki i aktualizuje konto punktu ruchu użytkownika w naszej bazie danych PostgreSQL.
Jeśli saldo punktów użytkownika spadnie poniżej pewnego progu, dla tego użytkownika tworzone są dwie klasy tc (jedna dla przychodzącej, jedna dla interfejsu wychodzącego na naszym routerze bramkowym), adresy IP są wprowadzane do filtrów tc należących do tych klas. Klasy są ograniczone przez HTB.
W porównaniu do poprzedniego systemu z fprobe-ulog
i ulog-acctd
jest to znacznie szybsze, ponieważ liczenie bajtów jest wykonywane przez iptables.
Szybkość sieci znacznie się poprawiła dla naszych użytkowników.
źródło
dummynet jest moim zdaniem bardzo dobrą sugestią. Ale jestem pewien, że iptables są w stanie kształtować ruch , więc możesz to zrobić na swoim debianie.
źródło
tc powinno działać dobrze. Uważam, że chcesz zmienić obecne reguły iptables, aby oznaczyć ruch zamiast ODRZUCAĆ, wtedy możesz użyć niewielkiej liczby reguł tc, aby zastosować kształtowanie ruchu do tych oznaczonych przepływów.
zobacz także ipset do zarządzania listą użytkowników z ograniczoną przepustowością http://ipset.netfilter.org/
źródło
Trafficpanel wydaje się rozwiązaniem. Wśród innych funkcji:
Właściwie nigdy nie próbowałem tego, ale wygląda dobrze.
źródło