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  2006-08-08 14:36:28

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

HTB --> Problem z zaprojektowaniem regulek

Witam.
Przeczytałem kilka opisów HTB, wiem jak to dziala, ale nie moge wymyslic jak to rozegrać ww mojej sytuacji a mianowicie:
Mam łącze neo 512kbs, jest polaczone przez modem usb do serwera (interfejs ppp0)
Do serwera przez LAN'a (interfejs eth0)mam polaczone 2 kompy, z adresami IP pobieranymi z DHCP (mam wpisane mac'ki w dhcp, komp ma zawsze ten sam ip).
Na serwerze stoi serwer WWW, CVS i gry ET ;), teraz chcę uzyskać efekt:
1. Serwer gry ET ma  pirorytet wyższy na upload od www i cvs ale niższy od kompów w lanie, a jego maksymalny download ma wynosic max 128kbs
2. Łącze ma być podzielone dynamicznie między kompy (upload gw 64kbs, gw download 256kbs)
3. Nieużywane przez kompy lacze jest najpierw dawane serwerowi a co zostanie kompom w lanie
4. Po lanie nie ma byc limitow
5. Na pozostale uslugi serwera limit uploadu 64kbs, priorytet nizzszy od lana, download 64kbs tez nizszy od lana

Wie ktoś jakby można to było najoptymalniej rozwiązać??
Pozdrawiam.


