Skocz do zawartości
bryn1u

Iptables regulka - dynamiczny podzial pasma.

Polecane posty

Na jednym z serwerów mam spory download (obrazy iso płyt). Niestety niektórzy userzy 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:

 

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

 

Ta reguła wydaje mi się że jest łatwa do rozszyfrowania, ale na wszelki wypadek wyjaśniam. Szerokość pipe’a jest ustawiona na 8M bo takie jest tam łącze symetryczne. Przy takiej konfiguracji każdemu użytkownikowi zostanie dynamicznie przydzielone takie samo pasmo z/do serwera, czyli np.

- 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 4M

- przy 4 użytkowników jednoczesnych podzieli to się samo równo po 2 M na głowę bez względu na liczbę otwartych połączeń.

 

Da się coś takiego w linuksie uzyskać w podobnie prosty sposób?

 

Z gory dziękuje. Pozdrawiam.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Na jednym z serwerów mam spory download (obrazy iso płyt). Niestety niektórzy userzy 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

 

Lepiej ogranicz ilość połączeń per klient.

Ewentualnie jeśli masz nginx to możesz skorzystać z opcji limit_rate.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Lepiej ogranicz ilość połączeń per klient.

Do ilu żeby było sensownie, do 4, 20 czy 50? Nic mu to nie da w jego przypadku, znajdzie się kilku z "flashgetami" i zapchają mu momentalnie łącze.

Ewentualnie jeśli masz nginx to możesz skorzystać z opcji limit_rate.

Czy limit_rate nie ustawi mu na sztywno prędkości wysyłania? To nie będzie dynamiczny przydział.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Chodzi mi o sama metode. Czy jest podobne rozwiazanie jak w przypadku freebsd wklepacaz pare linijek ? Czy poprostu trzeba jajko kompilowac ?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Do ilu żeby było sensownie, do 4, 20 czy 50? Nic mu to nie da w jego przypadku, znajdzie się kilku z "flashgetami" i zapchają mu momentalnie łącze.

Czy limit_rate nie ustawi mu na sztywno prędkości wysyłania? To nie będzie dynamiczny przydział.

 

Sensownie to do 1 połączenia :lol: Jest problem, ponieważ to jest per ip. Jak będą lecieć z natu to wytnie pozostałych.

A limit rate określa max prędkość per klient.

 

Aczkolwiek masz racje, to nie jest dynamiczny podział.

 

Na linuksie najłatwiej będzie to zrobić tak:

Kolejki HTB wraz z SFQ, markowanie selektorem u32 i będzie cacy.

 

W sumie to kilka poleceń, ale nie robiłem tego wieki i gdzieś pogubiłem moje magiczne skrypty.

Przeczytaj LARTC, rozdział 9 i klikniesz to przed śniadaniem.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×