Iptables regułka - dynamiczny podział pasma
: 25 maja 2010, 16:43
Witajcie.
Na jednym z serwerów mam spore pobieranie (obrazy iso płyt). Niestety niektórzy użytkownicy używający różnych akceleratorów pobierania plików potrafią tak zapchać łącze, że dla innych ledwo starcza. Czy da się to jakoś dynamicznie i sprawiedliwie podzielić? Łącze do serwera to 8Mbit. Od razu mówię, że limitowanie ruchu na sztywno nie wchodzi w grę. Wiem jak to zrobić we FreeBSD za pomocą ipfw+dummynet, ale zmiana systemu będzie uciążliwa.
We FreeBSD regułki wyglądałyby następująco:
Ta reguła wydaje mi się, że jest łatwa do rozszyfrowania, ale na wszelki wypadek wyjaśniam. Szerokość ,,pipe'' jest ustawiona na 8MB bo takie jest tam łącze symetryczne. Przy takiej konfiguracji każdemu użytkownikowi zostanie dynamicznie przydzielone takie samo pasmo z/do serwera, czyli np.:[INDENT]- jeśli dwóch będzie użytkowników ściągało jednocześnie to każdy dostanie po 4M łącza
- jeśli dwóch będzie użytkowników ściągało jednocześnie ale jeden z nich otworzy kilka sesji jednoczesnego pobierania (np. takie windowsowe programy typu flashget co dzielą plik na części i otwierają wiele sesji na raz) to i tak każdy dostanie po 4MB
- przy 4 użytkowników jednoczesnych podzieli to się samo równo po 2MB na głowę bez względu na liczbę otwartych połączeń.[/INDENT]
Da się coś takiego w Linuksie uzyskać w podobnie prosty sposób?
Z góry dziękuje. Pozdrawiam.
Na jednym z serwerów mam spore pobieranie (obrazy iso płyt). Niestety niektórzy użytkownicy używający różnych akceleratorów pobierania plików potrafią tak zapchać łącze, że dla innych ledwo starcza. Czy da się to jakoś dynamicznie i sprawiedliwie podzielić? Łącze do serwera to 8Mbit. Od razu mówię, że limitowanie ruchu na sztywno nie wchodzi w grę. Wiem jak to zrobić we FreeBSD za pomocą ipfw+dummynet, ale zmiana systemu będzie uciążliwa.
We FreeBSD regułki wyglądałyby następująco:
Kod: Zaznacz cały
ipfw add pipe 1 tcp fron any to 10.0.0.1 80
ipfw queue 1 config weight 5 pipe 2 mask src-ip 0xffffffff
ipfw pipe 1 config 8Mbit/s
- jeśli dwóch będzie użytkowników ściągało jednocześnie ale jeden z nich otworzy kilka sesji jednoczesnego pobierania (np. takie windowsowe programy typu flashget co dzielą plik na części i otwierają wiele sesji na raz) to i tak każdy dostanie po 4MB
- przy 4 użytkowników jednoczesnych podzieli to się samo równo po 2MB na głowę bez względu na liczbę otwartych połączeń.[/INDENT]
Da się coś takiego w Linuksie uzyskać w podobnie prosty sposób?
Z góry dziękuje. Pozdrawiam.