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/.
W cgroups jest coś co się nazywa net_prio i przy jego pomocy można ustawić priorytet pakietom generowanym przez aplikacje korzystających z sieci. Przynajmniej tyle wywnioskowałem czytając https://www.kernel.org/doc/Documentation/cgroups/net_prio.txt . Załóżmy, że mam ustawionego qbittorrenta na full upload/download i mam tam sporo obrazów iso do pobrania/wysyłania, gdy odpalę qbittorrenta, ten zjada całe łącze tak, że pingi na wp są ~800, po wyłączeniu, ping wraca na ~20. Ustawiłem priorytet dla wszystkich procesów na 3 przez :
echo "eth0 3" > $CGDIR/net_prio/net_prio.ifpriomap
i dla qbittorrenta:
mkdir -p $CGDIR/net_prio/users/qbittorrent echo '1' > $CGDIR/net_prio/users/qbittorrent/cgroup.clone_children echo "eth0 1" > $CGDIR/net_prio/users/qbittorrent/net_prio.ifpriomap
Teoretycznie wszystko jest w porządku:
$ cat /cgroups/net_prio/net_prio.ifpriomap lo 0 eth0 3 $ cat /cgroups/net_prio/users/qbittorrent/net_prio.ifpriomap lo 0 eth0 1 $ cat /cgroups/net_prio/users/qbittorrent/tasks 4475 4586 4597 4617 4618 $ cat /cgroups/net_prio/tasks 1 2 3 5 6 7 8 9 10 11 12 13 15 16 17 18 19 20 21 22 25 26 27 28 29 30 35 36 83 113 131 133 144 149 172 221 222 223 224 225 233 234 236 237 241 242 247 248 273 280 281 448 575 1268 1270 1271 1272 1273 1341 1342 1343 1344 1345 1412 1413 1414 1415 1416 1481 1482 1483 1484 1485 1830 1831 1832 1833 1834 1835 1836 1837 1838 1842 1843 1844 1845 1846 1847 2331 2359 2364 2366 2373 2763 2888 2932 2944 2945 2946 2947 2999 3026 3037 3143 3196 3292 3344 3378 3398 3486 3518 3589 3778 3780 3781 3817 3818 3819 3820 3821 3844 3860 3861 3874 3876 3877 3879 3881 3883 3884 3885 3886 3887 3888 3889 3890 3891 3892 3893 3894 3895 3896 3897 3898 3899 3900 3901 3902 3903 3904 3905 3906 3907 3908 3909 3910 3911 3912 3913 3914 3915 3916 3917 3918 3919 3920 3921 3922 3923 3924 3925 3926 3927 3928 3929 3930 3931 3932 3933 3934 3935 3936 3937 3938 3939 3940 3941 3942 3943 3944 3945 3947 3951 3966 3967 3969 3970 3972 3973 3974 3976 3977 3984 3991 4006 4007 4018 4044 4047 4048 4067 4069 4070 4071 4079 4080 4082 4084 4086 4087 4096 4098 4101 4108 4109 4112 4113 4114 4115 4117 4127 4128 4129 4133 4188 4193 4194 4195 4197 4199 4200 4221 4222 4223 4225 4226 4227 4228 4229 4230 4231 4232 4233 4234 4235 4249 4266 4267 4268 4269 4270 4271 4272 4307 4407 4433 4438 4634 4796 4797 4798 4799 4800 4801 4806 4809 4811 4911 5057 5100 5368 5714 6446 7359 7958 8056 8057 8058 8059 8060 8061 8062 8065 8080 8081 8083 8084 8086 8087 8088 8091 8168 8183 8188 8207 8208 8224 8240 8248 8260 8275 8293 8307 8372 8373 8388 8456 9040 9139 9154 9331 9643 9644 9646 9647 9750 9967 10524 14620 14739 14740 16611 16643 17096 17182 17183 17200 17201 17202 17221 17223 18020 18021 18657 18696 20039 27388
Ale gdy ustawię qbittorrenta na full to dalej mam ping 800 i net się ślamazarni. To tak powinno być?
Ostatnio edytowany przez morfik (2014-02-01 01:31:16)
Offline
Nic podobnego w cgroups nie widziałem, net_prio jest głównie do systemów typu iscsi, czyli dysków sieciowych.
Do pakietów internetowych masz tc (iproute) kolejkę prio, musisz tylko jakoś oznaczyć pakiety,żeby wpadały do poszczególnych kolejek.
Tu możesz np qbittorrenta odpalić jako innego usera i oznaczyć modułem owner firewalla, albo użyć innego modułu cgroup, mianowicie net_cls, jeśli chcesz to robić przez cgroup.
Jeśli uda Ci się z net_cls, to się pochwal, bo mnie się na razie nie udało tego wdrożyć, choć specjalnie nie szalałem z tego powodu.
Jak chcesz (i powinieneś) limitować także pakiety przychodzące, to musisz użyć mechanizmu conntrack do identyfikacji połączenia, z którego pochodzi dany pakiet.
Do tego masz moduły connmark (2 szt - filtr i cel) w firewallu.
Brakuje tylko możliwości prostego ożenienia modułu net_cls
z modułem connmark firewalla, w ten sposób net_cls nie uchwyci pakietów przychodzących (albo na oczy nie widziałem sposobu, jak to zrobić).
Więc chyba najprościej będzie jednak -m owner.
To by było na tyle
;-)
Ostatnio edytowany przez Jacekalex (2014-01-23 16:45:23)
Offline
Czyli olać ten net_prio ? Choć to trochę dziwne, bo pisze tam:
The Network priority cgroup provides an interface to allow an administrator to
dynamically set the priority of network traffic generated by various
applications
No to powinno działać. :]
Samego qbittorenta-nox to mogę odpalić bez większych problemów jako inny user, ale ja wolałbym to zrobić przez cgroup ale i tak sobie zobaczę ten -m owner .
Mi generalnie zależy na tym, że gdy nie korzystam z łącza to żeby qbittorrent mógł je zapchać.
Ostatnio edytowany przez morfik (2014-01-23 16:50:36)
Offline
A jak zamierzasz pakiety przychodzące łapać przez cgroup?
Bo moduł connmark oznacza pakiety wg przynależności do konkretnego połączenia, potem ten znacznik widać w każdym pakiecie lecącym w dowolną stronę, należącym do danego połączenia.
Te znaczniki widać w /proc/net/ip_conntrack
Ale jakoś musisz oznaczyć pakiety wychodzące markiem connmark, żeby miały osobne marki w tablicy conntrack.
Do tego musisz je rozpoznać firewallem, nie widzialem nigdzie opcji, zeby to zrobić przez cgroup.
Chyba, żeby robić osobny podsystem sieciowy dla jakiegoś programu, uzytkodnikubuntu naskrobał takie howto, ale u mnie za bardzo nie chciało działać.
Offline
No tam pisze coś takiego:
Nominally, an application would set the priority of its traffic via the
SO_PRIORITY socket option. This however, is not always possible because:
1) The application may not have been coded to set this value
2) The priority of application traffic is often a site-specific administrative
decision rather than an application defined one.
This cgroup allows an administrator to assign a process to a group which defines
the priority of egress traffic on a given interface. Network priority groups can
be created by first mounting the cgroup filesystem.
Czyli to jest tylko dla ruchu wychodzącego ?
Offline
Jacekalex wiesz może co oznacza 0xffff w poniższym zapisie?
tc filter add dev eth0 parent 1:0 protocol ip u32 match ip dport 22 0xffff \ match ip dst 192.168.0.70/32 classid 1:20
Można jakoś przy pomocy tego tc filter sprecyzować zakres portów?
Offline
Jacekalex wiesz może co oznacza 0xffff w poniższym zapisie?
Zapis szesnastkowy.
Jak zakres portów w filtrach tc zrobić, nie wiem.
Ale na wszelki wypadek w iptables są cele MARK - markowanie w stylu zjadliwym dla iproute2, i CLASSIFY - bezpośrednie wrzucanie do kolejek iproute2 o określonym identyfikatorze kolejki.
Jak oznaczać zakres portów w firewallu, to chyba nie tylko ja tu wiem.....;)
Gdzieś tu w starych postach będzie, jak kiedyś walczyłem z kolejkami layer7, imq i CLASSIFY, ze stosownymi przykładami.
Ostatnio edytowany przez Jacekalex (2014-01-28 15:26:57)
Offline
No ja tych sposobów to chyba 4 czy 5 znalazłem póki co. Ale tak się zastanawiam czy idzie to jakoś łatwo zrobić przez tc filter.
Wiem co to zapis hexalny ale co oznacza dport 22 0xffff , po co jest to 0xffff bo inaczej tc filter nie przyjmuje samego dport 22
Offline
Już wiem co to znaczy, to 0xffff to maska, coś jak w przypadku adresów ip, z tym, że tu jest 16^4=65536 czyli tyle ile jest portów, i przez ustawienie maski się ustawia zakres portów czyli np:
4096 0xf000 = sport 4096-8191
8192 0xe000 = sport 8192-16383
Ten kto projektował to ustawianie zakresów w tc, był sadystą. xD
Ostatnio edytowany przez morfik (2014-01-29 03:35:58)
Offline
iptables -j CLASSIFY --help
iptables -j MARK --help
Dlatego klasyfikatory w tc operujące na portach i adresach nie są dla nikogo niezbędne.
Offline
Ja wiem. Tylko mnie zastanawiał sam ten tc filter -- ja nie potrafię tak przejść obok czegoś niewyjaśnionego bo mi się to potem po nocach śni. xD Ogarnąłem go przez cgroups póki co.
Problem z iptables w przypadku qbittorrenta jest taki, że on nie złapie go. Bo może i mam ustawione w qbittorrencie porty 20000-23000 ale on i tak używa losowych z przedziału 10000-60000 więc tego nie ogarnę sobie przez iptables, chyba że jest jakiś sposób na to?. Cgroup ładnie oznacza procesy i porty nie mają chyba żadnego znaczenia już. Można to zobaczyć zresztą po pingu. Jak dałem max upload na qbittorrencie to pingi miałem około 600, to przy oznaczaniu przy iptables, (narazie mam tylko ruch wychodzący, później popatrzę jak oznaczać ruch przychodzący). W przypadku cgroups ping mam 20, przy max obciążeniu łącza. Także jest spora różnica.
Łącze póki co podzieliłem na 3 części 450 250 i 250kbit, -- 450 jest na qbittorrenta, 250 na ff i minitube póki co, a na drugie 250 idzie cały pozostały ruch. Jeśli nie są wykorzystywane 1:3 i 1:4, wtedy qbittorrent (1:2) zjada całe łącze, przynajmniej upload. Dzięki takiemu rozwiązaniu dziennie będę mógł wysłać około 10GiB obrazów z linuxem i to nawet nie zauważając tego. xD
Interfaces | RX bps pps %| TX bps pps % ->lo | 573B 9 | 573B 9 eth0 | 98.28KiB 161 | 117.93KiB 202 qdisc 1: (htb) | 0 0 | 117.92KiB 202 class 1:1 (htb) | 0 0 | 117.92KiB 202 102% class 1:2 (htb) | 0 0 | 117.81KiB 200 214% class 1:3 (htb) | 0 0 | 0 0 0% class 1:4 (htb) | 0 0 | 117B 1 0% cls :1 (cgroup) | 0 0 | 0 0
I tak wygląda ping obecnie:
$ ping wp.pl PING wp.pl (212.77.100.101) 56(84) bytes of data. 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=1 ttl=247 time=23.5 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=2 ttl=247 time=21.9 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=3 ttl=247 time=22.5 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=4 ttl=247 time=22.1 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=5 ttl=247 time=32.5 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=6 ttl=247 time=21.2 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=7 ttl=247 time=21.2 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=8 ttl=247 time=22.5 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=9 ttl=247 time=23.2 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=10 ttl=247 time=22.7 ms 64 bytes from www.wp.pl (212.77.100.101): icmp_seq=11 ttl=247 time=24.5 ms ^C --- wp.pl ping statistics --- 11 packets transmitted, 11 received, 0% packet loss, time 9997ms rtt min/avg/max/mdev = 21.206/23.486/32.565/3.022 ms
Jest jakieś narzędzie co zapisuje ten podział łącza? Czy to trzeba za każdym razem przy starcie maszyny ładować ze skryptu?
To jest generalnie jedno z dwóch celów czyli podział łącza tak by w przypadku obciążenia przez qbittorrenta, pozostały ruch nie miał pingów 600, ale jeszcze jeszcze druga część czyli priorytet. Bo obecnie to jakbym wysyłał coś przez ff to ten zje swój przydział i qbittorrent swój (tak dla uproszczenia). Da radę nadać priorytet paśmie firefoxa tak by w przypadku gdy firefox chciał więcej zasobów, to by je sobie pożyczył z pasma qbittorrenta ograniczając tym dostępne zasoby qbittorrentowi?
Offline
Qbittorrenta puść z innego pacjenta, złapiesz go wtedy modułem owner firewalla i gotowe.
Przy okazji chroot wyjdzie torrentom na zdrowie - bezpieczeństwo.
RTFM:
iptables -m owner --help
Offline
owner to dopasowanie, CLASSIFY to cel.
Ja bym jednak oznaczył pakiety dopasowane ownerem przez CONNMARK
a potem pakiety oznaczone connmarkiem pakował do kolejek w obu kierunkach.
CONNMARK nadaje znacznik dla połączenia, widać ten mark w tablicy conntrack, dlatego pozwala regulować pasmo dla połączenia w obie strony.
Tu masz przykład - jeszcze z czasów, jak istniało L7:
http://wampir.mroczna-zaloga.org/archives/21-o-kszt … iu-ruchu.html
Ostatnio edytowany przez Jacekalex (2014-01-29 18:27:30)
Offline
Przetestowałem ten -m owner z -j CLASSIFY,
# iptables -t mangle -A POSTROUTING -o eth0 -m owner --uid-owner p2p -j CLASSIFY --set-class 1:2 # iptables -t mangle -A POSTROUTING -o eth0 -m owner --uid-owner morfik -j CLASSIFY --set-class 1:3
nawet rozdziela po userach:
Every 1.0s: iptables -t mangle -nvL Wed Jan 29 20:50:08 2014 Chain PREROUTING (policy ACCEPT 61638 packets, 7766K bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 61214 packets, 7697K 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 74377 packets, 85M bytes) pkts bytes target prot opt in out source destination Chain POSTROUTING (policy ACCEPT 75003 packets, 85M bytes) pkts bytes target prot opt in out source destination 82338 97M CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1001 CLASSIFY set 1:2 1951 192K CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CLASSIFY set 1:3
Choć trochę ten qbittorrent na osobnym userze ssie. Niby można go bez problemu na nox podpiąć, tylko trzeba przegrać całą konfigurację, a graficznie to już nie wiem jak go odpalić jako user p2p, raczej nie ma żadnego sposobu by kliknąć w ikonkę i by się odpalił jako user p2p? xD
Zaraz sobie jeszcze rzucę okiem na ten CONNMARK
Offline
Drugie konto musisz dodać do grupy video, i innych, które potrzebne.
Potem w sudoers ustawić odpalanie poleceń z uprawieniami usera (u ciebie p2p), i do kompletu skrypt:
#!/bin/bash sudo -u pies HOME=/home/pies qbittorrent $*
SOA#1 i nic nie ssie - odpalane skryptem.
Nie chciało mi się tylko rzeźbić, zeby ziarenka kopiował do /home/pies i automatycznie odpalał.
Ale sznurki w FF działają, jak je zapiąłem do skrypta.
User:
pies:x:1004:1004::/home/pies:/bin/false
Grupy:
groups pies audio video pies
Ostatnio edytowany przez Jacekalex (2014-01-29 21:14:49)
Offline
Ok, tym się zajmę później. Czytam teraz ten text co podesłałeś ale się trochę pogubiłem:
Obecnie mam takie ustawie tc:
root:/# tc qdisc add dev eth0 parent root handle 1:0 htb default 4 root:/# tc class add dev eth0 parent 1:0 classid 1:1 htb rate 950kbit ceil 950kbit root:/# tc class add dev eth0 parent 1:1 classid 1:2 htb rate 450kbit ceil 950kbit root:/# tc class add dev eth0 parent 1:1 classid 1:3 htb rate 250kbit ceil 950kbit root:/# tc class add dev eth0 parent 1:1 classid 1:4 htb rate 250kbit ceil 950kbit
I do tego wpisy w iptables.
Do markowania:
root:~# iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner p2p -j CONNMARK --set-mark 2 root:~# iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner morfik -j CONNMARK --set-mark 3 root:~# iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner root -j CONNMARK --set-mark 3
i do przesyłania zmarkowanych do odpowiedniej klasy w tc
root:~# iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 2 -j CLASSIFY --set-class 1:2 root:~# iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 3 -j CLASSIFY --set-class 1:3
Z tego co widzę to nawet działa
Every 1.0s: iptables -t mangle -nvL Wed Jan 29 22:27:28 2014 Chain PREROUTING (policy ACCEPT 211K packets, 126M bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 210K packets, 126M 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 190K packets, 200M bytes) pkts bytes target prot opt in out source destination 164K 224M CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1001 CONNMARK set 0x2 39924 1749K CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 1000 CONNMARK set 0x3 308 160K CONNMARK all -- * eth0 0.0.0.0/0 0.0.0.0/0 owner UID match 0 CONNMARK set 0x3 Chain POSTROUTING (policy ACCEPT 191K packets, 200M bytes) pkts bytes target prot opt in out source destination 148K 199M CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x2 CLASSIFY set 1:2 39963 1875K CLASSIFY all -- * eth0 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3
ale to dalej jest tylko ruch wychodzący. Mam łącze 10/1mbit i jak to ogarnąć? Stworzyć mu kolejkę 10mbit zamiast 950kbit? On już w tej chwili łapie pakiety przychodzące do kolejek w tc?
Offline
Musisz zrobić też klasyfikację dla przychodzących.
Chyba najlepiej zrobić sobie wirtualny interfejs ifb, i na nim kolejki przychodzące.
Np tak:
#!/bin/sh INTERFACE="eth0" #UPLOAD - ifb0 tc qdisc del dev $INTERFACE root ip link set ifb0 up tc qdisc add dev $INTERFACE root handle 1: htb default 11 tc filter add dev $INTERFACE parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb0 #DONWLOAD - ifb1 tc qdisc del dev $INTERFACE handle ffff: ingress ip link set ifb1 up tc qdisc add dev $INTERFACE handle ffff: ingress tc filter add dev $INTERFACE parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb1
Rzuć też okiem na to:
https://wiki.gentoo.org/wiki/Traffic_shaping
http://wampir.mroczna-zaloga.org/archives/77-ifb-zamiast-imq.html
Ostatnio edytowany przez Jacekalex (2014-01-29 23:19:52)
Offline
Jak mam przekierować pakiety przychodzące do odpowiedniej klasy w iptables? Bo ten -j CLASSIFY nie działa na łańcuchach ruchu przychodzącego. xD
Generalnie to teraz wygląda tak:
Interfaces | RX bps pps %| TX bps pps % lo | 2B 0 | 2B 0 ->eth0 | 1.14MiB 792 | 29.25KiB 480 qdisc 1: (htb) | 0 0 | 27.34KiB 480 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.13MiB 792 cls none (u32) | 0 0 | 0 0 cls 8000: (u32) | 0 0 | 0 0 cls 8000:800 (u32) | 0 0 | 0 0 ifb0 | 27.34KiB 480 | 27.34KiB 480 qdisc 1: (htb) | 0 0 | 27.34KiB 480 class 1:1 (htb) | 0 0 | 27.30KiB 480 2% class 1:2 (htb) | 0 0 | 0 0 0% class 1:3 (htb) | 0 0 | 27.30KiB 480 9% class 1:4 (htb) | 0 0 | 0 0 0% ifb1 | 1.13MiB 783 | 1.13MiB 783 qdisc 1: (htb) | 0 0 | 1.13MiB 783 class 1:1 (htb) | 0 0 | 1.13MiB 783 998% class 1:2 (htb) | 0 0 | 0 0 0% class 1:3 (htb) | 0 0 | 0 0 0% class 1:4 (htb) | 0 0 | 1.13MiB 783 3793%
Czy to normlane, że ten ruch przychodzący ma takie wielkie %?
Te klasy w tych interfejsach powinny się różnić czy mogą być tak jak wyżej?
I to jeszcze:
tc qdisc add dev $INTERFACE root handle 1: htb default 11
Do czego się odnosie ten default 11?
Ostatnio edytowany przez morfik (2014-01-30 02:00:54)
Offline
cat /etc/ppp/ip-up.d/60-ifb.sh #!/bin/sh INTERFACE="$1" #UPLOAD - ifb0 tc qdisc del dev $INTERFACE root ip link set ifb0 up tc qdisc add dev $INTERFACE root handle 1: htb default 11 tc filter add dev $INTERFACE parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb0 tc qdisc add dev ifb0 root handle 1: sfq 2>/dev/null #DONWLOAD - ifb1 tc qdisc del dev $INTERFACE handle ffff: ingress ip link set ifb1 up tc qdisc add dev $INTERFACE handle ffff: ingress tc filter add dev $INTERFACE parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb1 tc qdisc add dev ifb1 root handle 1: sfq
Na desktopie, automatycznie powstaje przy podnoszeniu demona pppd.
Nic niczego nie blokuje, podzialem pasma zajmuje się moduł/kolejka sfq
I grzecznie idzie przez karty ifb.
Dowód rzeczowy:
http://postimg.org/image/68qdr2tyl/
Ruch przychodzący? łańcuch PREROUTING - tam nie wchodzi?
POSTROUTING na interfejsie ifb - nie wchodzi?
Tu masz na obrazku tor pakietów przez netfiltera:
http://jacekalex.sh.dug.net.pl/Iptables-packet-flow.png
iptables -t mangle -A OUTPUT -o ifb0 -m owner --uid-owner pies -j CONNMARK --set-mark 2 iptables -t mangle -A POSTROUTING -o ifb0 -m connmark --mark 2 -j CLASSIFY --set-class 1:2
Takie reguły weszły czysto, zobacz, czy działają.
Oczywiście kolejki będą w takim przypadku na ifb0.
Kolejki zawsze działają na wyjściu, dlatego do kolejkowania wejścia na desktopie musisz mieć wirtualny interfejs, na którym zrobisz kolejki, imq albo ifb.
Ostatnio edytowany przez Jacekalex (2014-01-30 03:23:43)
Offline
No ja mam obecnie coś takiego:
ip link set ifb0 up tc qdisc add dev eth0 parent root handle 1:0 htb default 4 tc filter add dev eth0 parent 1:0 protocol ip prio 10 u32 match ip dst 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb0 ip link set ifb1 up tc qdisc add dev eth0 handle ffff: ingress tc filter add dev eth0 parent ffff: protocol ip prio 10 u32 match ip src 0.0.0.0/0 flowid 1:1 action mirred egress redirect dev ifb1 tc qdisc add dev ifb1 root handle 1: htb default 4 tc class add dev ifb1 parent 1:0 classid 1:1 htb rate 9500kbit ceil 9500kbit tc class add dev ifb1 parent 1:1 classid 1:2 htb rate 4500kbit ceil 9500kbit tc class add dev ifb1 parent 1:1 classid 1:3 htb rate 2500kbit ceil 9500kbit tc class add dev ifb1 parent 1:1 classid 1:4 htb rate 2500kbit ceil 9500kbit tc qdisc add dev ifb0 root handle 1: htb default 4 tc class add dev ifb0 parent 1:0 classid 1:1 htb rate 950kbit ceil 950kbit tc class add dev ifb0 parent 1:1 classid 1:2 htb rate 450kbit ceil 950kbit tc class add dev ifb0 parent 1:1 classid 1:3 htb rate 250kbit ceil 950kbit tc class add dev ifb0 parent 1:1 classid 1:4 htb rate 250kbit ceil 950kbit
I do tego mam w iptables:
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 morfik -j CONNMARK --set-mark 3 iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner root -j CONNMARK --set-mark 3 iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 2 -j CLASSIFY --set-class 1:2 iptables -t mangle -A POSTROUTING -o eth0 -m connmark --mark 3 -j CLASSIFY --set-class 1:3
No i jak patrze w bmon to ruch wychodzący jest klasyfikowany tak jak powinien ale przychodzący leci na 1:4 czyli domyślny. I pytanie jest jak to puścić na 1:2 i 1:3 ?
Offline
POSTROUTING możesz zrobić dla karty ifb0 albo ifb1, pisałem o tym wyżej, tylko za szybko odpowiedziałeś.
Przeczytaj jeszcze raz mój poprzedni post.
Może wystarczy:
iptables -t mangle -A POSTROUTING -o ifb1 -m connmark --mark 2 -j CLASSIFY --set-class 1:2 iptables -t mangle -A POSTROUTING -o ifb1 -m connmark --mark 3 -j CLASSIFY --set-class 1:3
albo:
iptables -t mangle -A OUTPUT -o ifb1 -m connmark --mark 2 -j CLASSIFY --set-class 1:2 iptables -t mangle -A OUTPUT -o ifb1 -m connmark --mark 3 -j CLASSIFY --set-class 1:3
Ostatnio edytowany przez Jacekalex (2014-01-30 03:45:24)
Offline
Zrobiłem właśnie ale nic nie leci do tych reguł:
Every 1.0s: iptables -t mangle -nvL Thu Jan 30 03:26:51 2014 Chain PREROUTING (policy ACCEPT 280 packets, 99904 bytes) pkts bytes target prot opt in out source destination Chain INPUT (policy ACCEPT 280 packets, 99904 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 274 packets, 31187 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 1001 CONNMARK set 0x2 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 -- * ifb0 0.0.0.0/0 0.0.0.0/0 owner UID match 0 CONNMARK set 0x3 0 0 CONNMARK all -- * ifb1 0.0.0.0/0 0.0.0.0/0 owner UID match 1001 CONNMARK set 0x2 0 0 CONNMARK all -- * ifb1 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 0 CONNMARK set 0x3 Chain POSTROUTING (policy ACCEPT 274 packets, 31187 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 0x2 CLASSIFY set 1:2 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 0x2 CLASSIFY set 1:2 0 0 CLASSIFY all -- * ifb1 0.0.0.0/0 0.0.0.0/0 connmark match 0x3 CLASSIFY set 1:3
A tu reguły:
# iptables -t mangle -S -P PREROUTING ACCEPT -P INPUT ACCEPT -P FORWARD ACCEPT -P OUTPUT ACCEPT -P POSTROUTING ACCEPT -A OUTPUT -o ifb0 -m owner --uid-owner 1001 -j CONNMARK --set-xmark 0x2/0xffffffff -A OUTPUT -o ifb0 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o ifb0 -m owner --uid-owner 0 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o ifb1 -m owner --uid-owner 1001 -j CONNMARK --set-xmark 0x2/0xffffffff -A OUTPUT -o ifb1 -m owner --uid-owner 1000 -j CONNMARK --set-xmark 0x3/0xffffffff -A OUTPUT -o ifb1 -m owner --uid-owner 0 -j CONNMARK --set-xmark 0x3/0xffffffff -A POSTROUTING -o ifb0 -m connmark --mark 0x2 -j CLASSIFY --set-class 0001:0002 -A POSTROUTING -o ifb0 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o ifb1 -m connmark --mark 0x2 -j CLASSIFY --set-class 0001:0002 -A POSTROUTING -o ifb1 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003
Offline
Spróbuj na ifb OUTPUT zamiast POSTROUTING.
U mnie weszły obie wersje czysto:
iptables -t mangle -S | grep ifb1 -A OUTPUT -o ifb1 -m connmark --mark 0x2 -j CLASSIFY --set-class 0001:0002 -A OUTPUT -o ifb1 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003 -A POSTROUTING -o ifb1 -m connmark --mark 0x2 -j CLASSIFY --set-class 0001:0002 -A POSTROUTING -o ifb1 -m connmark --mark 0x3 -j CLASSIFY --set-class 0001:0003
Jak nie leci przy OUTPUT ani POSTROUTING, to ja bym jeszcze spróbował opcji save-mark i restore-mark CONNMARKA.
Sznurek:
http://www.lug.or.kr/docs/iptables-tutorial/chunkyhtml/x9125.htm
Ostatnio edytowany przez Jacekalex (2014-01-30 04:03:48)
Offline
Czym ty to oznaczyłeś? Bo ja tam widzę tylko klasyfikację, a na podstawie czego? Poza tym, co rozumiesz pod pojęciem weszło? Zlicza bi pakiety? Idę spać, jutro może coś lepiej pójdzie. xD
Ostatnio edytowany przez morfik (2014-01-30 04:44:27)
Offline