Narzędzia użytkownika

Narzędzia witryny


Pasek boczny

sk2:ipv6

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: 0123123 ; 00abab ; ale 00000)
  • 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:cafefe80::cafe ; fe80:0:0:0:beef:0:0:0fe80::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 0xfffe mię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 generować powtarzalnie dla danej sieci1) RFC 7217 RFC 8064
      • 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
    • Flagi: 0b00PT
      T==0 oznacza że adres jest przydzielony przez "the global internet numbering authority"[1]
      P==1 oznacza że adres został utworzony z wykorzystaniem prefixu adresów unicastowych
    • Zasięg: [2]
      0x1 - interface-local, 0x2 - link-local, 0x5 - site local, 0x8 - organization-local, 0xe - global
  • 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

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 opcje i zastąpiono protokół polem następny nagłówek
    Znika pole IHL (długość nagłówka w IPv4), a pole długość całkowitadł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: TTLHop Limit, ToSTraffic class


źródło: https://www.ripe.net/support/training/material/ripe-ncc-training-material

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 pole nastę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]

źródło: https://www.ripe.net/support/training/material/ripe-ncc-training-material

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 address
    (w ramach ćwiczenia proponuję dodać adresy ULA w laboratoriach)
  • ip -6 route

Testowanie:

  • ping6 oraz nowsze implementacje zwykłego ping
  • traceroute -6, tracepath6      (w lab. dodatkowo jest potrzebny przełącznik -T, np. traceroute -T -6)
  • nc -6
  • socat + 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:

  • ip6tables
  • nft pozwala łą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 interfejsie br0 i czeka na RA
  • ndisc6 fe80::20c:42ff:feb6:9452 br0
    wysyła Neighbour Solicit o adres fe80:… na interfejsie br0 i 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:

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
  • 464XLAT – host ma prywatny IPv43) i sam tłumaczy adresy IPv4 na IPv6 tłumacza (wyżej opisanego NAT64)
  • 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

Ekstra

  • Łączność (np. ping) do adresów fe80::/10 – jako że więcej niż jedna karta może mieć adres z sieci fe80, do jednoznacznego wskazania która karta ma być użyta trzeba przy łączeniu użyć składni adres_link_local%nazwa_interfejsu lub adres_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%em1 wysył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/

1) generowany używając m. inn. prefiksu sieci i wcześniej wylosowanego (i pamiętanego) sekretu
2) uwaga: nie mylić z 6to4!
3) Ten adres nie służy do łączności z żadnym innym urządzeniem, tylko do udawania przed oprogramowaniem że host ma łączność po IPv4
sk2/ipv6.txt · ostatnio zmienione: 2024/01/18 13:04 przez jkonczak