Freesco, NND, CDN, EOS

http://www.freesco.pl
Dzisiaj jest sobota, 5 lipca 2025, 20:20

Strefa czasowa UTC+2godz.




Nowy temat Odpowiedz w temacie  [ Posty: 8 ] 
Autor Wiadomość
Post: czwartek, 28 lutego 2008, 20:56 
Offline

Rejestracja: poniedziałek, 31 stycznia 2005, 19:55
Posty: 74
Lokalizacja: Oświęcim
Witam
Pracuję nad skryptami umożliwiającymi routing z kilku LANów na dwa WANy. Podział ma się odbywać w ten sposób, że klienci są statycznie przypisani do konkretnego łącza. Każdy klient otrzymuje klasę z prędkością np 512kbps a w niej dwie podklasy: dla ruchu p2p (o ograniczonej prędkości do 150kbps) i pozostałego (prędkość do 512kbps).

Odpowiednie regułki iptables markują pakiety w ten sposób:
gość przypisany do WAN1, ruch "normalny" - MARK = 0x8
gość przypisany do WAN2, ruch "normalny" - MARK = 0x9
gość przypisany do WAN1, ruch p2p - MARK = 0x6
gość przypisany do WAN2, ruch p2p - MARK = 0x7

I teraz mam pewien kłopot z filtrami htb. Chciałem wyłapać ruch po dwóch kryteriach: źródłowym/docelowym adresie IP oraz po znaczniku MARK.

Żeby sklasyfikować po MARK - użyłbym przykładowo:
: [/] [] ()
  tc filter add dev imq1 parent 1:0  protocol ip prio 4 handle 0x6 fw flowid 1:2065

po ip:
: [/] [] ()
  tc filter add dev imq1 parent 1:0  protocol ip prio 4 u32 match ip dst 10.1.1.55 flowid 1:2065

Próbując połączyć obydwa warunki zastosowałem konstrukcję:
: [/] [] ()
  tc filter add dev imq1 parent 1:0  protocol ip prio 4 handle 0x6 u32 match ip dst 10.1.1.55 flowid 1:2065

Oczekiwałem, że do klasy 1:2065 zostaną skierowane tylko te pakiety, idące do ip 10.1.1.55, które są jednocześnie zamarkowane znacznikiem 0x6 (p2p). Jednak teraz do klasy tej trafia wszystko, co jest skierowane do 10.1.1.55 niezależnie od tego, jak jest zamarkowane. Przeszukałem net i znalazłem dużo przykładów klasyfikowania pakietów, ale zawsze opierały się one albo na u32, albo na fwmark, ale nigdy na obu łącznie.
Proszę o podpowiedź, jak połączyć oba warunki w jednym filtrze.

Poniżej fragmenty skryptu. Celowo wyciąłem z niego nieistotne dla sprawy fragmenty, w szczególności dotyczące rozróżnienia transferów zależnie od pory dnia.

: [/] [] ()
MARK1=0x8
MARK2=0x9
MARK1_P2P=0x6
MARK2_P2P=0x7

  awk 'sub("^[ \t]*","") && /^[0123456789G]/ {print $0}' $hostfile | while read IP NAZWA USERDOWN[1] USERUP[1] USERDOWN[2] USERUP[2] USERDOWN[3] USERUP[3] USERDOWN[4] USERUP[4] LACZE REM; do
        CNT=$[$CNT+1]
          if   [ $LACZE = WAN1 ]; then
            USERDOWN0=$USERDOWN1
            USERUP0=$USERUP1
            WANDOWN0=$WANDOWN1
            WANUP0=$WANUP1
            LANINT0=$LANINT1
            WANINT0=$WANINT1
            CP=1                # Prefix identyfikatora klasy download '1:'
            MARK0=$MARK1
            MARK_P2P=$MARK1_P2P
          elif [ $LACZE = WAN2 ]; then
            USERDOWN0=$USERDOWN2
            USERUP0=$USERUP2
            WANDOWN0=$WANDOWN2
            WANUP0=$WANUP2
            LANINT0=$LANINT2
            WANINT0=$WANINT2
            CP=3                # Prefix identyfikatora klasy download '3:'
            MARK0=$MARK2
            MARK_P2P=$MARK2_P2P
          else echo "Błędna nazwa łącza:"$lacze dla $ip; exit
          fi

          # DOWNLOAD  1: lub 3:
          $h class add dev $LANINT0 parent $CP:2 classid $CP:$[10+$CNT] htb rate ${USERDOWN0}kbit ceil ${USERDOWN[$pora]}kbit prio 3 quantum 1500
          $h qdisc add dev $LANINT0 parent $CP:$[10+$CNT] $SFQ_LAN
          $h class add dev $LANINT0 parent $CP:$[10+$CNT] classid $CP:$[1010+$CNT] htb rate ${USERDOWN0}kbit ceil ${USERDOWN[$pora]}kbit prio 3 quantum 1500
          $h qdisc add dev $LANINT0 parent $CP:$[1010+$CNT] $SFQ_LAN
          $h filter add dev $LANINT0 parent $CP:0 protocol ip prio 5 u32 match ip dst $IP flowid $CP:$[1010+$CNT]

          # UPLOAD  2: lub 4:
          $h class add dev $WANINT0 parent $[$CP+1]:1 classid $[$CP+1]:$[10+$CNT]   htb rate ${USERUP0}kbit ceil

