Table of Contents
Wyczerpanie się adresów IPv4
Adresy IPv4 zostały podzielone do końca między RIRy w 2014 roku.
W 2015 roku skończyły się adresy IPv4 w Ameryce Północnej. W 2019 roku w naszym regionie (Europa, bliski wschód i część Azji) przydzielono ostatni wolny blok IPv4.
W tej chwili w naszym regionie tylko firmy/organizacje którzy nigdy wcześniej nie dostały adresów IPv4 mogą liczyć na 256 adresów IPv4 "odzyskanych" po zakończeniu działalności firmy/organizacji której przydzielono blok adresów (wersja oficjalna).
Na określonych warunkach można wykonywać transfery już przydzielonych adresów (transfer w RIPE).
Adres IPv6 – zapis
Adresacja IPv6 RFC4291
Długość adresu – 128 bitów
Zapis adresu: adres dzieli się na bloki 16-sto bitowe, zapisuje się je szesnastkowo (0÷ffff) oddzielając dwukropkiem:
Przykład: 2001:0808:0201:0000:0000:0000:0005:0114
Dla czytelności adres skraca się według następujących reguł:
- W każdym bloku pomija się początkowe zera (czyli:
0123→123;00ab→ab; ale0000→0) - Najdłuższy (jeśli jest więcej najdłuższych – pierwszy) ciąg bloków zerowych zastępuje się przez :: (czyli:
fe80:0:0:0:0:0:0:cafe→fe80::cafe;fe80:0:0:0:beef:0:0:0→fe80::beef:0:0:0)
Skrócony przykład: 2001:808:201::5:114
Z powodów technicznych zaleca się stosowanie zawsze najkrótszego zapisu i używanie małych liter (tzn. zawsze a-f, nigdy A-F) RFC5952
Zapis adresu IPv6 i portu: IPv6 w nawiasach kwadratowych, port po dwukropku, np: [fe80::dead:beef]:80 , przykład użycia: http://[::1]:631/ czy http://[2001:808:2:3003::2]/
Adres IPv6 – struktura, podział
W IPv6 zamiast o sieci (jak w IPv4) mówi się o prefiksie sieci (network prefix).
Prefix składa się z adresu ipv6 / długość prefiksu, np. 2001:808:201::/48
Długość (rozmiar) prefiksu odpowiada długości maski w IPv4, notacja IPv6 jest identyczna jak ta wprowadzona dla IPv4 w CIDR
Struktura adresu IPv6 https://en.wikipedia.org/wiki/IPv6_address#Address_formats
- Adresy unicastowe (i anycastowe):
- Adres ma zwykle postać:
Network prefix (Routing prefix + subnet, razem 64bit) | Interface ID (64bit)
Podział na routing i network prefix odnosi się do protokołów trasowania (głównie BGP) - 64-bitowy interface ID pozwala na automatyczną konfigurację. Wybór interface ID: RFC 7136
- Interface ID można stworzyć na podstawie adresu MAC (48-bitowego) zmieniając flagę unikalności adresu MAC na 1 i wstawiając
0xfffemiędzy pierwszą a drugą połowę MAC RFC 4291, appendix A - Interface ID można ustawić losowy (dla prywatności, RFC 4941)
- Interface ID można też ustawić ręcznie
- do 64-bitów na prefix wystarczy
- Adresy anycastowe – dowolny adres unicastowy można używać jako anycast, przy konfiguracji trzeba explicite dodać adres jako anycast.
- W tej chwili wszystkie globalne adresy unicastowe są z sieci 2000::/3
- Multicast: adresy zaczynające się od
ff, po których następują 4 bity flag i 4 bity zasięgu:
Czyli:ff⚐Z::/112, gdzie⚐to miejsce flag,Z- zasięgu; np.ff15:1234::6789:abcd - Brak adresów broadcastowych - do wysłania do wszystkich używa się adresu multicastowego "wszystkie węzły"
Zasięg adresów:
- Globalny (globally routable / global)
- Ograniczony do łącza (link-local / local) - wydzielony blok fe80::/10, formalnie adres localhost [3]
Podział adresów; adresy specjalne w IPv6
-
- dowolny adres – :: (same zera)
- localhost – ::1
- adresy link-local – fe80::/10
Przydzielone bloki IPv6 (proszę zwrócić uwagę na "przerwy", np. między 2a10:0000::/12 i 2c00:0000::/12)
Budowa pakietu IPv6
Zmiany w porównaniu do IPv4:
- Nagłówek IPv6 jest stałej długości – usunięto zmiennej długości
opcjei zastąpionoprotokółpolemnastępny nagłówek
Znika poleIHL(długość nagłówka w IPv4), a poledługość całkowita→długość "ładunku"(payload length - wszystiego po nagłówku) - Zrezygnowano z pól o fragmentacji – jeśli jest potrzebna, dodaje się jako następny nagłówek
fragmentation header - Zmiany ewolucyjno/porządkowe:
TTL→Hop Limit,ToS→Traffic class
Pole następny nagłówek może zawierać wartość wskazującą na to, że kolejny nagłówek:
- to nagłówek protokołu warstwy transportowej (TCP, UDP)
- to nagłówek definiowany w protokole IPv6 ([1])
każdy taki nagłówek ma kolejne polenastępny nagłówek
Nagłówki mają określoną kolejność, tak by na początku znajdowały się te przetwarzane przez wszystkie urządzenia, dalej nagłówki potrzebne niektórym węzłom, na końcu te przetwarzane tylko przez urządzenie docelowe [2]
Programy sieciowe a IPv6
Przykładowe strony z IPv6:
- put.poznan.pl
- ipv6ripeness.ripe.net
- ipv6.he.net
- 6lab.cisco.com
- google.com/ipv6
Wiele programów sieciowych pozwala na wymuszenie IPv6 / IPv4 podając przełącznik -6 / -4
Konfiguracja:
ip -6 route
Testowanie:
ping6oraz nowsze implementacje zwykłegopingtraceroute -6,tracepath6(w lab. dodatkowo jest potrzebny przełącznik-T, np.traceroute -T -6)nc -6socat+ TCP6:host:port, TCP6-LISTEN:port, …
socat tcp:[::1]:13 -
socat tcp6:localhost:13 -
Wyświetlanie połączeń (domyślnie listuje zarówno IPv4 i IPv6):
netstat -6 -a [--wide]ss -6 -a
Firewall:
ip6tablesnftpozwala łączyć reguły IPv4 i IPv6 w tabelach inet
Programowanie a IPv6:
man 7 ipv6
W Linuksie preferencje wyboru IPv6/IPv4 można ustawić w pliku /etc/gai.conf
Automatyczna konfiguracja i ICMPv6
ICMPv6 (następca ICMP dla IPv6), ponad funkcje poprzednika, implementuje protokół NDP (pozwalający na automatyczną konfigurację i zastępujący ARP) i przejmuje zadania IGMP
Neighbor Discovery Protocol i Stateless Adress Autoconfiguration (SLAAC) RFC4861
Typowy przebieg autokonfiguracji:
- Stacja wybiera adres w sieci fe80::/10 na podstawie identyfikatora interfejsu (adresu MAC dla kart ethernetowych)
- Stacja wysyła zapytanie w sieć czy ktoś nie ma takiego adresu (na adres multicastowy wszystkie-węzły)
- Stacja przydziela sobie wybrany adres
- Stacja wysyła pytanie o routery (na adres multicastowy wszystkie-routery)
- Routery odpowiadają wiadomością o dostępnych prefiksach (i DNS'ach, RFC8106)
- Stacja wybiera po jednym adresie z każdego dostępnego prefiksu
W Linuksie do ogłaszania prefiksów używa się radvd
Do podstawowej konfiguracji IPv6 NIE potrzebuje DHCP. Jeśli do żądanej konfiguracji nie wystarczy przydzielenie adresów, ustawienie bramy domyślnej i ustawienie DNS'ów, można w NDP wymusić użycie DHCPv6.
[Ekstra] Diagnostyka NDP
Polecenie diagnostyczne z radvd do pasywnego zbierania Router Advertisment:
radvdump
włącza program nasłuchujący na RA
Instalacja w OpenSuse:zypper install radvd
Pakiet narzędzi diagnostycznych ndisc6:
rdisc6 br0
wysyła Router Solicit na interfejsiebr0i czeka na RAndisc6 fe80::20c:42ff:feb6:9452 br0
wysyła Neighbour Solicit o adres fe80:… na interfejsiebr0i czeka na Neighbour Advertisment
Pakiet iproute 2 i lista MAC <-> IP
ip -6 neighbour
Wyświetla znanych sąsiadów IPv6
ping6 ff02::01%br0 – żądanie ICMPv6 ping wysłane do grupy multicastowej all-nodes na br0 (uzupełnia mapowania IP <-> MAC)
Path MTU discovery
IPv6 unika fragmentacji jeśli to możliwe. Węzeł który nie może przesłać pakiety ze względu na MTU następnego łącza wysyła do nadawcy pakiet ICMPv6 Packet Too Big informując o MTU. Ostatecznie nadawca pozna w ten sposób najmniejsze MTU całej ścieżki do celu – Path MTU. Taki proces nazywa się Path MTU Discovery (RFC 8201).
Wartości Path MTU są zwykle cache'owane, np. w Linuksie w tablicy tras.
Możesz sprawdzić działanie Path MTU discovery przez:
ip -6 route flush cache ip route get 2001:470:647b::1 ping -s 1500 2001:470:647b::1 ip route get 2001:470:647b::1
Współistnienie IPv4 i IPv6
Dual-stack – urządzenie ma jednocześnie adres z sieci IPv4 i IPv6 oraz bezpośrednią łączność do sieci IPv4 i IPv6.
Tunele:
- "proste", 6in42) – pakiet IPv6 jest przesyłany jako dane pakietu IPv4 wysłanego z jednego końca tunelu do drugiego; tunel dla IPv6 widziany jest jako zwykłe połączenie IPv6 http://www.cs.put.poznan.pl/mlibuda/IPv6.pdf
- tunnel broker – usługa konfigurująca automatycznie zdalny koniec tunelu tak, by użytkownik końcowy mógł połączyć się z internetem IPv6 https://en.wikipedia.org/wiki/Tunnel_broker
Skąd brać tunele? Przykłady:
Tłumaczenia adresów, różne:
- NAT64 + DNS64 – host nie ma wcale IPv4, co za tym idzie żadnej łączności do adresów IPv4.
- host może wysłać pakiet pod adresy IPv6 z sieci (zwykle) 64:ff9b::/96, w których w ostatnie 32 bity wpisuje adres IPv4.
pakiet trafia do translatora (NAT64) który ma adres publiczny IPv4 i taki pakiet przesyła dalej po IPv4.
NAT64 jest zwykle stanowy, ma wady i ograniczenia. - żeby dostać się do stron dostępnych tylko po IPv4 host używa specjalnego DNSa (DNS64) który odpowiada adresem z sieci IPv6 powyższego tłumacza zawierającym adres IPv4 tłumaczonej domeny
- DS-lite – host dostaje od usługodawcy, poza publicznym IPv6, prywatny adres IPv4, a usługodawca u siebie tłumaczy adresy (logicznie zwykły NAT z IPv4 na IPv4, tylko duży i po stronie usługodawcy: Carrier-grade_NAT)
IPsec
IPv6 + Firewall
Dodatkowe materiały
Prezentacje:
- Materiały przygotowane przez RIPE NCC:
- Materiały przygotowane w ramach finansowanego przez EU projektu IPv6 dissemination and exploitation:
Ekstra
- Łączność (np. ping) do adresów
fe80::/10– jako że więcej niż jedna karta może mieć adres z siecife80, do jednoznacznego wskazania która karta ma być użyta trzeba przy łączeniu użyć składniadres_link_local%nazwa_interfejsulubadres_link_local%indeks_interfejsu[1],
np.ping fe80::a6d:41ff:fee0:1860%eth0
Podobnie wygląda składnia dla multicastów, np.ping ff02::01%em1wysyła ping na adres all-nodes na karcie em1. - Apple store wymaga od każdej aplikacji działania w sieciach z samym IPv6 https://developer.apple.com/support/ipv6/