Dziękuję za zainteresownie tematem.
Skrypt jest przeróbką rchtb Zciecha wersja z grupami i imq. Zmiany polegają przede wszystkim na utworzeniu dodatkowych klas 2: i 3: przypisanych do imq2 i imq3 (download i upload przez drugiego WANa) i zdublowaniu odpowiednich podklas, filtrów itp.
Generalnie wszystko działa (jeśli odpuszczę sobie wydzielanie ruchu p2p). Wtedy filtr wrzuca mi do odpowiednich kolejek na podstawie adresu IP, a z MARK'a korzysta tylko tablica reguł routowania (ip rule), która na podstawie fwmark wypuszcza pakiety odpowiednim WANem.
@ -MW-
Nie rozumiem co miałeś na myśli
-MW- pisze:
z tym samym prio sie nie uda, musza byc rozne.
Wyczytałem gdzieś, że jeśli dwa filtry mają takie same prio, to są wykonywane w kolejności wpisania. Dałem prio=4, bo ten filtr miał być wykonany przed filtrem dla ruchu "normalnego" (nie p2p) z prio=5, przy którym sprawdzany jest tylko IP.
Cytuj:
spruboj dodac reguly filtrujace:
Cytuj:
tc filter add dev imq1 parent 1:0 protocol ip prio 4 handle 0x6 fw flowid 1:2065
tc filter add dev imq1 parent 1:0 protocol ip prio 4 u32 match ip dst 10.1.1.55 flowid 1:2065
To nie pójdzie, ponieważ:
1) powyższe wykonywane jest w pętli i dostaniemy:
tc filter add dev imq1 parent 1:0 protocol ip prio 4 handle 0x6 fw flowid 1:2065
a za chwilę:
tc filter add dev imq1 parent 1:0 protocol ip prio 4 handle 0x6 fw flowid 1:2066
co wygeneruje błąd:
RTNETLINK answers: File exists
Co nie jest dziwne, bo ten sam pakiet kierujemy do dwóch klas na raz.
2) taki zapis wykona sumę logiczną warunków a potrzebny jest iloczyn logiczny. Czyli muszą być spełnione OBYDWA warunki, żeby skierować pakiet do klasy 2066 a nie jeden DOWOLNY z nich.
Natomiast rozwiązanie zaproponowane przez zciecha powinno się u mnie sprawdzić. Nie brałem czegoś takiego pod uwagę, bo gdzieś wyczytałem, że filtry powinno się podpinać pod klasę główną.
Zastanawiam się jeszcze, czy klasa x:$[1010+$CNT] jest niezbędna. Czy nie możnaby się ograniczyć do skierowania całego ruchu z/do danego IP do klasy x:$[10+$CNT] i odfiltrować p2p do x:$[2010+$CNT]? Czy ruch "normalny" musi koniecznie mieć osobną podklasę?
Cytuj:
$i -t mangle -A PREHTB -s $IP -m ipp2p --ipp2p -j MARK --set-mark $MARK0_p2p
oczywiscie mark MARK0_p2p jest inny dla kazdego IP
Akurat u mnie są tylko 4 możliwe wartości MARKa. Nie chcę komplikować reguł routowania:
[root@nf5000 ~]# ip rule list
0: from all lookup local
50: from all lookup main
201: from 83.83.0.0/16 lookup WAN1
202: from 82.82.82.0/24 lookup WAN2
210: from all fwmark 9 lookup WAN2
211: from all fwmark 8 lookup WAN1
212: from all fwmark 7 lookup WAN2
213: from all fwmark 6 lookup WAN1
222: from all lookup DWA_WANY
32766: from all lookup main
32767: from all lookup default