Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!

Ogłoszenie

Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.

#1  2010-05-25 16:30:40

  bryn1u - Użytkownik

bryn1u
Użytkownik
Zarejestrowany: 2009-04-17

iptables regulka - dynamiczny podzial pasma

Witajcie

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.

Ostatnio edytowany przez bryn1u (2010-05-25 16:32:16)


E-Booki: FreeBSD, OpenBSD, Linux, Hacking, PHP, Catia, Perl_CGI, Mysql ...
http://unix-ebooki.neth.pl/

Offline

 

#2  2010-05-25 16:49:21

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: iptables regulka - dynamiczny podzial pasma

Zainstaluj iproute - i poszukaj o kształtowaniu i zarządzaniu pasmem przy pomocy narzędzia tc.

Tu masz wyjaśnienie:  http://marcin.przybytek.net/download/2.4routing.pdf

Na forum też jest trochę przykładów.

Natomiast jeśli masz to postawione na apachu - to (o ilę pamiętam) jest do niego (chyba nie obejdzie się bez kompilacji) moduł load-balancing.
Jest też w repo moduł libapache2-mod-bw - który  też jest od tego (w jakimś zakresie)

To by było na tyle.
;)

Ostatnio edytowany przez Jacekalex (2010-05-25 17:00:27)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#3  2010-05-25 19:25:17

  bryn1u - Użytkownik

bryn1u
Użytkownik
Zarejestrowany: 2009-04-17

Re: iptables regulka - dynamiczny podzial pasma

Dzięki, ale to co podałeś nie do końca spełnia moje oczekiwania. Pogooglałem i znalazłem port dummynetu do linuksa. http://lists.freebsd.org/pipermail/freebsd-ipfw/2009-June/003916.html

No wlasnie. Kompilacje mnie przeraza. ( I hate it)


E-Booki: FreeBSD, OpenBSD, Linux, Hacking, PHP, Catia, Perl_CGI, Mysql ...
http://unix-ebooki.neth.pl/

Offline

 

#4  2010-05-25 22:18:31

  Jacekalex - Podobno człowiek...;)

Jacekalex
Podobno człowiek...;)
Skąd: /dev/random
Zarejestrowany: 2008-01-07

Re: iptables regulka - dynamiczny podzial pasma

Dlaczego niezupełnie?

Tworzysz kolejkę na interfejsie eth0, dajesz jej moduł sfq (:~$ modinfo sch_sfq), (sprawiedliwego podziału pasma) lub rozszerzoną wersję - esfq (wymaga kompilacji kernela i iproute) i po sprawie.

Przykładowo w domu (do imq) mam tak zrobione kolejki:

Kod:

echo "# upload"
IF1='eth0'
$tc qdisc del root dev $IF1 2> /dev/null
$tc qdisc add dev $IF1 root handle 1:0 htb default 70 r2q 1 #[b]potrzebujesz tylko kolejki głównej[/b]
#kolejki dzielące pasmo (tutaj wyłącznie priorytet kolejek) - priorytety dla poszczególnych protokołów sieciowych (u mnie layer7) u Ciebie niekonieczne.
$tc class add dev $IF1 parent 1:0 classid 1:10 htb rate $UP ceil $UP prio 1
$tc class add dev $IF1 parent 1:0 classid 1:20 htb rate $UP ceil $UP prio 2
$tc class add dev $IF1 parent 1:0 classid 1:20 htb rate $UP ceil $UP prio 3
$tc class add dev $IF1 parent 1:0 classid 1:40 htb rate $UP ceil $UP prio 4
$tc class add dev $IF1 parent 1:0 classid 1:50 htb rate $UP ceil $UP prio 5
$tc class add dev $IF1 parent 1:0 classid 1:60 htb rate $UP ceil $UP prio 6
$tc class add dev $IF1 parent 1:0 classid 1:70 htb rate $UP ceil $UP prio 7
echo "# upload - filtry"  FIltry raczej nie będa Ci potrzebne (chyba, że do oznaczenia pakietów z serwera www) - oznaczysz łatwo, używając modułu owner do iptables.
$tc filter add dev $IF1 parent 1:0 protocol ip handle 10 fw classid 1:10
$tc filter add dev $IF1 parent 1:0 protocol ip handle 20 fw classid 1:20
$tc filter add dev $IF1 parent 1:0 protocol ip handle 30 fw classid 1:30
$tc filter add dev $IF1 parent 1:0 protocol ip handle 40 fw classid 1:40
$tc filter add dev $IF1 parent 1:0 protocol ip handle 50 fw classid 1:60
$tc filter add dev $IF1 parent 1:0 protocol ip handle 60 fw classid 1:60
$tc filter add dev $IF1 parent 1:0 protocol ip handle 70 fw classid 1:70
echo "# upload - SFQ" - SFQ - zasada sprawiedliwego podziału pasma - to powinno załatwić sprawę.
#algorytm mieszający rozdziela pasmo równomiernie na poszczególne aktywne połączenia.
$tc qdisc add dev $IF1 parent 1:10 handle 10:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:20 handle 20:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:30 handle 10:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:40 handle 40:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:50 handle 50:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:60 handle 60:0 sfq perturb 10
$tc qdisc add dev $IF1 parent 1:70 handle 70:0 sfq perturb 10

Radzę spróbować

To by było na tyle.

Ostatnio edytowany przez Jacekalex (2010-05-25 22:25:41)


W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem  para bellum  ;)       |       Pozdrawiam :)

Offline

 

#5  2010-05-26 14:32:29

  bryn1u - Użytkownik

bryn1u
Użytkownik
Zarejestrowany: 2009-04-17

Re: iptables regulka - dynamiczny podzial pasma

Dzieki wielkie. Jeszcze jedno pytanie. Czy koniecznie musze stosowac imq bo tego nie mam w produkcyjnym kernelu i nie bardzo moge w nim grzebac bo wtedy trace support. Nie ma jakiegos rozwiazania out of the box.

Z gory dziekuje. Pozdrawiam.


E-Booki: FreeBSD, OpenBSD, Linux, Hacking, PHP, Catia, Perl_CGI, Mysql ...
http://unix-ebooki.neth.pl/

Offline

 

#6  2010-05-26 14:41:06

  tomii - Członek DUG

tomii
Członek DUG
Zarejestrowany: 2007-12-01

Re: iptables regulka - dynamiczny podzial pasma

Jeżeli problem dotyczy tylko ruchu wychodzącego to imq nie jest ci potrzebne.

Offline

 

Stopka forum

Powered by PunBB
© Copyright 2002–2005 Rickard Andersson
To nie jest tylko forum, to nasza mała ojczyzna ;-)