${USERUP[$pora]}kbit prio 3 quantum 1500
          $h qdisc add dev $WANINT0 parent $[$CP+1]:$[10+$CNT] $SFQ_WAN
          $h class add dev $WANINT0 parent $[$CP+1]:$[10+$CNT] classid $[$CP+1]:$[1010+$CNT] htb rate ${USERUP0}kbit ceil

${USERUP[$pora]}kbit prio 3 quantum 1500
          $h qdisc add dev $WANINT0 parent $[$CP+1]:$[1010+$CNT] $SFQ_WAN
          $h filter add dev $WANINT0 protocol ip prio 5 parent $[$CP+1]:0 u32 match ip src $IP flowid $[$CP+1]:$[1010+$CNT]


          $i -t mangle -A PREHTB -s $IP -j MARK --set-mark $MARK0
          $i -t mangle -A PREHTB -d $IP -j MARK --set-mark $MARK0

          if [ $P2P_ON = 1 ];then
            $i -t mangle -A PREHTB -s $IP -m ipp2p --ipp2p -j MARK --set-mark $MARK_P2P
            $i -t mangle -A PREHTB -d $IP -m ipp2p --ipp2p -j MARK --set-mark $MARK_P2P

            #DL
            $h class add dev $LANINT0 parent $CP:$[10+$CNT] classid $CP:$[2010+$CNT] htb rate  1kbit ceil ${USERDOWN_P2P[$pora]}kbit prio 6 quantum 1500
            $h qdisc add dev $LANINT0 parent $CP:$[2010+$CNT] $SFQ_LAN
# Tutaj jest problem:
            $h filter add dev $LANINT0 parent $CP:0  protocol ip prio 4 handle $MARK_P2P u32 match ip dst $IP flowid $CP:$[2010+$CNT]

            # UPL
            $h class add dev $WANINT0 parent $[$CP+1]:$[10+$CNT] classid $[$CP+1]:$[2010+$CNT] htb rate 1kbit ceil ${USERUP_P2P[$pora]}kbit prio 3 quantum 1500
            $h qdisc add dev $WANINT0 parent $[$CP+1]:$[2010+$CNT] $SFQ_WAN
# Tutaj jest problem:
            $h filter add dev $WANINT0 parent $[$CP+1]:0 protocol ip prio 4  handle $MARK_P2P u32 match ip src $IP flowid $[$CP+1]:$[2010+$CNT]
          fi
   done


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: czwartek, 28 lutego 2008, 22:08 
Offline
Użytkownik

Rejestracja: sobota, 14 maja 2005, 15:07
Posty: 3177
Lokalizacja: Busko-Zdrój
cos mi sie zdaje ze wyrwales nie sprawdzone kawalki skryptow.

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


z tym samym prio sie nie uda, musza byc rozne.
laczenie mark i u32 mnie nie wyszlo.
Cytuj:
h filter add dev $WANINT0 parent $[$CP+1]:0 protocol ip prio 4 handle $MARK_P2P u32 match ip src $IP flowid $[$CP+1]:$[2010+$CNT]

_________________
Pomógł? wypij jego zdrowie.
http://nnd-linux.pl/faq.php
http://wiki.nnd.freesco.pl/index.php/FAQ


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 29 lutego 2008, 00:12 
Offline
PGF

Rejestracja: niedziela, 14 lipca 2002, 14:33
Posty: 3234
Lokalizacja: Radziejów
Nie jest przewidziane by łączyć oba filtry w jednej regule