[url=http://mhroczny.net][b]strona domowa[/b][/url] || [url=http://dug.net.pl][b]polski portal debiana[/b][/url]

Offline

 

#2  2006-08-09 12:50:39

  milyges - inż.

milyges
inż.
Skąd: Gorlice/Kraków
Zarejestrowany: 2006-04-09
Serwis

Re: HTB --> Problem z zaprojektowaniem regulek

Nikt nie pomógł więc stworzyłem takie cuś:

Kod:

#!/bin/sh
# HTB Configuration
# Konfiguracje podzele na 4 bloki:
# * Serwer - Download
# * Serwer - Upload
# * Komputery w LAN - Download
# * Komputery w LAN - Upload

# Tworzymy gl kolejke na eth0
tc qdisc del root dev eth0
tc qdisc add dev eth0 root handle 1:0 htb

# Tworzymy gl klase na interfejs eth0
tc class add dev eth0 parent 1:0 classid 1:1 htb rate 95000kbit ceil 95000kbit

# Tworzymy gl kolejke na ppp0
tc qdisc del root dev ppp0
tc qdisc add dev ppp0 root handle 1:0 htb default 4

# Tworzymy gl klase na interfejs ppp0
tc class add dev ppp0 parent 1:0 classid 1:1 htb rate 120kbit ceil 120kbit
#=============================================================
# BLOK 1: Serwer - download
# Nie wiem jak i czy sie da to zrobic :P
#=============================================================

#=============================================================
# BLOK 2: Serwer - upload
# Klasy dla poszczegolnych uslug :
tc class add dev ppp0 parent 1:1 classid 1:2 htb rate 60kbit ceil 120kbit prio 1 # Serwer ET
tc class add dev ppp0 parent 1:1 classid 1:3 htb rate 30kbit ceil 60kbit prio 2 # Apache (http i https)
tc class add dev ppp0 parent 1:1 classid 1:4 htb rate 30kbit ceil 32kbit prio 3 # Inne (FTP, CVS, POP3, etc.)

# Filtry: et i www
tc filter add dev ppp0 protocol ip parent 1:0 u32 match ip sport 27960 0xffff flowid 1:2
tc filter add dev ppp0 protocol ip parent 1:0 u32 match ip sport 80 0xffff flowid 1:3
tc filter add dev ppp0 protocol ip parent 1:0 u32 match ip sport 445 0xffff flowid 1:3

# "Sprawiedliwe kolejkowanie"
tc qdisc add dev ppp0 parent 1:2 handle 2:0 sfq perturb 10
tc qdisc add dev ppp0 parent 1:3 handle 3:0 sfq perturb 10
tc qdisc add dev ppp0 parent 1:4 handle 4:0 sfq perturb 10
#=============================================================

#=============================================================
# BLOK 3: Kompy w lanie - download
# klasa dla polaczen z INTERNET <--> LAN
tc class add dev eth0 parent 1:1 classid 1:2 htb rate 510kbit ceil 510kbit
# klasa dla polaczen LAN <--> Serwer
tc class add dev eth0 parent 1:1 classid 1:3 htb rate 94500kbit ceil 94500kbit

# Podklasy da poszczegolnych kompow
tc class add dev eth0 parent 1:2 classid 1:4 htb rate 240kbit ceil 510kbit # COLOSUS
tc class add dev eth0 parent 1:2 classid 1:5 htb rate 120kbit ceil 510kbit # LEVIATAN
tc class add dev eth0 parent 1:2 classid 1:6 htb rate 120kbit ceil 250kbit # JURCOKI
tc class add dev eth0 parent 1:2 classid 1:7 htb rate 20kbit ceil 120kbit # Others

# Filtrujemy wg zrodla pakietu, jezeli zrodlem jest serwer pakiet trafia do 1:3
tc filter add dev eth0 protocol ip preference 1 parent 1:0 u32 match ip src 10.0.0.1 flowid 1:3
tc filter add dev eth0 protocol ip preference 1 parent 1:0 u32 match ip dst 10.0.0.2 flowid 1:4
tc filter add dev eth0 protocol ip preference 1 parent 1:0 u32 match ip dst 10.0.0.3 flowid 1:5
tc filter add dev eth0 protocol ip preference 1 parent 1:0 u32 match ip dst 10.0.0.4 flowid 1:6

# "Sprawiedliwy" algorytm kolejkowania
tc qdisc add dev eth0 parent 1:3 handle 3:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:4 handle 4:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:5 handle 5:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:6 handle 6:0 sfq perturb 10
tc qdisc add dev eth0 parent 1:7 handle 7:0 sfq perturb 10
#=============================================================

#=============================================================
# Blok 4: Kompy w LAN'ie upload
# Klasy dla poszczegolnych kompow
tc class add dev ppp0 parent 1:1 classid 1:5 htb rate 50kbit ceil 120kbit prio 1 # COLOSUS
tc class add dev ppp0 parent 1:1 classid 1:6 htb rate 40kbit ceil 120kbit prio 1 # LEVIATAN
tc class add dev ppp0 parent 1:1 classid 1:7 htb rate 30kbit ceil 90kbit prio 2 # JURCOKI

# "Sprawiedliwe kolejkowanie"
tc qdisc add dev ppp0 parent 1:5 handle 5:0 sfq perturb 10
tc qdisc add dev ppp0 parent 1:6 handle 6:0 sfq perturb 10
tc qdisc add dev ppp0 parent 1:7 handle 7:0 sfq perturb 10

# Filtry dla kompow
tc filter add dev ppp0 protocol ip parent 1:0 handle 20 fw flowid 1:5 # COLOSUS
tc filter add dev ppp0 protocol ip parent 1:0 handle 21 fw flowid 1:6 # LEVIATAN
tc filter add dev ppp0 protocol ip parent 1:0 handle 22 fw flowid 1:7 # JURCOKI

# Nadajemy poszczegolnym pakietom znaczniki
iptables -t mangle -D POSTROUTING -o ppp0 -j MYOUT
iptables -t mangle -F MYOUT
iptables -t mangle -X MYOUT
iptables -t mangle -N MYOUT
iptables -t mangle -I POSTROUTING -o ppp0 -j MYOUT

iptables -t mangle -A MYOUT -p tcp -s 10.0.0.2 -j MARK --set-mark 20 # COLOSUS (tcp)
iptables -t mangle -A MYOUT -p udp -s 10.0.0.2 -j MARK --set-mark 20 # COLOSUS (udp)

iptables -t mangle -A MYOUT -p tcp -s 10.0.0.3 -j MARK --set-mark 21 # LEVIATAN (tcp)
iptables -t mangle -A MYOUT -p udp -s 10.0.0.3 -j MARK --set-mark 21 # LEVIATAN (udp)

iptables -t mangle -A MYOUT -p tcp -s 10.0.0.4 -j MARK --set-mark 22 # JURCOKI (tcp)
iptables -t mangle -A MYOUT -p udp -s 10.0.0.4 -j MARK --set-mark 23 # JURCOKI (udp)
#=============================================================

Prosze o sprawdzenie i ew. uwagi co do tego skryptu.

Między czasie zmienila sie konfiguracja sieci :)


[url=http://mhroczny.net][b]strona domowa[/b][/url] || [url=http://dug.net.pl][b]polski portal debiana[/b][/url]

Offline

 

#3  2006-08-11 20:22:23

  krolxxl - Użytkownik

krolxxl
Użytkownik
Zarejestrowany: 2006-08-09

Re: HTB --> Problem z zaprojektowaniem regulek

Witam.
Ja również mam problem z zaprojetowaniem regółek a dopisuje się do tego postu, gdyż problem jest podobny.
Dzielę łącze 256kb/s na dwa komputery. W serwerze mam trzy sieciówki:
eth0 -> do internetu
eth1 -> do pierwszego kompa
eth2 -> do drugiego kompa
ponieważ łącze dzielone jest na dwa kompy to nie ma większego problemu z dostępem do netu, ale żeby bardziej wykorzystać łącze postanowiłem uruchomić na serwerze klienta p2p. Wtedy to szybkość połączenia z internetem na pozostałych kompach drastycznie spadła.
Próbowałem stworzyć coś z regółek HTB, ale nie znalazłem nic, jak zrobić kolejki na dwa interfejsy z dodatkowym zmniejszaniem przepustowości dla usług na serwerze :(
Czy ktoś ma jakiś pomysł?
Pozdrawiam

Offline

 

#4  2006-08-12 08:24:13

  ayven - Użytkownik

ayven
Użytkownik
Skąd: z sieci ;-)
Zarejestrowany: 2006-06-21
Serwis

Re: HTB --> Problem z zaprojektowaniem regulek

A czemu masz oddzielną karte sieciową na każdego kompa?
w takim przypadku nie możesz zrobić np dynamicznego przyedzialania pasma do tych kompów.
radze wszystko podpiąć do jednej sieciówki.
W przypadku twojego rozwiązania możesz coś zrobić jedynie jedynie z uploadem np

Kod:

tc qdisc add dev $DEV root handle 1: htb default 2
tc class add dev $DEV parent 1: classid 1:1 htb rate 128kbit ceil 256kbit burst 6k prio 1 # to na ruch prio
tc class add dev $DEV parent 1: classid 1:2 htb rate 128kbit ceil 256kbit burst 6k prio 2 #to na reszte

tc filter add dev $DEV parent 1: protocol ip prio 10 u32 match ip protocol 1 0xff flowid 1:1 #pakiety icmp
tc filter add dev $DEV parent 1: protocol ip prio 10 u32 match ip tos 0x10 0xff flowid 1:1 #pakiety z nagłówkiem TOS 0x10
#kolejkowanie
tc qdisc add dev $DEV... itd

iptables -t mangle -A POSTROUTING -o $DEV  -p tcp --tcp-flags ACK ACK -m length --length :128 -j TOS --set-tos 0x10
iptables -t mangle -A POSTROUTING -o $DEV -p tcp --tcp-flags SYN SYN -m length --length :128 -j TOS --set-tos 0x10
iptables -t mangle -A POSTROUTING -o $DEV  -p udp -m length --length :128 -j TOS --set-tos 0x10

#=============================================================
# BLOK 1: Serwer - download
# Nie wiem jak i czy sie da to zrobic :P
#============================================================= [/quote]


tc qdisc add dev $dev handle ffff: ingress
tc filter add dev $dev parent ffff: protocol ip prio 10 u32 match ip dport 27960 0xffff police rate 128kbit burst 10k drop flowid :1
[/quote]
TYlko nie wiem za bardzo czy o to Ci dokładnie chodziło :P

POzdr

Offline

 

#5  2006-08-12 15:34:48

  krolxxl - Użytkownik

krolxxl
Użytkownik
Zarejestrowany: 2006-08-09

Re: HTB --> Problem z zaprojektowaniem regulek

Samo ograniczenie uploadu nie będzie rozwiązaniem, gdyż w momencie gdy klient p2p będzie coś ściągał to i tak reszta ma ograniczone łączę. Postanowiłem odgrzebać ze strychu jeszcze jednego starego kompa, dokupić switcha i zrobć coś takiego:

serwer
|
switch
| | |
| | `kompA
| `kompB
`klient p2p (jeżeli tylko do tego będzie służył to mam nadzieję że procek 100MHz i 64MB RAM wytrzyma)


przy czym dobrze by było, gdyby wszystkie kompy w sieci się widziały i możliwa była wymiana danych między nimi.
Na razie szukam w sieci pomocy do napisania skryptu kolejkowania, bo sam niestety sobie nie poradzę, więc z góry dziękuje za pomoc. Głównym celem jest zapewnienie internetu dwóm kompom A i B (zgodnie z wykresem), a klient p2p korzystał by z sieci dopiero wtedy, gdy byłaby nie wykorzystywana przez pozostałe komputery. Dodam jeszcze, że mój provider dostarcza mi łącze download 256 kb/s i upload 128kb/s ( tak mam na umowie chociaż trochę to mnie dziwi w momencie, gdy ktoś ściąga ode mnie z prędkością 20kB/s - czy ktoś może mi to wytłumaczyć? :) )
No ale wracając do problemu, na szczęście takie rozwiązanie było już wielokrotnie wałkowane i mam nadzieję, że nie będę musiał długo szukać.

pozdrawiam

Offline

 

Stopka forum

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

[ Generated in 0.007 seconds, 11 queries executed ]

Informacje debugowania

Time (s) Query
0.00010 SET CHARSET latin2
0.00004 SET NAMES latin2
0.00096 SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='18.117.158.10' WHERE u.id=1
0.00079 REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '18.117.158.10', 1732541234)
0.00037 SELECT * FROM punbb_online WHERE logged<1732540934
0.00038 SELECT topic_id FROM punbb_posts WHERE id=38503
0.00075 SELECT id FROM punbb_posts WHERE topic_id=4800 ORDER BY posted
0.00081 SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=4800 AND t.moved_to IS NULL
0.00006 SELECT search_for, replace_with FROM punbb_censoring
0.00079 SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=4800 ORDER BY p.id LIMIT 0,25
0.00079 UPDATE punbb_topics SET num_views=num_views+1 WHERE id=4800
Total query time: 0.00584 s