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/.
Te wysokie % fixnąłem przez ustalenie innych numerów klas:
Interfaces | RX bps pps %| TX bps pps % ->lo | 507B 9 | 507B 9 eth0 | 1.12MiB 778 | 26.01KiB 428 qdisc 1: (htb) | 0 0 | 23.86KiB 428 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 qdisc ffff: (ingress) | 0 0 | 1.11MiB 778 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 ifb0 | 23.86KiB 428 | 23.86KiB 428 qdisc 1: (htb) | 0 0 | 23.86KiB 428 class 1:1 (htb) | 0 0 | 23.86KiB 428 21% class 1:2 (htb) | 0 0 | 0 0 0% class 1:3 (htb) | 0 0 | 23.86KiB 428 78% class 1:4 (htb) | 0 0 | 0 0 0% ifb1 | 1.13MiB 786 | 1.13MiB 786 qdisc 2: (htb) | 0 0 | 1.13MiB 786 class 2:1 (htb) | 0 0 | 1.13MiB 786 100% class 2:2 (htb) | 0 0 | 0 0 0% class 2:3 (htb) | 0 0 | 0 0 0% class 2:4 (htb) | 0 0 | 1.13MiB 786 380%
Zamiast 3800% jest 380% i jak widać na korzeniu jest 100% a nie 1000%, czyli tak jak być powinno, teraz jakoś te pakiety przychodzące trzeba wrzucić do kolejki 2:3, bo póki co tylko wychodzące trafiają tam gdzie trzeba 1:3
Offline
Dziwna sprawa z tym w sumie. Zrobiłem mały test by sprawdzić czy zmarkowane pakiety powracają i są łapane przez iptables:
# iptables -t mangle -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING -i ifb1 -m connmark --mark 0x3 -j ACCEPT -A PREROUTING -i ifb0 -m connmark --mark 0x3 -j ACCEPT -A PREROUTING -i eth0 -m connmark --mark 0x3 -j ACCEPT -A OUTPUT -o ifb0 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o ifb1 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o eth0 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A POSTROUTING -o ifb0 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o ifb1 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o eth0 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003
Są 3 interfejsy i tylko eth0 działa prawidłowo.
Every 1.0s: iptables -t mangle -nvL Thu Jan 30 19:30:25 2014 Chain PREROUTING (policy ACCEPT 328 packets, 38261 bytes) pkts bytes target prot opt in out source destination 0 0 ACCEPT all -- ifb1 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 0 0 ACCEPT all -- ifb0 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 532 717K ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 Chain INPUT (policy ACCEPT 860 packets, 755K bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 650 packets, 47327 bytes) pkts bytes target prot opt in out source destination 0 0 CONNMARK all -- * ifb0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 0 0 CONNMARK all -- * ifb1 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 348 17255 CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 Chain POSTROUTING (policy ACCEPT 650 packets, 47327 bytes) pkts bytes target prot opt in out source destination 0 0 CLASSIFY all -- * ifb0 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3 0 0 CLASSIFY all -- * ifb1 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3 358 17667 CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3
Na moje oko to te pakiety co trafiają do ifb1 nie mają pojęcia co robić. Może coś z tym trzeba popracować bardziej?
tc filter add dev eth0 parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 2:1 action mirred egress redirect dev ifb1
Offline
Spróbuj po dodaniu nowej ponowić regułę z atrybutem
-j CONNMARK --save-mark
a przed użyciem na karcie ifb użyć
-j CONNMARK --restore-mark
Ostatnio edytowany przez Jacekalex (2014-01-30 19:50:01)
Offline
Po dodaniu czego i gdzie i co gdzie użyć? xD
# iptables -t mangle -I PREROUTING 1 -j CONNMARK --restore-mark # iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
tak?
# iptables -t mangle -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING -j CONNMARK --restore-mark --nfmask 0xffffffff --ctmask 0xffffffff -A PREROUTING -i ifb1 -m connmark --mark 0x3 -j ACCEPT -A PREROUTING -i ifb0 -m connmark --mark 0x3 -j ACCEPT -A PREROUTING -i eth0 -m connmark --mark 0x3 -j ACCEPT -A OUTPUT -o ifb0 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o ifb1 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o eth0 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A POSTROUTING -o ifb0 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o ifb1 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o eth0 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -j CONNMARK --save-mark --nfmask 0xffffffff --ctmask 0xffffffff
Every 1.0s: iptables -t mangle -nvL Thu Jan 30 20:20:01 2014 Chain PREROUTING (policy ACCEPT 1199 packets, 1205K bytes) pkts bytes target prot opt in out source destination 1199 1205K CONNMARK all -- * * 0.0.0.0/0 0.0.0.0/0 CONNMARK restore 0 0 ACCEPT all -- ifb1 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 0 0 ACCEPT all -- ifb0 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 0 0 ACCEPT all -- eth0 * 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 Chain INPUT (policy ACCEPT 1199 packets, 1205K bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 921 packets, 76659 bytes) pkts bytes target prot opt in out source destination 0 0 CONNMARK all -- * ifb0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 0 0 CONNMARK all -- * ifb1 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 599 39000 CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 Chain POSTROUTING (policy ACCEPT 921 packets, 76659 bytes) pkts bytes target prot opt in out source destination 0 0 CLASSIFY all -- * ifb0 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3 0 0 CLASSIFY all -- * ifb1 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3 599 39000 CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3 921 76659 CONNMARK all -- * * 0.0.0.0/0 0.0.0.0/0 CONNMARK save
Jeśli tak, to ciągle jest to samo.
Offline
iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner p2p -j CONNMARK --set-mark 2 iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner p2p -j CONNMARK --save-mark
iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 2 -j CONNMARK --resore-mark iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 2 -j CLASSIFY --set-class 1:2
A jak tak zrobisz, to co będzie?
Offline
Nie lecą pakiety do POSTROUTING:
Every 1.0s: iptables -t mangle -nvL Thu Jan 30 20:47:41 2014 Chain PREROUTING (policy ACCEPT 5972 packets, 8763K bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 5972 packets, 8763K bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 3493 packets, 169K bytes) pkts bytes target prot opt in out source destination 3359 156K CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x2 3353 155K CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK save Chain POSTROUTING (policy ACCEPT 3493 packets, 169K bytes) pkts bytes target prot opt in out source destination 0 0 CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x2 CONNMARK restore 0 0 CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x2 CLASSIFY set 1:2
Offline
To może cel
-j MARK
w łańcuchu PREROUTING i dopasowanie fwmark w tc?
Offline
Takie coś?
# tc filter add dev ifb1 parent 2:0 protocol ip prio 3 handle 3 fw classid 2:3 # iptables -t mangle -A PREROUTING -j MARK --set-mark 3
Every 1.0s: iptables -t mangle -nvL Thu Jan 30 21:59:24 2014 Chain PREROUTING (policy ACCEPT 1256 packets, 1236K bytes) pkts bytes target prot opt in out source destination 1256 1236K MARK all -- * * 0.0.0.0/0 0.0.0.0/0 MARK set 0x3 Chain INPUT (policy ACCEPT 1256 packets, 1236K bytes) pkts bytes target prot opt in out source destination Chain FORWARD (policy ACCEPT 0 packets, 0 bytes) pkts bytes target prot opt in out source destination Chain OUTPUT (policy ACCEPT 957 packets, 83676 bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 957 packets, 83676 bytes) pkts bytes target prot opt in out source destination
Próbuje na całym ruchu teraz ale alej to samo:
Interfaces | RX bps pps %| TX bps pps % ->lo | 82B 0 | 82B 0 eth0 | 1.07MiB 745 | 38.68KiB 532 qdisc 1: (htb) | 0 0 | 37.15KiB 532 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 qdisc ffff: (ingress) | 0 0 | 1.06MiB 745 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 ifb0 | 37.20KiB 533 | 37.20KiB 533 qdisc 1: (htb) | 0 0 | 37.15KiB 532 class 1:1 (htb) | 0 0 | 37.15KiB 532 32% class 1:2 (htb) | 0 0 | 0 0 0% class 1:3 (htb) | 0 0 | 0 0 0% class 1:4 (htb) | 0 0 | 37.15KiB 532 122% ifb1 | 1.06MiB 732 | 1.06MiB 732 qdisc 2: (htb) | 0 0 | 1.06MiB 732 class 2:1 (htb) | 0 0 | 1.06MiB 732 93% class 2:2 (htb) | 0 0 | 0 0 0% class 2:3 (htb) | 0 0 | 0 0 0% class 2:4 (htb) | 0 0 | 1.06MiB 732 354% cls none (fw) | 0 0 | 0 0 cls :3 (fw) | 0 0 | 0 0
Zrobiłem dokładnie to samo dla pakietów wychodzących:
# tc filter add dev ifb0 parent 1:0 protocol ip prio 3 handle 3 fw classid 1:3 # iptables -t mangle -A OUTPUT -j MARK --set-mark 3
I tu działa. xD
Nie wiem czemu na ingress nie chce wejść. :]
Ostatnio edytowany przez morfik (2014-01-30 22:15:30)
Offline
A na interfejsie ifb - np na wyjściu z ifb0 też nie łapie.
Może tam
$ipt -t mangle -A OUTPUT -o ifb0 -j MARK ...
i potem tc fwmark - kolejka na ifb0?
Iproute potrafi klasyfikować ruch wyłącznie wychodzący, dlatego wirtualne interfejsy.
Jeśli na nim są kolejki, to może tam też fw? chociaż gdzieś kiedyś czytałem,
że ifb jest przed firewallem, i to też może nic nie dać, ale diabelnie dawno to było.
Jak kompilujesz jajka i iptables, to zobacz, czy dasz radę znaleźć łątki imq
- tam to się dużo łatwiej robiło, bo przekierowanie na interfejs IMQ robiło się firewallem w dowolnym momencie.
Ja ostatnio takie gimnastyki robiłem z IMQ, i chodziło nawet grzecznie.
Ostatnio edytowany przez Jacekalex (2014-01-30 23:02:27)
Offline
U mnie iptables w ogóle nie łapie tych interfejsów ifb0, ifb1, nieważne co by była za reguła i gdzie by ona była, to i tak po sprecyzowaniu -i albo -o na któryś z tych interfejsów, od razu pakiety przestają wpadać do tej reguły.
Jak trochę odpocznę to popatrzę na to IMQ, cokolwiek to jest. xD
Offline
Zobacz jeszcze to:
https://home.regit.org/netfilter-en/netfilter-connmark/
W komentach ktoś dawał przykład z tablicami routingu, może się czegoś dowiesz.
Albo poczekaj trochę, właśnie wychodzi nftables - może tam pójdzie łatwiej.
Bo te cholerne limity zawsze chodzą na OUTPUTach, dlatego nieźle nadają się na router.
Za to w ogóle nie nadają się na desktop przez to.
Wygląda na to,że na ifb musisz filtry robić samym tc.
Offline
W komciach pod tym linkiem https://home.regit.org/netfilter-en/netfilter-connmark/ napisali, że:
Is important to note that ingress policy occurs way before mangle PREROUTING so the mark will never be available in the policier to match against it.
i pewnie dlatego się tego nie da zrobić przez iptables i trzeba robić to przez tc filter jak to napisał tutaj facet http://wampir.mroczna-zaloga.org/archives/77-ifb-zamiast-imq.html :
IMQ przemawiało do mnie nieco bardziej z tego powodu, że ruch do "urządzenia" można było kierować przez reguły iptables, w przypadku IFB ruch należy kierować przez filtry tc z pakietu iproute,
No i faktycznie przy pomocy:
root:~# tc filter add dev ifb1 parent 2: protocol ip prio 10 u32 match ip sport 80 0xffff classid 2:3
przekierował w końcu ruch przychodzący z na 2:3
Ale tym to chyba qbittorrenta nie złapie. xD
Offline
No to mam nowe jajko z obsługą tych urządzeń imq i iptables z celem -j IMQ
teraz tak, czy do interfejsu eth0 mam jakieś qdisc podpinać, czy obecnie tylko operować na imq0 i imq1? Czyli skrypt od tworzenia kolejek by wyglądał jak poniżej:
ip link set imq0 up ip link set imq1 up tc qdisc add dev imq0 root handle 1: htb default 4 tc class add dev imq0 parent 1:0 classid 1:1 htb rate 950kbit ceil 950kbit tc class add dev imq0 parent 1:1 classid 1:2 htb rate 450kbit ceil 950kbit prio 5 tc class add dev imq0 parent 1:1 classid 1:3 htb rate 250kbit ceil 950kbit prio 0 tc class add dev imq0 parent 1:1 classid 1:4 htb rate 250kbit ceil 950kbit prio 2 tc filter add dev imq0 parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 tc qdisc add dev imq1 root handle 2: htb default 4 tc class add dev imq1 parent 2:0 classid 2:1 htb rate 9500kbit ceil 9500kbit tc class add dev imq1 parent 2:1 classid 2:2 htb rate 4500kbit ceil 9500kbit prio 5 tc class add dev imq1 parent 2:1 classid 2:3 htb rate 2500kbit ceil 9500kbit prio 0 tc class add dev imq1 parent 2:1 classid 2:4 htb rate 2500kbit ceil 9500kbit prio 2 tc filter add dev imq1 parent 2:0 protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 2:1
Na imq0 jest ruch wychodzący a na imq1 przychodzący.
Dodałem póki co dwie reguły w mangle:
# iptables -t mangle -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A PREROUTING -j IMQ --todev 1 -A POSTROUTING -j IMQ --todev 0
Z tego co widzę, to ruch się rozdzielił:
Interfaces | RX bps pps %| TX bps pps % ->lo | 267B 1 | 267B 1 eth0 | 1.07MiB 832 | 107.13KiB 483 qdisc none (pfifo_fast) | 0 0 | 104.93KiB 483 imq0 | 96.59KiB 474 | 98.97KiB 487 qdisc 1: (htb) | 0 0 | 98.97KiB 487 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 class 1:1 (htb) | 0 0 | 98.97KiB 487 85% class 1:2 (htb) | 0 0 | 0 0 0% class 1:3 (htb) | 0 0 | 0 0 0% class 1:4 (htb) | 0 0 | 98.97KiB 487 324% imq1 | 1.06MiB 831 | 1.05MiB 826 qdisc 2: (htb) | 0 0 | 1.05MiB 826 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 class 2:1 (htb) | 0 0 | 1.05MiB 826 93% class 2:2 (htb) | 0 0 | 0 0 0% class 2:3 (htb) | 0 0 | 0 0 0% class 2:4 (htb) | 0 0 | 1.05MiB 826 353%
Jak i gdzie go teraz klasyfikować?
Offline
cat /home/local/bin/markerimqdebug #!/bin/bash /sbin/modprobe imq numdevs=2 /sbin/ip link set imq0 up /sbin/ip link set imq1 up # echo "reguła 1" iptables -t mangle -F # echo "reguła 2" iptables -t mangle -X # echo "reguła 3" iptables -t mangle -A PREROUTING -m layer7 --l7proto skypetoskype -j MARK --set-mark 10 # echo "reguła 4" iptables -t mangle -A PREROUTING -m layer7 --l7proto skypeout -j MARK --set-mark 10 # echo "reguła 5" iptables -t mangle -A POSTROUTING -m layer7 --l7proto skypetoskype -j MARK --set-mark 10 # echo "reguła 6" iptables -t mangle -A POSTROUTING -m layer7 --l7proto skypeout -j MARK --set-mark 10 # echo "reguła 7" iptables -t mangle -A PREROUTING -m layer7 --l7proto sip -j MARK --set-mark 10 # echo "reguła 8" iptables -t mangle -A PREROUTING -m layer7 --l7proto h323 -j MARK --set-mark 10 # echo "reguła 9" iptables -t mangle -A POSTROUTING -m layer7 --l7proto sip -j MARK --set-mark 10 # echo "reguła 10" iptables -t mangle -A POSTROUTING -m layer7 --l7proto h323 -j MARK --set-mark 10 # echo "reguła 11" iptables -t mangle -A PREROUTING -m layer7 --l7proto jabber -j MARK --set-mark 20 # echo "reguła 13" iptables -t mangle -A POSTROUTING -m layer7 --l7proto jabber -j MARK --set-mark 20 # echo "reguła 14" iptables -t mangle -A PREROUTING -m layer7 --l7proto shoutcast -j MARK --set-mark 30 # echo "reguła 15" iptables -t mangle -A PREROUTING -m layer7 --l7proto quicktime -j MARK --set-mark 30 # echo "reguła 16" iptables -t mangle -A PREROUTING -p tcp --sport http -j MARK --set-mark 30 # echo "reguła 17" iptables -t mangle -A PREROUTING -p tcp --sport https -j MARK --set-mark 30 # echo "reguła 18" iptables -t mangle -A POSTROUTING -p tcp --sport http -j MARK --set-mark 30 # echo "reguła 19" iptables -t mangle -A POSTROUTING -p tcp --sport https -j MARK --set-mark 30 # echo "reguła 20" iptables -t mangle -A POSTROUTING -m layer7 --l7proto shoutcast -j MARK --set-mark 30 # echo "reguła 21" iptables -t mangle -A POSTROUTING -m layer7 --l7proto quicktime -j MARK --set-mark 30 # echo "reguła 22" iptables -t mangle -A PREROUTING -m layer7 --l7proto ftp -j MARK --set-mark 50 # echo "reguła 23" iptables -t mangle -A POSTROUTING -m layer7 --l7proto ftp -j MARK --set-mark 50 # echo "reguła 24" iptables -t mangle -A PREROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 70 # echo "reguła 25" iptables -t mangle -A POSTROUTING -m layer7 --l7proto bittorrent -j MARK --set-mark 70 # echo "reguła 26" iptables -t mangle -A POSTROUTING -p tcp --dport pop3s -m iprange --src-range 193.17.41.0-193.17.41.255 -j MARK --set-mark 40 # echo "reguła 27" iptables -t mangle -A POSTROUTING -p tcp --dport ssmtp -m iprange --src-range 193.17.41.0-193.17.41.255 -j MARK --set-mark 40 # echo "reguła 28" iptables -t mangle -A PREROUTING -j MARK --set-mark 40 # echo "reguła 29" iptables -t mangle -A POSTROUTING -j MARK --set-mark 40 # echo "reguła 30" iptables -t mangle -A PREROUTING -j IMQ --todev 0 # echo "reguła 31" iptables -t mangle -A PREROUTING -j IMQ --todev 1
W jakiejś tam przeszłości to nawet działało.
Ale mam w zapasie XX wersji tego skrypta, i już nie pamiętam, która była ostateczna :DDD
Więc musisz trochę pokombinować we własnym zakresie. :D
To było, zanim bliżej poznałem moduł CONNMARK.
Reguły 28 i 29 mogą nadpisywać wcześniejsze marki, jeśli się coś takiego zdarzy,
to będzie je trzeba zrobić jakoś inaczej, albo olać, bo i tak ruch niesklasyfikowany trafia do kolejki domyślnej.
I do tego kolejki na imq:
#!/bin/bash #set -x IN='imq0' OUT='imq1' DOWNLOAD='10mbit' UPLOAD='1mbit' tc=`which tc` $tc qdisc del root dev $IN 2> /dev/null $tc qdisc add dev $IN root handle 1:0 htb default 70 r2q 1 #kolejki dzielące pasmo (tutaj wyłącznie priorytet kolejek) - priorytety dla poszczególnych protokołów sieciowych (layer7). $tc class add dev $IN parent 1:0 classid 1:10 htb rate $DOWNLOAD ceil $DOWNLOAD prio 1 $tc class add dev $IN parent 1:0 classid 1:20 htb rate $DOWNLOAD ceil $DOWNLOAD prio 2 $tc class add dev $IN parent 1:0 classid 1:30 htb rate $DOWNLOAD ceil $DOWNLOAD prio 3 $tc class add dev $IN parent 1:0 classid 1:40 htb rate $DOWNLOAD ceil $DOWNLOAD prio 4 $tc class add dev $IN parent 1:0 classid 1:50 htb rate $DOWNLOAD ceil $DOWNLOAD prio 5 $tc class add dev $IN parent 1:0 classid 1:60 htb rate $DOWNLOAD ceil $DOWNLOAD prio 6 $tc class add dev $IN parent 1:0 classid 1:70 htb rate $DOWNLOAD ceil $DOWNLOAD prio 7 echo "# download - filtry. $tc filter add dev $IN parent 1:0 protocol ip handle 10 fw classid 1:10 $tc filter add dev $IN parent 1:0 protocol ip handle 20 fw classid 1:20 $tc filter add dev $IN parent 1:0 protocol ip handle 30 fw classid 1:30 $tc filter add dev $IN parent 1:0 protocol ip handle 40 fw classid 1:40 $tc filter add dev $IN parent 1:0 protocol ip handle 50 fw classid 1:60 $tc filter add dev $IN parent 1:0 protocol ip handle 60 fw classid 1:60 $tc filter add dev $IN parent 1:0 protocol ip handle 70 fw classid 1:70 echo "# download - 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 $IN parent 1:10 handle 10:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:20 handle 20:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:30 handle 30:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:40 handle 40:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:50 handle 50:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:60 handle 60:0 sfq perturb 10 $tc qdisc add dev $IN parent 1:70 handle 70:0 sfq perturb 10 echo "UPLOAD" $tc qdisc del root dev $OUT 2> /dev/null $tc qdisc add dev $OUT root handle 1:0 htb default 70 r2q #kolejki dzielące pasmo (tutaj wyłącznie priorytet kolejek) - priorytety dla poszczególnych protokołów sieciowych (layer7). $tc class add dev $OUT parent 1:0 classid 1:10 htb rate $UPLOAD ceil $UPLOAD prio 1 $tc class add dev $OUT parent 1:0 classid 1:20 htb rate $UPLOAD ceil $UPLOAD prio 2 $tc class add dev $OUT parent 1:0 classid 1:30 htb rate $UPLOAD ceil $UPLOAD prio 3 $tc class add dev $OUT parent 1:0 classid 1:40 htb rate $UPLOAD ceil $UPLOAD prio 4 $tc class add dev $OUT parent 1:0 classid 1:50 htb rate $UPLOAD ceil $UPLOAD prio 5 $tc class add dev $OUT parent 1:0 classid 1:60 htb rate $UPLOAD ceil $UPLOAD prio 6 $tc class add dev $OUT parent 1:0 classid 1:70 htb rate $UPLOAD ceil $UPLOAD 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 $OUT parent 1:0 protocol ip handle 10 fw classid 1:10 $tc filter add dev $OUT parent 1:0 protocol ip handle 20 fw classid 1:20 $tc filter add dev $OUT parent 1:0 protocol ip handle 30 fw classid 1:30 $tc filter add dev $OUT parent 1:0 protocol ip handle 40 fw classid 1:40 $tc filter add dev $OUT parent 1:0 protocol ip handle 50 fw classid 1:60 $tc filter add dev $OUT parent 1:0 protocol ip handle 60 fw classid 1:60 $tc filter add dev $OUT parent 1:0 protocol ip handle 70 fw classid 1:70 echo "# upload - 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 $OUT parent 1:10 handle 10:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:20 handle 20:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:30 handle 30:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:40 handle 40:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:50 handle 50:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:60 handle 60:0 sfq perturb 10 $tc qdisc add dev $OUT parent 1:70 handle 70:0 sfq perturb 10
Może coś się z tego uda urodzić ;)
Ostatnio edytowany przez Jacekalex (2014-02-01 00:06:31)
Offline
Ha, udało się, w końcu jakiś sukces. xD Poniżej dowód:
Interfaces | RX bps pps %| TX bps pps % ->lo | 834B 9 | 834B 9 eth0 | 1.15MiB 886 | 90.75KiB 709 qdisc none (pfifo_fast) | 0 0 | 89.46KiB 709 imq0 | 72.35KiB 690 | 80.57KiB 718 qdisc 1: (htb) | 0 0 | 80.57KiB 718 cls :2 (fw) | 0 0 | 0 0 cls :3 (fw) | 0 0 | 0 0 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 class 1:1 (htb) | 0 0 | 80.57KiB 718 69% class 1:2 (htb) | 0 0 | 69.21KiB 487 126% class 1:3 (htb) | 0 0 | 11.34KiB 230 37% class 1:4 (htb) | 0 0 | 17B 0 0% imq1 | 1.14MiB 892 | 1.13MiB 881 qdisc 2: (htb) | 0 0 | 1.13MiB 881 cls :2 (fw) | 0 0 | 0 0 cls :3 (fw) | 0 0 | 0 0 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 class 2:1 (htb) | 0 0 | 1.13MiB 881 100% class 2:2 (htb) | 0 0 | 513.41KiB 430 93% class 2:3 (htb) | 0 0 | 644.88KiB 449 211% class 2:4 (htb) | 0 0 | 256B 0 0%
Poniżej setup:
W skrócie to 1:2 i 2:2 to qbittorrent, 1:3 i 2:3 to morfik, a 1:4 i 2:4 to domyślne. Ruch wyłapany po userach/grupach przez reguły w iptables.
Tak wygląda tc:
ip link set imq0 up ip link set imq1 up tc qdisc add dev imq0 root handle 1: htb default 4 tc class add dev imq0 parent 1:0 classid 1:1 htb rate 950kbit ceil 950kbit tc class add dev imq0 parent 1:1 classid 1:2 htb rate 450kbit ceil 950kbit prio 5 tc class add dev imq0 parent 1:1 classid 1:3 htb rate 250kbit ceil 950kbit prio 0 tc class add dev imq0 parent 1:1 classid 1:4 htb rate 250kbit ceil 950kbit prio 2 tc filter add dev imq0 parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 tc qdisc add dev imq1 root handle 2: htb default 4 tc class add dev imq1 parent 2:0 classid 2:1 htb rate 9500kbit ceil 9500kbit tc class add dev imq1 parent 2:1 classid 2:2 htb rate 4500kbit ceil 9500kbit prio 5 tc class add dev imq1 parent 2:1 classid 2:3 htb rate 2500kbit ceil 9500kbit prio 0 tc class add dev imq1 parent 2:1 classid 2:4 htb rate 2500kbit ceil 9500kbit prio 2 tc filter add dev imq1 parent 2:0 protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 2:1
Oraz filtry od markowania - łapią znaczki 2 i 3 i wrzucają do odpowiednich kolejek wychodzących i wchodzących:
tc filter add dev imq0 protocol ip parent 1:0 prio 1 handle 2 fw classid 1:2 tc filter add dev imq0 protocol ip parent 1:0 prio 1 handle 3 fw classid 1:3 tc filter add dev imq1 protocol ip parent 2:0 prio 1 handle 2 fw classid 2:2 tc filter add dev imq1 protocol ip parent 2:0 prio 1 handle 3 fw classid 2:3
Iptables:
# iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1 # iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark # iptables -t mangle -A POSTROUTING -m owner --gid-owner p2p -j MARK --set-mark 2 # iptables -t mangle -A POSTROUTING -m owner --uid-owner morfik -j MARK --set-mark 3 # iptables -t mangle -A POSTROUTING -m owner --uid-owner root -j MARK --set-mark 3 # iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark # iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0
Konieczne są te --save-mark i --restore-mark. Po usunięciu tych wpisów pakiety nie lądują we właściwych kolejkach przychodzących.
Idę się upić. xD Jutro jeszcze testy i może jakiś artykuł się z tego zrobi.
Offline
Art o imq?
Strata czasu, do >3.13 już raczej nie będzie pasować.
Raczej popisz trochę do dewów netfiltera, żeby w nftables dało się oznaczać connmarkiem output, żeby mark był widoczny w obu kierunkach, i całe tc łatwo przytulić do tych marków w obu kierunkach.
A najlepiej, gdyby connmark dało się ustawić w mechanizmie cgroup, wtedy prio i traffic osobno dla każdego programu, to będzie banalna sprawa.
Bo na razie to jest trochę dłubanie paluchem prawej nogi w lewym uchu. ;P
Nftables ma być solidną konkurencją dla PFa z OpenBSD, a PF ma moduły do zarządzania pasmem, i działa to w nim bardzo sympatycznie.
I nie czaję, dlaczego wszędzie masz PRIO 1,jeśli masz gotowy mechanizm,
żeby torrenta i p2p puścić na niższym priorytecie, voipy i komunikatory na najwyższym, a resztę na średnim -domyślnym.
To akurat jest optymalne rozwiązanie o tyle, że priorytety są kluczowe w dzialaniu sieci.
Ostatnio edytowany przez Jacekalex (2014-02-01 01:04:48)
Offline
O wszystkim raczej, o imq, ifb, o ruchu wychodzącym i wchodzącym, o klasyfikowaniu via cgroup, iptables i tc, o znakowaniu i takie bajery, żeby było pod ręką jakbym tak kiedyś potrzebował. xD A jak wyjdzie nowy kernel to dorobię inny text.
A co do priorytetów, to są przecie ustawione tam przy kolejkach. To nie wystarczy? W tych filtrach też musi być?
Offline
Priorytety? niby są, jeśli działa, to ok.
Piszesz howto?
Faktycznie, tylko piszesz je zazwyczaj na kilka tematów na raz, przez co ich przydatność jest znacznie skromniejsza, niż gdybyś wyczerpał jeden pojedynczy temat w jednym arcie.
To taka moja skromna opinia....
Offline
Jak ktoś chce jeden temat to ma od tego man. xD Ja raczej chcę to sobie poskładać by mi to nigdzie nie uciekło, bo później zapomnę jak to zrobiłem i znów będę siedział godzinami. xD
Offline
Man to trochę mało.
Próbuj pisać howto tak, żeby wyczerpywało dane zagadnienie, nie próbuj z jednego arta robić wiki dla całego systemu.
Umiar jest moim zdaniem potrzebny dlatego, że człowiek konfiguruje zazwyczaj jedną lub dwie usługi, anie cały system równocześnie.
Np napisałeś tutek o instalacji na szyfrowanym LVM.
Ja kiedyś stawiałem coś podobnego, i takich tutków, jak twój przerobiłem chyba z trzydzieści, i instalacja trwała tydzień.
Ale jak poszukałem inaczej, tzn wg jednego tutka szyfrowana partycja, wg drugiego lvm, potem debootstrap, i na koniec boot i initramfs, to w trzy godziny wszystko działało.
Dlatego takie tutki jak Twoje i użytkownikabuntu omijam na kilometr. ;)
Pozdro
;-)
Offline
Tzn wiesz, jak ja sobie stawiałem nowy system z okazji zmiany architektury na amd64, to jechałem według tego swojego poradnika, nic tylko kopiując kolejne linijki, czasem tylko patrząc na opis czy aby jestem w dobrym miejscu, no bo ja to napisałem to mniej wiecej wiem co artykuł zawiera tylko przez patrzenie po akapitach, czy poleceniach. Ale generalnie to 10min i udało mi się odtworzyć system według tego textu, także nie wiem z czym miałeś problem. Nie było feedbacka to się proszę nie czepiać. SOA#1 xD
Co do samego wątku to jest mały bug i pewnie by to się nie wydało gdyby nie fakt, że qbittorrenta odpalam póki co przez user:group morfik:p2p, i te marki się nakładają, bo pierw nakłada mark 2 na grupę p2p a potem mark 3 na usera morfik. W efekcie wszystko leci do grup 1:3 i 2:3. Ja się zastanawiam jak mi to wczoraj działało. xD
W każdym razie trzeba nieco regułki w iptables pozmieniać:
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1 iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark iptables -t mangle -N IMQ-OUT iptables -t mangle -A POSTROUTING -o eth0 -j IMQ-OUT iptables -t mangle -A IMQ-OUT -m owner --gid-owner p2p -j MARK --set-mark 2 iptables -t mangle -A IMQ-OUT -m owner --gid-owner p2p -j RETURN iptables -t mangle -A IMQ-OUT -m owner --uid-owner morfik -j MARK --set-mark 3 iptables -t mangle -A IMQ-OUT -m owner --uid-owner morfik -j RETURN iptables -t mangle -A IMQ-OUT -m owner --uid-owner root -j MARK --set-mark 3 iptables -t mangle -A IMQ-OUT -m owner --uid-owner root -j RETURN iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0
Czyli w nowym łańcuchu są znakowane pakiety i zaraz po oznakowaniu zwracane do POSTROUTING i tam już marki zapisywane i wysyłane dalej. Bez tego -j RETURN to pakiety sobie przemierzają wszystkie reguły w tabeli i temu taki problem powstał. W sumie gdybym miał usera p2p zamiast morfik, to pewnie nawet bym o tym nie wiedział, a tak to nawet lekko się zoptymalizowało to przechodzenie reguł.
Zbędne są również te dwa filtry:
# tc filter add dev imq0 parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 # tc filter add dev imq1 parent 2:0 protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 2:1
Wystarcza same:
tc filter add dev imq0 protocol ip parent 1:0 prio 1 handle 2 fw classid 1:2 tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 3 fw classid 1:3 tc filter add dev imq1 protocol ip parent 2:0 prio 3 handle 2 fw classid 2:2 tc filter add dev imq1 protocol ip parent 2:0 prio 7 handle 3 fw classid 2:3
Ostatnio edytowany przez morfik (2014-02-01 20:56:10)
Offline
Tak sobie patrze na ten ruch i mnie zastanawia jedna rzecz. Jeśli mam 2 kolejki i obie wysyłają i pobierają coś, to wszystko jest ok ale jeśli bym dał na full upload w qbittorrencie i próbował coś pobrać przez qbittorrenta, to nie bardzo chce pobierać. Dopiero jak mu przykręcę upload w kliencie to zaczyna pobierać dane. Ja wiem, że jeśli się pobiera dane to i pakiety są również wysyłane ale jak odróżnić te pakiety wysyłane przy pobieraniu od tych wysyłanych przy wysyłaniu? xD I jak nadać im priorytety?
Próbowałem przez te priorytety na tc filter:
tc filter add dev imq0 protocol ip parent 1:0 prio 1 handle 2 fw classid 1:2 tc filter add dev imq0 protocol ip parent 1:0 prio 5 handle 3 fw classid 1:3 tc filter add dev imq1 protocol ip parent 2:0 prio 3 handle 2 fw classid 2:2 tc filter add dev imq1 protocol ip parent 2:0 prio 7 handle 3 fw classid 2:3
że niby to miałoby ustawić priorytet na wyjście qbittorrenta na 1, wejście na 3, czyli wyższe niż na wyjściu ale to nie działa. Da radę to w jakiś sposób ogarnąć?
Offline
Może Qbittorent ma jakieś zwyczaje, że równocześnie nie odpala maksimum dla downloadu i uploadu?
Generalnie klienty torrenta pobierają i wysyłają małe porcje danych, które sklejają na miejscu, więc to formalnie jest możliwe.
Sprawdź na Deluge lub Transmission, czy są takie same objawy, zanim
zaczniesz kopać w ustawieniach sieciowych.
A poza tym, jeśli markujesz w conntrack na podstawie GID, to po prostu na imq0 i imq1 robisz inne kolejki lub priorytety dla tego marka p2p, powinno działać.
IMQ idealne nie jest, tu też mogą być jakieś jaja, choć w przypadku Qbittorenta wygląda, jakby program się nie wyrabiał z albo z szyfrowaniem, albo z liczeniem pakietów, czy czymś innym.
Pryz okazji, jak w w jaju ustawiłeś IMQ (after-nat,before-nat)?
tam masz 4 opcje.
Ostatnio edytowany przez Jacekalex (2014-07-10 09:02:58)
Offline
W qbittorrencie można sobie sprecyzować ile ma pobierać i wysyłać max, ja mam brak limitów na jednym i drugim.
Co do imq, to nie ruszałem domyślnych ustawień, czyli AB
| Choosing this option will make IMQ hook like this:
| PREROUTING: After NAT
| POSTROUTING: Before NAT
Offline
Ja wiem, że można precyzyjnie ustawić, ale nie debugowałem qbittorenta, żeby sprawdzić, czy on się wyrabia jak należy z takimi czy innymi ustawieniami.
Dlatego poradziłem sprawdzić na innym kliencie, czy jest to samo,
bo teraz nawet nie wiadomo, czy coś w podsystemie sieciowym, czy humory qbittorenta.
Bo to, że programy miewają czasem różne humory, to u mnie nie podlega dyskusji. :D
Sieć, to też nie tylko twój komp, ale także ustawienia i kolejki u ISP,
i tam na 100% są obcięte tak czy inaczej torrenty, bo w przeciwnym wypadku ta sieć by czasami w ogóle nie działała.
A jak masz interakcje zachowania samego programu, kolejek w kompie i kolejek u ISP, to jest po prostu szukanie igły w stogu siana.
Ja podejrzewam, że na portach torrenta albo na łączach per/pacjent masz limit ilości równoczesnych połączeń (u ISP), i tu może być też powód, że maks wysyłania ogranicza liczbę dostępnych połączeń dla pobierania.
Offline