No chyba nie bardzo - u mnie po wstawieniu tego kodu ruch wychodzący userów szedł klasą dla gości.
W końcu doszedłem do wniosku, że to sprawka CONNMARKA:
$i -t mangle -A PREROUTING -j CONNMARK --restore-mark
$i -t mangle -A PREROUTING -m ipp2p --ipp2p -j MARK --set-mark 2
$i -t mangle -A PREROUTING -m mark --mark 2 -j CONNMARK --save-mark
$i -t mangle -A PREROUTING -m mark ! --mark 0x0 -j RETURN
Bo tak:
Wcześniej (wyżej) jest:
$i -t mangle -A PREROUTING -s $IP -j MARK --set-mark $MARK
czyli znakujemy pakiety userów (wychodzące) markiem np. 11, 12, 13 etc.
A dalej jest linijka z CONNMARKIEM - i co on robi ? Ano znaczy każdy pakiet takim samym markiem, jaki ma połączenie, do którego ten pakiet należy. Jeżeli nie jest to połączenie p2p (z markiem 2), to jest to połączenie bez mark-a czyli mark=0. Skoro tak, to pakiety wcześniej zaznaczone markiem np.11, a nie będące pakietami p2p, dostają mark 0.
Wtedy "wyłapuje" je tylko filtr "inne":
$h filter add dev $WANINT parent 2:0 protocol ip prio 9 u32 match ip dst 0/0 flowid 2:3
- który wrzuca je do klasy 2:3 czyli "goście".
Wydaje się, że problem można rozwiązać w ten sposób, że w htb.conf całą sekcję "Pasmo dla p2p" przenosimy "przed" sekcję "Userzy".
Dzięki temu, pakiety najpierw są sprawdzane i markowane pod kątem p2p (jezeli pakiet jest p2p to dostaje mark 2 i "wychodzi" z łańcucha - linijka z RETURN - musi być !!!), a dopiero potem (jezeli nie jest p2p) dostaje mark usera.
Zmiana kolejności filtrów tc w tym przypadku nie przeszkadza, bo i tak o kolejności ich przeszukiwania decydują priorytety filtrów.
Tak zmodyfikowany skrypt testuję od kilku dni i wydaje się, że wszystko jest ok.
Dla własnej wygody dodałem jeszcze ustawianie w htb.conf max. transferu dla p2p osobno dla każdej pory i pare innych pierdół - zainteresowanym mogę podesłać.