Ale....

możesz pakietom juz zamarkowanym zmienic mark np.

if [ $P2P_ON = 1 ];then
$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




: [/] [] ()
#  Znakowanie p2p

$i -t mangle -A PREROUTING -m ipp2p --ipp2p -j MARK --set-mark 2

 if [ "$layer7" == "1" ]; then
    for p in $programy; do
        $i -t mangle -A PREROUTING -m layer7 --l7proto $p -j MARK --set-mark 2
     done
 fi
 $i -t mangle -A PREROUTING -p udp -j MARK --set-mark 2

#/-----------------/

                # DOWNLOAD
                $h class add dev $LANINT parent 1:2 classid 1:$[10+$CNT] htb rate ${USERDOWN0}kbit ceil ${USERDOWN[$pora]}kbit prio 3 quantum 1500
                $h class add dev $LANINT parent 1:$[10+$CNT] classid 1:$[1010+$CNT] htb rate ${USERDOWN0}kbit ceil ${USERDOWN[$pora]}kbit prio 3 quantum 1500
                $h qdisc add dev $LANINT parent 1:$[1010+$CNT] $SFQ_LAN
                $h filter add dev $LANINT parent 1:0 protocol ip prio 5 u32 match ip dst $IP flowid 1:$[10+$CNT]
                $h filter add dev $LANINT parent 1:$[10+$CNT] protocol ip prio 5 u32 match ip dst $IP flowid 1:$[1010+$CNT]

                # UPLOAD
                $h class add dev $WANINT parent 2:1 classid 2:$[10+$CNT] htb rate ${USERUP0}kbit ceil ${USERUP[$pora]}kbit prio 4 quantum 1500
                $h class add dev $WANINT parent 2:$[10+$CNT] classid 2:$[1010+$CNT] htb rate ${USERUP0}kbit ceil ${USERUP[$pora]}kbit prio 4 quantum 1500
                $h qdisc add dev $WANINT parent 2:$[1010+$CNT] $SFQ_WAN
                $h filter add dev $WANINT protocol ip prio 5 parent 2:0 u32 match ip src $IP flowid 2:$[10+$CNT]
                $h filter add dev $WANINT protocol ip prio 5 parent 2:$[10+$CNT] u32 match ip src $IP flowid 2:$[1010+$CNT]
                if [ $pora = 2 -a $P2P_ON = 1 ];then
                    $h class add dev $LANINT parent 1:$[10+$CNT] classid 1:$[2010+$CNT] htb rate  5kbit ceil ${USERDOWN_P2P[$pora]}kbit prio 3 quantum 1500
                    $h qdisc add dev $LANINT parent 1:$[2010+$CNT] $SFQ_LAN
                    $h filter add dev $LANINT parent 1:$[10+$CNT]  protocol ip prio 4  handle 2 fw flowid 1:$[2010+$CNT]
                    $h class add dev $WANINT parent 2:$[10+$CNT] classid 2:$[2010+$CNT] htb rate 5kbit ceil ${USERUP_P2P[$pora]}kbit prio 3 quantum 1500
                    $h qdisc add dev $WANINT parent 2:$[2010+$CNT] $SFQ_WAN
                    $h filter add dev $WANINT parent 2:$[10+$CNT] protocol ip prio 4  handle 2 fw flowid 2:$[2010+$CNT]
                fi



rozwiazane zastosowane w pakiecie:
http://ww2.devel-nnd.brb.pl/nnd/pakiety ... pkg.tar.gz
tylko tam jest zepsute markowanie, bo skorzystalem z CONNMARK, ale to rozwiazanie zle markuje, trzeba wywalic cale markowanie i zastosowac to co podalem wyzej.

A dzila to tak:
pakiety trafiaja do kolejki
x:$[10+$CNT]
w ktorej jest z kolei kolejka
x:$[1010+$CNT] prio 4 dla ruchu normalnego
oraz kolejka
x:$[2010+$CNT] prio 3 do ktorej tafia ruch zamarkowany p2p,
ale tylko ten, ktory wczesniej byl juz zakwalifikowany do x:$[10+$CNT], jak widac priorytet tej kolejki jest wyzszy niż dla kolejki normalnej

