====== 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)