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!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Mam pytanie.
Naczytałem się już sporo QoS, użyciu htb i innych cudów, w związku z tym pytanie.
Mam komputer podłączony bezpośrednio do internetu - bez routera - na którym mógłbym wrzucić tomato i po sprawie.
Jak zrealizować dynamiczny podział łącza - w taki sposób - aby torrenty i pobieranie dużych plików wgetem nie blokowało Skype i SIPu.
Chodzi o to - aby np. torrent pobierał z pełną prędkością łącza, natomiast zwalniał miejsce dla Skype - kiedy ktoś zadzwoni.
Co się tyczy rozpoznania poszczególnych protokołow transmisji - łata layer7 załatwia sprawę dośc dobrze na etapie selekcji protokołów.
Czy przydzielanie priorytetów i dzielenia pasmem w takim przypadku można załatwić przy pomocy htb - czy trzeba do tego imq lub innych łat/programów.
Natomiast kombinowanie z łatą imq ma jeden drobny problem - ja mam kernele 2.6.28.9 i 2.6.29.1,
natomiast najwyższa numeracja łaty imq na oficjalnej stronie -to 2.6.26
Ewentualnie czy ktoś może polecić jakieś dobre Howto na ten temat.
Bo odnoszę wrażenie - że im więcej czytam - tym mniej wiem na ten temat.
Pozdrawiam
Offline
Bez ifb/imq, jeśli chcesz używać HTB, będziesz mógł kształtować tylko ruch wychodzący. Gdzieś tu na forum znajdziesz linka do nowszego imq - albo na samej liście mailingowej imq.
A tutaj kilka ciekawych linków:
http://luxik.cdi.cz/~devik/qos/htb/manual/userg.htm
http://www.tldp.org/HOWTO/html_single/Traffic-Control-HOWTO/
http://www.docum.org/docum.org/faq/cache/
Poza tym:
http://linio.terramail.pl/htb.html - chyba najlepsze na początek.
Ostatnio edytowany przez urug (2009-04-25 16:08:07)
Offline
Dwie części już gotowe - w jaju i w iptables działa już layer7 i imq.
Pozostaje jedno pytanie: jaka komenda iptables (chodzi mi o składnię) przekieruje w obrębie jednego desktopa ruch wychodzący z interfejsu eth0) na imq0 ?
Bo na razie mam coś takiego:
:~# iptables -A OUTPUT -m layer7 --l7proto sip -j IMQ --todev 0 iptables: Invalid argument
Natomiast layer 7 działa prawidłowo:
root@localhost:~# iptables -A OUTPUT -m layer7 --l7proto jabber -j ACCEPT root@localhost:~# iptables -A OUTPUT -m layer7 --l7proto skypeout -j ACCEPT root@localhost:~# iptables -A OUTPUT -m layer7 --l7proto skypetoskype -j ACCEPT root@localhost:~#
namiast interfejsy imq są podniesione:
:~$ ifconfig imq0 imq0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16000 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:11000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B) :~$ ifconfig imq1 imq1 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 NOARP MTU:16000 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:11000 RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Jednym słowem - jak skutecznie przekierowac ruch z eth0 na imq0?
Pozdrawiam
Ostatnio edytowany przez Jacekalex (2009-04-25 23:56:24)
Offline
Offline
Dzięki za link - już wcześniej to widziałem -jednak wszędzie widzę przykłady dla kompa - który działa jako router:
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0
Natomiast cały dzień kopię po google i nie znalazłem żadnego info - jaka to zrobić w obrębie desktopa, czyli zamienić interfejs wyjściowy dla pakietu - który spełnia warunek L7proto.
Przupuszczam - że chodzi o reguły FORWARD, ale nic mi z tego nie wychodzi (nic działającego).
Natomiast tworzenie łańcucha MANGLE w obrębie jednego komputera? - czy to będzie działać?
Natomiast komenda
route add default imq0
- w ten sposób nie osiągnę kolejkowania przez L7.
To musi być przekierowanie na firewallu - tyko jak?
Nawiasem mówiąc - reguła
:~# iptables -A OUTPUT -m layer7 --l7proto sip -j IMQ --todev 0
- powinna działać - a wywala błąd.
Czy reguła IMQ --to-dev 0 działa tylko w łańcuchu PREROUTING?
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0
- ta reguła wchodzi bez błędu - ale nie odnosi się do mojego przypadku.
Dzięki i Pozdrawiam
Ostatnio edytowany przez Jacekalex (2009-04-26 00:13:07)
Offline
Jeśli chcesz kształtować ruch wychodzący, to nie potrzebujesz imq.
Przeważnie się to robi tak, że zakładasz na swoim rzeczywistym interfejsie (bądz na imq) qdisc htb. Nastepnie w jej obrębie tworzysz klasy o różnych priorytetach i o różnej przepustowości - i do nich w zależności od potrzeb kierujesz pakiety.
Taki prosty przykład dla Ciebie:
smigacz:/home/urug/Desktop# tc qdisc add dev wlan0 root handle 1:0 htb smigacz:/home/urug/Desktop# tc class add dev wlan0 parent 1:0 classid 1:2 htb rate 15kbit ceil 15kbit smigacz:/home/urug/Desktop# iptables -t mangle -I POSTROUTING -o wlan0 -p TCP --sport 80 --j CLASSIFY --set-class 1:2
urug@belial:~$ wget http://smigacz.pol/test.txt --2009-04-26 00:27:21-- http://smigacz.pol/test.txt Resolving smigacz.pol... 192.168.1.26 Connecting to smigacz.pol|192.168.1.26|:80... connected. HTTP request sent, awaiting response... 200 Ok Length: 54509568 (52M) [text/plain] Saving to: `test.txt' 0% [ ] 11.584 2,24K/s eta 6h 36m
Offline
Wiem - z tą różnicą że htb działa przy wysyłaniu z interfejsu - w połączeniu z imq - osługuje download ( w mim przypadku dane - które "maszerują" do komputera -chyba raczej nie idą trasą routingu - aby działały przy regułach PREROUTING i POSTROUTING.
Wykonałem taką próbę:
tc qdisc add dev eth0 root handle 1:0 htb tc class add dev eth0 parent 1:0 classid 1:2 htb rate 15kbit ceil 15kbit iptables -t mangle -I POSTROUTING -o eth0 -m layer7 --l7proto b bittorrent --j CLASSIFY --set-class 1:2
Wszystkie komendy działają prawidłowo - wchodzą bez błędu.
Gdyby działały - pobieranie przez deluge musiało by wynosić 15 kbitów.
Natomiast program od razu wskakuje na prędkość pobierania 2 Mbity - i błokuje całę łącze - zupełnie - jakby te reguły jego nie dotyczyły.
Pozdrawiam
Ostatnio edytowany przez Jacekalex (2009-04-26 01:02:51)
Offline
Bo te regułki ograniczają tylko wyjście. Musisz wszystko co do Ciebie przychodzi przekierować na IMQ (PREROUTING) i na samym imq dokonywać kształtowania ruchu.
Offline
W zasadzie tak - należy jednak pamiętać - ze do lokalnego komputera mają (w iptables) zastosowanie reguły z łańcuchów INPUT, OUTPUT i FORWARD, natomiast PREROUTING i POSTROUTING działają w łańcuchach NAT i MANGLE, które dotycza funkcji routera - czyli udostepniania połączenia innym maszynom zarówno bez translacji adresów (mangle) jak i z translacją (NAT).
I w związku z tym - czy to wykonalne w łancuchu INPUT zmieścić przekierowanie z eth0o na imq0.
Ponieważ działania PREROUTING i POSTROUTING dotyczą routingu - którego w obrębie jednego desktopa nie ma.
NIe znam sposobu - aby komputer sam sobie internet udostępniał - chyba żeby kombinować z trzema kartami sieciowymi - czyli ustawić np. routing między eth1 i eth2, natomiast eth0 przez który ma łącznosć desktop -podłączyć do eth2. W ten sposób komputer myślałby że korzysta z eth0 - natomiast internet dochodziłby do eth1 -z tamtąd był routowany na eth2 i udostępniany temu samemu komputerowi przez eth0.
Wtedy działały by reguły routingu dla hosta (byłby sam dla siebie routerem).
Ale czy jest inne wyjście?
Bo taka gimnastyka wygląda komicznie.
Nawiasem mówiąc - kiedyś szukałem sposobu - aby przekierować przez firewall cały ruch na transparentny proxy nasłuchujący na adresie 127.0.0.1:8011 - z marnym skutkiem.
Pozdrawiam
Ostatnio edytowany przez Jacekalex (2009-04-26 15:15:08)
Offline
Nie chcę się z nikim kłócić - lecz przedstawić problem - który zaczyna wyglądać komicznie:
IMQ pozwala na przekierowanie do interfejsu imq0 tylko w regułach w regułach- w tablicach MANGLE lub NAT - które dotyczą routingu - udostępniania dostępu do sieci zewnętrznej innym maszynom jako router.
NAtomiast nie pozwala na przekierowanie ruchu przychodzącego i wychodzącego dpo lokalnej maszyny - poniewaz (co sprawdziłem), nie działa w regułach iptables -dotyczących łańcuchów INPUT i OUTPUT.
Ta reguła wchodzi poprawnie - ale nie ma zastosowania do ruchu do desktopa:
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 0
natomiast ta reguła:
~# iptables -I INPUT -i eth0 -j IMQ --to-dev 0 iptables v1.4.1.1: Unknown arg `--to-dev' Try `iptables -h' or 'iptables --help' for more information.
- nie działa - co widać na załączonym przykładzie.
A bez przekierowania przychodzącego ruchu na imq0 - żadne kolejkowanie ruchu nie zadziała.
I nie wiem - jak ten problem rozwiązać - tu jest pies pogrzebany.
I nie chodzi tu o żadne kłótnie - wręcz przeciwnie - Bardzo Dziękuję za pomoc.
Ale ten malutki szczegół jeszcze przede mną.
Jeszcze raz Dzięki i Pozdrawiam.
Offline
Jacekalex napisał(-a):
IMQ pozwala na przekierowanie do interfejsu imq0 tylko w regułach w regułach- w tablicach MANGLE lub NAT - które dotyczą routingu - udostępniania dostępu do sieci zewnętrznej innym maszynom jako router.
nieprawda! - lancuch PREROUTING tablicy MANGLE dziala bez zarzutow w stsounku co do lokalnego ruchu - daj sobie:
iptables -A PREROUTING -t mangle -j LOG --log-level debug --log-prefix "IN: "
pokorzystaj chwile z netu i zobacz co masz w dmesg
polecam dokladne poprzygladanie sie http://xkr47.outerspace.dyndns.org/netfilter/packet_flow/ i zastanownienie sie jak to wyglada gdy jest jedna karta ...
Offline
Witam
Dzięki za bezcenne informacje bez Waszej pomocy bym nigdy z miejsca nie ruszył.
Rzeczywiście prerouting na lokalnej maszynie działa.
Natomiast nie mam pojęcia - jak rozwiązać kolejny problem - mam nadzieję że ostatni.
Otóż zmontowałem skrypt do kolejkowania pakietów - który wszystkie przychodzące pakiety przkierowuje do imq0, natomiast ruch wychodzący ma dalej iśc przez eth0.
Routing w komputerze jest ustwiony na eth0.
Przypuszczam - że ustawiena firewalla nie pozwalają na powrót pakietu przez imq0 - jeśli wychodzący idzie przez eth0.
Skrypt na razie wygląda tak (powinnien obsługiwać już ruch przychodzący) - natomiast internetu ani śladu.
Po uruchomieniu cały ruch internetowy jest zablokowany - pomimo że nie sypie błędami.
Spróbuję go poprawić i dokończyć -jeśli Ktoś ma jakieś sugestie lub spostrzeżenia -są mile widziane.
#!/bin/bash echo " Uruchamiam firewalla............................................." modprobe imq numdevs=1 echo "# ignorowanie ICMP echo request wysylanych na adres rozgloszeniowy" echo "1" > /proc/sys/net/ipv4/icmp_echo_ignore_broadcasts echo "128" >> /proc/sys/net/ipv4/ip_default_ttl echo "# ochrona przed SYN flood" echo "1" > /proc/sys/net/ipv4/tcp_syncookies echo "# refuse source routed packets" echo "0" > /proc/sys/net/ipv4/conf/all/accept_source_route echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter echo "# logowanie pakietow z nieprawidlowych adresow " echo "1"> /proc/sys/net/ipv4/conf/all/log_martians echo "# Konfigurowanie zapory..................................................." echo "# Czyszczenie tablic......................................................" echo "1" > /proc/sys/net/ipv4/conf/all/secure_redirects echo "128" >> /proc/sys/net/ipv4/ip_default_ttl echo "# lista protokołów l7 - http://l7-filter.sourceforge.net/protocols" iptables -F iptables -X iptables -t nat -X iptables -t nat -F iptables -P INPUT DROP iptables -P FORWARD DROP iptables -P OUTPUT ACCEPT iptables -I INPUT -i lo -j ACCEPT iptables -I INPUT -i imq0 -j ACCEPT iptables -I OUTPUT -o lo -j ACCEPT iptables -I FORWARD -o lo -j ACCEPT iptables -I INPUT -p icmp -m state --state ESTABLISHED,RELATED -j ACCEPT iptables -I FORWARD -j ACCEPT -m state --state ESTABLISHED,RELATED iptables -I INPUT -p udp -f -i ! lo -j DROP echo "# pakiety z nieporzadanych adresow" iptables -t mangle -A PREROUTING -s 10.0.0.0/8 -j DROP # klasa A iptables -t mangle -A PREROUTING -s 172.16.0.0/12 -j DROP # klasa B iptables -t mangle -A PREROUTING -s 192.168.0.0/16 -j DROP # klasa C iptables -t mangle -A PREROUTING -s 224.0.0.0/4 -j DROP # multicast iptables -t mangle -A PREROUTING -s 224.0.0.0/4 -j DROP # multicast iptables -t mangle -A PREROUTING -s 240.0.0.0/5 -j DROP # reserved echo "# OpenDNS" iptables -t mangle -A PREROUTING -p tcp -s 208.67.220.220 -j MARK --set-mark 10 iptables -t mangle -A PREROUTING -p tcp -s 208.67.222.222 -j MARK --set-mark 10 echo "# skype" iptables -t mangle -A PREROUTING -m layer7 --l7proto skypetoskype -j MARK --set-mark 11 iptables -t mangle -A PREROUTING -m layer7 --l7proto skypeout -j MARK --set-mark 11 echo "# Voip" iptables -t mangle -A PREROUTING -m layer7 --l7proto sip -j MARK --set-mark 11 iptables -t mangle -A PREROUTING -m layer7 --l7proto h323 -j MARK --set-mark 11 echo "# tlenofon i poczta o2.pl - jeśli protokól iax" # iptables -A PREROUTING -t mangle -m iprange --src-range 193.17.41.0-193.17.41.255 -j MARK --set-mark 11 echo "# jabber" iptables -t mangle -A PREROUTING -m layer7 --l7proto jabber -j MARK --set-mark 12 # iptables -t mangle -A PREROUTING -s 91.197.12.0-91.197.15.255 -j DROP # klasa B echo "# gadu" iptables -A PREROUTING -t mangle -m iprange --src-range 91.197.12.0-91.197.15.255 -j MARK --set-mark 12 echo "# http" iptables -t mangle -A PREROUTING -p tcp --sport http -j MARK --set-mark 14 iptables -t mangle -A PREROUTING -p tcp --sport https -j MARK --set-mark 14 iptables -t mangle -A PREROUTING -m layer7 --l7proto shoutcast -j MARK --set-mark 14 iptables -t mangle -A PREROUTING -m layer7 --l7proto quicktime -j MARK --set-mark 14 echo "###### poczta" echo "# gmail" iptables -t mangle -A PREROUTING -s 72.14.192.0/18 -j MARK --set-mark 16 iptables -t mangle -A PREROUTING -s 216.239.32.0/19 -j MARK --set-mark 16 echo "# interia" iptables -A PREROUTING -t mangle -m iprange --src-range 217.74.64.0-217.74.67.255 -j MARK --set-mark 16 echo "# poczta.o2.pl" iptables -A PREROUTING -t mangle -p tcp --sport pop3s -m iprange --src-range 193.17.41.0-193.17.41.255 -j MARK --set-mark 16 iptables -A PREROUTING -t mangle -p tcp --sport ssmtp -m iprange --src-range 193.17.41.0-193.17.41.255 -j MARK --set-mark 16 echo "# ftp" iptables -t mangle -A PREROUTING -p tcp --sport 20 -j MARK --set-mark 17 iptables -t mangle -A PREROUTING -p tcp --sport 21 -j MARK --set-mark 17 iptables -t mangle -A PREROUTING -m layer7 --l7proto ftp -j MARK --set-mark 17 echo "# bittorrent" iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 27 echo "# Inne protokoły - nie wymienione wyżej:" iptables -t mangle -A PREROUTING -j MARK --set-mark 20 ############################################################################################################# echo "#Przekierowanie do imq0" iptables -t mangle -A PREROUTING -i eth0 -m state --state ESTABLISHED,RELATED -j IMQ --todev 0 # tu chyba jest błąd - wydaje mi się - że pakiet nie może wracać innym interfejsem # - niż wyszedł - nie wiem - jak to obejsć. echo "# Ukrywanie firewalla" iptables -A INPUT -p tcp -i eth0 -m state --state NEW -j REJECT --reject-with tcp-reset iptables -A INPUT -p udp -i eth0 -m state --state NEW -j REJECT --reject-with icmp-host-unreachable iptables -A INPUT -p tcp -i eth1 -m state --state NEW -j REJECT --reject-with tcp-reset iptables -A INPUT -p udp -i eth1 -m state --state NEW -j REJECT --reject-with icmp-host-unreachable echo "# Konfiguracja reguł gotowa.................................................." echo "# Tworzenie kolejkę dla pakietów przychodzących................" tc qdisc add dev imq0 root handle 1: htb default 17 tc filter add dev imq0 parent 1:0 protocol ip prio 1 handle 10 fw classid 1:10 tc filter add dev imq0 parent 1:0 protocol ip prio 2 handle 11 fw classid 1:11 tc filter add dev imq0 parent 1:0 protocol ip prio 3 handle 12 fw classid 1:12 tc filter add dev imq0 parent 1:0 protocol ip prio 4 handle 14 fw classid 1:13 tc filter add dev imq0 parent 1:0 protocol ip prio 5 handle 16 fw classid 1:14 tc filter add dev imq0 parent 1:0 protocol ip prio 6 handle 17 fw classid 1:15 tc filter add dev imq0 parent 1:0 protocol ip prio 7 handle 20 fw classid 1:16 tc filter add dev imq0 parent 1:0 protocol ip prio 8 handle 27 fw classid 1:17 echo "# Gotowe *********************************************************************************"
Pozdrawiam
;-)))
Ostatnio edytowany przez Jacekalex (2009-04-28 19:39:15)
Offline
Wskazówka: politykę dla łańcucha INPUT ustawiłeś na DROP.
Offline
Zatanawiam się po co ta armata na muchy... nie lepiej w konfiguracji programu do torrentów włączyć 90% wykorzystania łącza a dla wget wykorzystać opcję --limit-rate?
Offline
Po pierwsze - włańcuchu INPUT zawsze używam DROP natomiast potem otwieram dla nawiązanych połączeń
iptables -A INPUT -j ACCEPT -m state --state ESTABLISHED,RELATED
Natomiast tutaj reguły INPUT zostały zamienione na reguły PREROUTING kierujące do IMQ.
Co do armaty i wróbla - przydałby się program -który do desktopa z linuxem na pokładzie dodaje takie możliwości konfiguracyjne - jakie pakiet Tomato daje w Linksysach.
Co do kernela - kolejkowanie ruchu przychodzącego też by się przydało w standardzie - bez kombinowania z IMQ.
Co do layer7 też nie rozumiem - dlaczego nie ma tych łat w firewallach i kernelach - skoro ani nie zajmuje za dużo miejsca, ani nie jest trudna w instalacji (kompilacji).
Natomiast - jak ktoś zna sposób - aby torrent potrafił chodzić z maksymalną szybkością - nie blokując innych usług - to taki sposób jest mile widziany.
BO sztywne ograniczenia dla programow - dlatego - że może ktoś zadzwonić, czy trzeba szybko ściągnąć pocztę - to w czasie gdy nic poza torrentem nie pracuje - to jest marnowanie łącza i czasu.
Natomiast jeśli mi się nie uda z IMQ - to dorzucę jedną sieciówkę i pobawię się routingiem w obrębie jednego kompa - albo kupię router.
Ale na razienie widzę potrzeby - żeby wywalać 200 - jeśli można się czegoś nauczyć - i opracować rozwiązanie - które przyda się wielu ludziom.
Pozdrawiam
Offline
Nie podoba Ci się IMQ. Masz standardowo w jądrze IFB, z którego możesz skorzystać.
Jacekalex napisał(-a):
Po pierwsze - włańcuchu INPUT zawsze używam DROP natomiast potem otwieram dla nawiązanych połączeń
A co z połączeniami, które będą się "ustalać"?
Zmień polityke INPUT na ACCEPT i sprawdź czy reszta będzie Ci działać wg. Twoich założeń.
Ostatnio edytowany przez mariaczi (2009-04-29 12:56:47)
Offline
Nie podoba?
To że jeszcze mi się nie udało go uruchomić na lokalnej maszynie - nie znaczy że nie podoba.
Znaczy tylko - że gdzieś jest błąd i trzeba go znaleźć.
Więc szukam i tyle.
A zanim zaczniesz polecać ifb - to poczytaj na necie - co ludzie mieli z tym modułem.
Pozdrawiam
Offline