: [/] [] ()
tc-viewer --iface=imq0 --unit=kbit
fragment oczywiscie :)
 2:1                  <   4014Kbit -   4014Kbit >   1273.4 kbit/s
    2:102                <     25Kbit -    192Kbit >     24.2 kbit/s
       2:1102               <     25Kbit -    192Kbit >     24.2 kbit/s
    2:103                <     25Kbit -    192Kbit >     27.3 kbit/s
       2:1103               <     25Kbit -    192Kbit >     14.6 kbit/s
       2:2103               <      5Kbit -     64Kbit >     12.7 kbit/s
    2:107                <     25Kbit -    256Kbit >     40.6 kbit/s
       2:1107               <     25Kbit -    256Kbit >     40.4 kbit/s
       2:2107               <      5Kbit -     85Kbit >      0.4 kbit/s
    2:117                <     25Kbit -    256Kbit >    282.4 kbit/s
       2:1117               <     25Kbit -    256Kbit >    225.8 kbit/s
       2:2117               <      5Kbit -     85Kbit >     34.5 kbit/s



filtry p2p maj zly parent powinien byc nadrzednej kolejki x:10x
a nie głownej wtedy trafia do niego ruch juz zaznaczony przez filtr IP kolejki x10 i można markiem oddzielic ruch p2p do kolejko x:201x

_________________
Nie jestem NEKROMANTĄ, nie wróżę z flaków!
Alkohol pity z umiarem nie szkodzi nawet w największych ilościach!
Przeczytaj nim zapytasz
Obrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: piątek, 29 lutego 2008, 23:37 
Offline

Rejestracja: poniedziałek, 31 stycznia 2005, 19:55
Posty: 74
Lokalizacja: Oświęcim
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


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: sobota, 1 marca 2008, 00:12 
Offline
PGF

Rejestracja: niedziela, 14 lipca 2002, 14:33
Posty: 3234
Lokalizacja: Radziejów
Cytuj:
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ę?

Być może nie byc potrzebna.

1.03.2008

Niestety musi być. Bo inaczej wszystko pójdzie przez x:$[2010+$CNT]

_________________
Nie jestem NEKROMANTĄ, nie wróżę z flaków!
Alkohol pity z umiarem nie szkodzi nawet w największych ilościach!
Przeczytaj nim zapytasz
Obrazek


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: sobota, 8 marca 2008, 09:36 
Offline
Użytkownik

Rejestracja: piątek, 18 marca 2005, 10:25
Posty: 274
Lokalizacja: Sandomierz
Witam

Zainteresowałem się powyższymi skryptami. Mam wątpliwości co do markowania p2p. Obecne ipp2p oraz layer7 nie wyłapują całego ruchu p2p. Czy ktoś ma sprawdzone rozwiązanie markowania pakietów generowanych przez "internetowe zamulacze" ? W obecnej sytuacji ruch p2p pójdzie klasą przeznaczoną dla ruchu normalnego.


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: sobota, 8 marca 2008, 09:46 
Offline
Użytkownik

Rejestracja: sobota, 14 maja 2005, 15:07
Posty: 3177
Lokalizacja: Busko-Zdrój
odfiltrowac ruch strategiczny a cala reszte do malego wora.

zas co do markowania pakietow strasznie tego nie lubie - zawsze brakowalo mi znacznikow :twisted:

_________________
Pomógł? wypij jego zdrowie.
http://nnd-linux.pl/faq.php
http://wiki.nnd.freesco.pl/index.php/FAQ


Na górę
 Wyświetl profil  
 
 Tytuł:
Post: niedziela, 9 marca 2008, 23:45 
Offline
Użytkownik

Rejestracja: piątek, 16 września 2005, 10:42
Posty: 162
nie rozumie co wy z tym markowaniem, jakas obsesja,,,,,,,,,,
markuje sie tylko pakiety , ktore nie idzie innym sposobem "zlapac", reszte robi sie na filtrach, a to co niesklasyfikowane skierowac do default,, zarzynacie procki i stwarzacie sobie problemy sami.


Na górę
 Wyświetl profil  
 
Wyświetl posty nie starsze niż:  Sortuj wg  
Nowy temat Odpowiedz w temacie  [ Posty: 8 ] 

Strefa czasowa UTC+2godz.


Kto jest online

Użytkownicy przeglądający to forum: Bing [Bot] i 24 gości


Nie możesz tworzyć nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Przejdź do:  
Technologię dostarcza phpBB® Forum Software © phpBB Group
Hosting: Compus-Net
RobertKonik.pl