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.
ICMPv6 je protokol síťové vrstvy (Layer 3 v OSI modelu), který:
Základní informace:
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 |
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:
ICMPv6 zprávy se dělí do dvou hlavních kategorií:
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ý)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 |
Nejdůležitější funkce ICMPv6 - nahrazuje ARP, ICMP Router Discovery a další z IPv4.
1. Router Discovery - Nalezení routerů v síti
2. Address Resolution - Zjištění MAC adresy (náhrada ARP)
3. Duplicate Address Detection (DAD) - Kontrola, zda adresa již není používána
4. Redirect - Router řekne hostiteli o lepší cestě
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
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
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)
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é)
MLD je součástí ICMPv6 a nahrazuje IGMP z IPv4. Používá se pro správu multicast skupin.
MLD zprávy:
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:
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
# Linux/Unix traceroute6 2001:db8::1 tracepath6 2001:db8::1 # Windows tracert 2001:db8::1
Princip:
NIKDY neblokujte ICMPv6 kompletně! Na rozdíl od ICMPv4 je ICMPv6 kriticky důležité pro:
Povolte minimálně tyto ICMPv6 zprávy:
Příchozí (Inbound):
Odchozí (Outbound):
Bezpečnostní hrozby:
Ochrana:
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
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
ICMPv6 je kriticky důležitý protokol pro IPv6:
Hlavní funkce:
Klíčové rozdíly oproti ICMPv4:
Pamatujte: