Dydaktyka:
Feedback
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).
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ł:
0123
→ 123
; 00ab
→ ab
; ale 0000
→ 0
)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]/
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
Network prefix (Routing prefix + subnet, razem 64bit) | Interface ID (64bit)
0xfffe
między pierwszą a drugą połowę MAC RFC 4291, appendix Aff
, po których następują 4 bity flag i 4 bity zasięgu: ff⚐Z::/112
, gdzie ⚐
to miejsce flag, Z
- zasięgu; np. ff15:1234::6789:abcd
Zasięg adresów:
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)
Zmiany w porównaniu do IPv4:
opcje
i zastąpiono protokół
polem następny nagłówek
IHL
(długość nagłówka w IPv4), a pole długość całkowita
→ długość "ładunku"
(payload length - wszystiego po nagłówku)fragmentation header
TTL
→Hop Limit
, ToS
→Traffic class
Pole następny nagłówek
może zawierać wartość wskazującą na to, że kolejny nagłówek:
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]
Przykładowe strony z IPv6:
Wiele programów sieciowych pozwala na wymuszenie IPv6 / IPv4 podając przełącznik -6
/ -4
Konfiguracja:
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 inetProgramowanie a IPv6:
man 7 ipv6
W Linuksie preferencje wyboru IPv6/IPv4 można ustawić w pliku /etc/gai.conf
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:
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.
Polecenie diagnostyczne z radvd do pasywnego zbierania Router Advertisment:
radvdump
zypper install radvd
Pakiet narzędzi diagnostycznych ndisc6:
rdisc6 br0
br0
i czeka na RAndisc6 fe80::20c:42ff:feb6:9452 br0
br0
i czeka na Neighbour AdvertismentPakiet iproute 2 i lista MAC <-> IP
ip -6 neighbour
ping6 ff02::01%br0
– żądanie ICMPv6 ping wysłane do grupy multicastowej all-nodes na br0
(uzupełnia mapowania IP <-> MAC)
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
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:
Prezentacje:
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], ping fe80::a6d:41ff:fee0:1860%eth0
ping ff02::01%em1
wysyła ping na adres all-nodes na karcie em1.