====== ICMPv6 ====== ICMPv6 (Internet Control Message Protocol version 6) je **síťový protokol pro IPv6**, který slouží k přenosu řídicích a chybových zpráv v IPv6 sítích. Je to základní součást IPv6 a hraje zásadnější roli než ICMPv4 v IPv4. ===== Co je ICMPv6 ===== ICMPv6 je protokol síťové vrstvy (Layer 3 v OSI modelu), který: * Hlásí **chyby** při doručování paketů * Poskytuje **diagnostické** funkce (ping, traceroute) * Zajišťuje **Neighbor Discovery** (nahrazuje ARP z IPv4) * Podporuje **automatickou konfiguraci** (SLAAC) * Implementuje **Path MTU Discovery** * Zpracovává **Multicast Listener Discovery** (MLD) **Základní informace:** * **Číslo protokolu:** 58 (v IPv6 hlavičce) * **Standard:** RFC 4443 (hlavní), RFC 4861 (Neighbor Discovery) * **Povinný:** Musí být implementován na všech IPv6 zařízeních * **Nástupce:** ICMPv4 (IPv4) ===== Rozdíly oproti ICMPv4 ===== ICMPv6 má **rozšířené funkce** oproti ICMPv4: ^ Funkce ^ ICMPv4 ^ ICMPv6 ^ | Hlášení chyb | Ano | Ano | | Ping/Echo | Ano | Ano | | Neighbor Discovery | Ne (používá ARP) | **Ano** | | Router Discovery | ICMP Router Discovery | **Integrováno** | | Path MTU Discovery | Volitelné | **Povinné** | | Multicast Management | IGMP (separátní) | **MLD (součást ICMPv6)** | | Autokonfigurace | DHCP | **SLAAC + DHCPv6** | ===== Struktura ICMPv6 paketu ===== IPv6 hlavička +------------------+ | Next Header = 58 | (ICMPv6) +------------------+ ICMPv6 hlavička +------------------+ | Type (8 bitů) | Typ zprávy (0-255) +------------------+ | Code (8 bitů) | Podtyp zprávy +------------------+ | Checksum (16 b) | Kontrolní součet +------------------+ | Data (proměnná) | Závislé na typu zprávy +------------------+ **Pole:** * **Type** - typ ICMPv6 zprávy (např. 128 = Echo Request) * **Code** - upřesnění typu (většinou 0) * **Checksum** - kontrolní součet pro detekci chyb * **Data** - specifická data podle typu zprávy ===== Typy ICMPv6 zpráv ===== ICMPv6 zprávy se dělí do dvou hlavních kategorií: ==== 1. Chybové zprávy (Error Messages) ==== Type hodnoty **1-127** jsou rezervovány pro chybové zprávy: ^ Type ^ Název ^ Význam ^ | **1** | Destination Unreachable | Cíl nedosažitelný | | **2** | Packet Too Big | Paket je příliš velký | | **3** | Time Exceeded | Vypršel čas (TTL = 0) | | **4** | Parameter Problem | Problém s hlavičkou paketu | **Příklad - Destination Unreachable (Type 1):** Code hodnoty: * ''0'' - No route to destination (žádná cesta) * ''1'' - Communication administratively prohibited (zakázáno firewallem) * ''3'' - Address unreachable (adresa nedosažitelná) * ''4'' - Port unreachable (port nedostupný) ==== 2. Informační zprávy (Informational Messages) ==== Type hodnoty **128-255** jsou pro informační zprávy: ^ Type ^ Název ^ Význam ^ | **128** | Echo Request | Ping požadavek | | **129** | Echo Reply | Ping odpověď | | **133** | Router Solicitation | Hledání routeru | | **134** | Router Advertisement | Oznámení routeru | | **135** | Neighbor Solicitation | Hledání souseda (jako ARP) | | **136** | Neighbor Advertisement | Odpověď souseda | | **137** | Redirect | Přesměrování na lepší cestu | ===== Neighbor Discovery Protocol (NDP) ===== **Nejdůležitější funkce ICMPv6** - nahrazuje ARP, ICMP Router Discovery a další z IPv4. ==== Hlavní funkce NDP ==== **1. Router Discovery** - Nalezení routerů v síti * Router Solicitation (Type 133) - "Kdo je tady router?" * Router Advertisement (Type 134) - "Já jsem router, tady jsou parametry sítě" **2. Address Resolution** - Zjištění MAC adresy (náhrada ARP) * Neighbor Solicitation (Type 135) - "Kdo má IPv6 adresu X?" * Neighbor Advertisement (Type 136) - "To jsem já, moje MAC je Y" **3. Duplicate Address Detection (DAD)** - Kontrola, zda adresa již není používána **4. Redirect** - Router řekne hostiteli o lepší cestě ==== Příklad: Address Resolution (náhrada ARP) ==== Hostitel A chce komunikovat s hostitelem B: 1. A pošle Neighbor Solicitation (Type 135): Src: fe80::1 Dst: ff02::1:ff00:2 (solicited-node multicast) "Kdo má adresu 2001:db8::2? Pošli svoji MAC adresu!" 2. B odpoví Neighbor Advertisement (Type 136): Src: 2001:db8::2 Dst: fe80::1 "To jsem já! Moje MAC je 00:11:22:33:44:55" 3. A si uloží do Neighbor Cache: 2001:db8::2 -> 00:11:22:33:44:55 ==== Příklad: Router Discovery ==== Hostitel se připojí do sítě: 1. Hostitel pošle Router Solicitation (Type 133): Src: fe80::1 Dst: ff02::2 (all-routers multicast) "Kdo je tady router?" 2. Router odpoví Router Advertisement (Type 134): Src: fe80::a Dst: ff02::1 (all-nodes multicast) "Já jsem router!" "Prefix: 2001:db8::/64" "Default gateway: fe80::a" "MTU: 1500" "Hop Limit: 64" 3. Hostitel si nakonfiguruje adresu pomocí SLAAC: 2001:db8::1234:5678:9abc:def0/64 ===== SLAAC (Stateless Address Autoconfiguration) ===== ICMPv6 umožňuje **automatickou konfiguraci IPv6 adres** bez DHCP serveru: **Proces SLAAC:** 1. Hostitel vygeneruje link-local adresu: fe80::interface-id 2. DAD (Duplicate Address Detection): Neighbor Solicitation na vlastní adresu Pokud nikdo neodpoví -> adresa je unikátní 3. Router Discovery: Router Solicitation -> Router Advertisement Získá prefix sítě (např. 2001:db8::/64) 4. Vytvoření globální adresy: Prefix + interface-id = 2001:db8::interface-id 5. Konfigurace default gateway: Link-local adresa routeru (fe80::router-id) ===== Path MTU Discovery ===== ICMPv6 **povinně** implementuje PMTU Discovery (v IPv4 volitelné): **Jak funguje:** 1. Hostitel pošle paket velikosti 1500 bytů 2. Někde na cestě je MTU pouze 1280 bytů 3. Router pošle ICMPv6 Packet Too Big (Type 2): "Váš paket je moc velký, maximální MTU je 1280" 4. Hostitel upraví velikost paketů na 1280 bytů 5. Pakety procházejí bez problémů **Důležité:** IPv6 **neumožňuje fragmentaci** na routerech! Pouze odesílatel může fragmentovat. **Minimální MTU pro IPv6:** 1280 bytů (povinné) ===== Multicast Listener Discovery (MLD) ===== MLD je součástí ICMPv6 a nahrazuje IGMP z IPv4. Používá se pro správu multicast skupin. **MLD zprávy:** * **Type 130** - Multicast Listener Query * **Type 131** - Multicast Listener Report (MLDv1) * **Type 132** - Multicast Listener Done (MLDv1) * **Type 143** - MLDv2 Report ===== Ping v IPv6 ===== **Echo Request a Echo Reply** fungují podobně jako v IPv4: # Linux/Unix ping6 2001:db8::1 ping6 -c 4 2001:db8::1 # Windows ping 2001:db8::1 ping -6 2001:db8::1 # Ping link-local adresy (nutno zadat rozhraní) ping6 fe80::1%eth0 **ICMPv6 zprávy:** * **Type 128** - Echo Request (požadavek) * **Type 129** - Echo Reply (odpověď) **Příklad výstupu:** PING 2001:db8::1(2001:db8::1) 56 data bytes 64 bytes from 2001:db8::1: icmp_seq=1 ttl=64 time=0.123 ms 64 bytes from 2001:db8::1: icmp_seq=2 ttl=64 time=0.098 ms 64 bytes from 2001:db8::1: icmp_seq=3 ttl=64 time=0.115 ms --- 2001:db8::1 ping statistics --- 3 packets transmitted, 3 received, 0% packet loss ===== Traceroute v IPv6 ===== # Linux/Unix traceroute6 2001:db8::1 tracepath6 2001:db8::1 # Windows tracert 2001:db8::1 **Princip:** * Postupně zvyšuje Hop Limit (TTL) * Router vrací ICMPv6 Time Exceeded (Type 3) * Ukazuje cestu paketu přes síť ===== ICMPv6 a bezpečnost ===== ==== Důležitost ICMPv6 ==== **NIKDY neblokujte ICMPv6 kompletně!** Na rozdíl od ICMPv4 je ICMPv6 kriticky důležité pro: * Neighbor Discovery (bez něj síť nefunguje) * Path MTU Discovery (bez něj problémy s velkými pakety) * SLAAC (automatická konfigurace) ==== Doporučení pro firewall ==== **Povolte minimálně tyto ICMPv6 zprávy:** Příchozí (Inbound): * Type 1 (Destination Unreachable) * Type 2 (Packet Too Big) - **kritické pro PMTU** * Type 3, Code 0 (Time Exceeded) * Type 128 (Echo Request) - pokud chcete odpovídat na ping * Type 133 (Router Solicitation) * Type 135 (Neighbor Solicitation) - **kritické pro NDP** Odchozí (Outbound): * Type 129 (Echo Reply) * Type 134 (Router Advertisement) - pokud jste router * Type 136 (Neighbor Advertisement) - **kritické pro NDP** **Bezpečnostní hrozby:** * **Rogue Router Advertisements** - falešné routery * **Neighbor Discovery DoS** - záplavy NS/NA zpráv * **SLAAC attacks** - útok na autokonfiguraci * **ICMPv6 floods** - zahlcení zpráv **Ochrana:** * RA Guard - ochrana proti falešným routerům * NDP Inspection - validace NDP zpráv * Rate limiting - omezení množství ICMPv6 zpráv ===== Diagnostické nástroje ===== **Linux/Unix:** # Sledování ICMPv6 provozu tcpdump -i eth0 icmp6 # Filtrování konkrétních typů tcpdump -i eth0 'icmp6 and ip6[40] == 135' # Neighbor Solicitation # Wireshark filtr icmpv6.type == 135 # Neighbor Solicitation icmpv6.type == 136 # Neighbor Advertisement # Zobrazení Neighbor Cache ip -6 neigh show **Windows:** # Neighbor Cache netsh interface ipv6 show neighbors # Interface konfigurace netsh interface ipv6 show interface # Route tabulka netsh interface ipv6 show route ===== Příklad: Analýza ICMPv6 paketu ===== **Neighbor Solicitation zachycený Wiresharkem:** Frame 42: 86 bytes on wire Ethernet II Destination: 33:33:ff:00:00:01 Source: 00:0c:29:3e:7f:a1 Type: IPv6 (0x86dd) Internet Protocol Version 6 Source: fe80::20c:29ff:fe3e:7fa1 Destination: ff02::1:ff00:1 (solicited-node multicast) Next Header: ICMPv6 (58) Internet Control Message Protocol v6 Type: Neighbor Solicitation (135) Code: 0 Checksum: 0x1234 [correct] Target Address: 2001:db8::1 ICMPv6 Option (Source link-layer address) Type: Source link-layer address (1) Length: 1 (8 bytes) Link-layer address: 00:0c:29:3e:7f:a1 ===== Shrnutí ===== **ICMPv6 je kriticky důležitý protokol pro IPv6:** **Hlavní funkce:** * Hlášení chyb a diagnostika (ping, traceroute) * **Neighbor Discovery** - náhrada ARP * **Router Discovery** - nalezení default gateway * **SLAAC** - automatická konfigurace bez DHCP * **Path MTU Discovery** - detekce maximální velikosti paketu * **Multicast** - správa multicast skupin (MLD) **Klíčové rozdíly oproti ICMPv4:** * Mnohem důležitější - **nesmí být blokován** * Integruje funkce ARP, IGMP, DHCP * Povinné pro všechna IPv6 zařízení * Robustnější bezpečnostní mechanismy **Pamatujte:** * Bez ICMPv6 IPv6 síť **nefunguje** * Vždy povolte minimálně NDP zprávy (Type 133-137) * Path MTU Discovery vyžaduje Type 2 (Packet Too Big)