/ Linux Reviews / Networking / Kształtowanie Ruchu i Zaawansowany Routing HOWTO - en - pl


12.5. Filtrowanie ruchu IPv6

12.5.1. Dlaczego filtry tc dla IPv6 nie działają?

Baza danych zasad routingu (ang. "Routing Policy Database", RPDB) zastąpiła strukturę routingu i adresowania dla IPv4 w jądrze Linuksa, która odpowiadała za całą wspaniałą funkcjonalność opisywaną w tym HOWTO. Niestety, struktura odpowiedzialna za IPv6 została zaimplementowana poza tą bazą. O ile obie współdzielą część mechanizmów, RPDB nie współpracuje z procesem adresowania ani routingu IPv6.

To się na pewno zmieni, musimy tylko trochę cierpliwie poczekać.

FIXME: Czy ktoś nad tym pracuje? Albo przynajmniej ma plany?

12.5.2. Oznaczanie pakietów IPv6 przez ip6tables

ip6tables umożliwia oznaczanie pakietów i przydzielanie im numerów:

# ip6tables -A PREROUTING -i eth0 -t mangle -p tcp -j MARK --mark 1

Nadal jednak nic to nie zmienia - pakiet nie przejdzie przez wspomnianą wcześniej strukturę RPDB.

12.5.3. Zastosowanie selektora u32 do testu pakietu IPv6

Normalnie, IPv6 jest hermetyzowany w tunel SIT i transportowany ponad siecią IPv4. Zajrzyj do sekcji `Tunelowanie IPv6' po więcej informacji jak zestawić taki tunel. Takie podejście do przesyłania pakietów IPv6 umożliwia nam ich filtrowanie na poziomie protokołu IPv4.

Poniższy filtr pasuje do całegu ruchu IPv6 zahermetyzowanego w pakietach IPv4:

# tc filter add dev $DEV parent 10:0 protocol ip prio 10 u32 \
            match ip protocol 41 0xff flowid 42:42

Przyjrzymy się temu. Załóżmy, że pakiet IPv6 został wysłany w IPv4 i oba nie mają ustawionych żadnych opcji. Możemy użyć poniższego filtra by wybrać pakiety ICMPv6 w IPv6 zahermetyzowane w IPv4. Wartość 0x3a (58) to pole typu `next-header' dla ICMPv6.

# tc filter add dev $DEV parent 10:0 protocol ip prio 10 u32 \
           match ip protocol 41 0xff \
           match u8 0x05 0x0f at 0 \
           match u8 0x3a 0xff at 26 \
           flowid 42:42

Dopasowanie adresu przeznaczenia IPv6 wymaga trochę większej ilości pracy. Poniższy filtr pasuje do następującego adresu docelowego: 3ffe:202c:ffff:32:230:4fff:fe08:358d:

# tc filter add dev $DEV parent 10:0 protocol ip prio 10 u32 \
            match ip protocol 41 0xff \
            match u8 0x05 0x0f at 0 \
            match u8 0x3f 0xff at 44 \
            match u8 0xfe 0xff at 45 \
            match u8 0x20 0xff at 46 \
            match u8 0x2c 0xff at 47 \
            match u8 0xff 0xff at 48 \
            match u8 0xff 0xff at 49 \
            match u8 0x00 0xff at 50 \
            match u8 0x32 0xff at 51 \
            match u8 0x02 0xff at 52 \
            match u8 0x30 0xff at 53 \
            match u8 0x4f 0xff at 54 \
            match u8 0xff 0xff at 55 \
            match u8 0xfe 0xff at 56 \
            match u8 0x08 0xff at 57 \
            match u8 0x35 0xff at 58 \
            match u8 0x8d 0xff at 59 \
            flowid 10:13

Tą samą technikę można zastosować do testów podsieci. Na przykład dla 2001::.

# tc filter add dev $DEV parent 10:0 protocol ip prio 10 u32 \
            match ip protocol 41 0xff \
            match u8 0x05 0x0f at 0 \
            match u8 0x20 0xff at 28 \
            match u8 0x01 0xff at 29 \
            flowid 10:13

/ Linux Reviews / Networking / Kształtowanie Ruchu i Zaawansowany Routing HOWTO