IPv6

Der grösste Unterschied zwischen IPv4 und IPv6 liegt im Adressraum: über die 128 Bit langen IPv6-Adressen lassen sich - ganz ohne Tricks wie NAT & Co. - unvorstellbare 340 Sextillionen Geräte und Dienste individuell ansprechen, was einer Vergrösserung um den Faktor 2^96 gegenüber den 3.7 Milliarden nutzbarer Adressen in IPv4 entspricht. Theoretisch könnte man damit jedem Sandkorn auf der Erde mehrere Internetadressen zuweisen.

Geräte erhalten bereits dann eine IPv6-Adresse, wenn sie noch gar nicht am Netzwerk angebunden sind, da IPv6 von sich aus bereits Mechanismen zur automatischen Konfiguration beherrscht (ein DHCPv6 ist in kleinen Netzen unnötig) - die so genannte Link-Local-Adresse, die zur Kommunikation im eigenen Subnetz Verwendung findet und niemals den Router verlässt.

Weiterer Unterschied: Es gibt keinen Broadcast-Traffic mehr, sondern nur noch:

  • Multicast = 1:n (wird z.B. für Neighbor Discovery verwendet)

  • Unicast = 1:1

  • Anycast = 1:1 (beliebiger Empfänger aus einer Gruppe)

IPv4 versus IPv6 im Überblick:

  • Adresslänge:
    IPv4: 4 Bytes (32 Bits)
    IPv6: 16 Bytes (128 Bits)
  • Link-Local-Adressen zur Adressierung von Nodes in abgeschlossenen Netzwerksegmenten sowie zur Autokonfiguration oder Neighbour-Discovery:
    IPv4: 169.254.0.0/16
    IPv6: fe80::/64 (Link-Local Adressen können wie normale Adressen auch von anderen Hosts auf dem gleichen Link genutzt werden)
  • Site Local Unicast, standortlokale Adressen:
    IPv4: 192.168.x.x
    IPv6: veraltet, keine zukünftige Entsprechung
  • Unique Local Unicast als Nachfolger der standortlokalen Adressen:
    IPv4: -
    IPv6: fc00::/7 (derzeit nur mit Präfix fd zu verwenden. Beispiel: fd9e:21a7:a92c:2323::1)
  • Verbieten von ICMP:
    IPv4: üblich
    IPv6: nicht durchführbar, da z.B. das Neighbor Discovery Protocol (NDP), welches ARP ersetzt, auf ICMPv6 basiert

Umgang mit IPv6 in diversen Tools:

ping6 fe80::250:56ff:febc:6930%ens32
ssh fe80::250:56ff:febc:6930%ens32
ip -6 route list

Begriffe:

  • CGN: = CG-NAT, also known as Larger-Scale NAT (LSN)

  • CIDR: Classless Inter-Domain Routing

  • CPE: Customer Premises Equipment

  • EUI: Extended Unique Identifier

  • IANA: Internet Assigned Numbers Authority

  • IID: Interface Identifier

  • IPAM: IP Address Management

  • LIR: Local Internet Registry

  • NCC: Network Coordination Centre

  • NDP: Neighbor Discovery Protocol

  • PA: Provider Aggregatable

  • PI: Provider Independent

  • RIR: Regional Internet Registry

  • SLAAC: Stateless Address Auto-configuration

IANA > RIR > LIR > End User

SLAAC vs NDP:

  • NDP can be used to discover the MAC address

  • SLAAC is used by an IPv6 host to autoconfigure an IPv6 address.

Darstellung

Aufbau der 16 Bytes / 128 Bit-Adressen in 8 Gruppen à 2 Bytes / 16 Bits:

XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX:XXXX

Subnetting:

Network/Routing Prefix - Subnet ID | Interface ID
                   64 bits         |  64 bits

Ein und dieselbe Adresse kann auf verschiedene Arten dargestellt werden:

2001:0db8:0:0:1:0:0:1
2001:0db8::1:0:0:1
2001:db8:0000:0:1::1
2001:db8:0:0:1:0:0:1
2001:db8:0:0:1::1
2001:DB8:0:0:1::1
2001:db8::0:1:0:0:1
2001:db8::1:0:0:1

Vollständige Verkürzung („compression“) einer Adresse:

# Beispiel
2001:0db8:0000:0000:0192:000:0010:1000

# 1. Führende Nullen werden entfernt:
2001:db8:0000:0000:192:000:10:1000

# 2. Ersetze Gruppen aus vier Nullen durch eine Null
2001:db8:0:0:192:0:10:1000

# 3. ":0"-Gruppen können einmal (!) durch ":" ersetzt werden - hier nimmt man die längste Kette
2001:db8::192:0:10:1000

Die localhost-Adresse wird mit ::1 abgekürzt angegeben.

Die ersten 64 Bits definieren das Netzwerk, die restlichen 64 Bits das Interface.

CDIR-Notation

Die ersten 64 Bit bilden das Netzwerk-Präfix, die restlichen den Interface Identifier („Host“). Die Adressen werden in 16-Bit-Blöcken durch Doppelpunkt getrennt und im Gegensatz zu IPv4 nicht dezimal, sondern der Kürze wegen hexadezimal notiert.

Die Adresse 1080:6809:8086:6502/64 beispielsweise gibt ab, dass die ersten 64 Bits unveränderbar sind. Bei 2001:db8:1:/48 sind die ersten 48 Bits statisch, die folgenden 16 Bits aber frei wählbar, so dass sich 2^16 = 65’563 Netze bilden lassen.

Der Interface Identifier wird meist aus der MAC-Adresse abgeleitet. Aus 00:50:56:bc:13:01 macht RHEL beispielsweise ein fe80::250:56ff:febc:6930.

Eine Site besitzt in der Regel ein 48 bit langes Prefix. Solch ein Netzwerk wird von Providern verwaltet und besitzt 1’208’925’819’614’629’174’706’176 Adressen.

In einer URL mit Port-Angabe wird eine IPv6 wie folgt verwendet:

https://[2001:db8:85a3:8d3:1319:8a2e:370:7348]:443/...

Scopes

Adresstypen:

  • 64:ff9b::/96: IPv4-Embedded (IPv4/IPv6 translations)

  • 100::/64: Discard-only

  • Unicast:

    • ::/128: Unspecified

    • ::1: Loopback

    • fe80::/10: Scop Link-local, kann nur auf dem lokalen Netzwerklink verwendet werden

    • fc00::/7 (real fd00::/8): Unique Local (ULA) - haben einen globalen Scope, aber sollten nie ins Internet geroutet werden - analog private addresses in IPv4

    • 2000::/3: Global Unicast (ohne Link-Local) - analog public addresses in IPv4

      • 2001:db8::/32: reserved for documentation purpose

  • Multicast:

    • ff00::/8

      • ff01::2: Scope Interface, Interface-Adresse

      • ff02::1: Scope Link-local, All IPv6 nodes on the local link

      • ff02::2: Scope Link-local, All Routers

      • ff05::1: Scope Site-local, vom Relay Agent verwendet

      • ff05::2: Scope Site-local, All IPv6 routers across the network

      • ff05::1:3 Scope Site-local, Site-scoped, All DHCP servers

  • Site-local Multicast

IPv6 im Netz

Ist eine Netzwerkverbindung vorhanden, sendet IPv6 eine NS („Neighbor Solicitation Message“) an die generierte Solicited-Node Multicast Adresse, um zu prüfen, ob die Adresse bereits verwendet wird (DAD, „Duplicate Address Detection“). Erhält es eine NA („Neighbor Advertisment Message“), wird die Adresse bereits verwendet; die Wahrscheinlichkeit dafür ist aber äusserst gering.

IPv6 verzichtet aufgrund des riesigen Adressraums auf Broadcasts und verwendet Multicasts, um Netzwerkgeräte mit speziellen Eigenschaften zu ermitteln. Per Multicast

  • an ff02::1 melden sich beispielsweise alle aktiven Rechner („All Nodes“),

  • auf ff02::1:ffxx:xxxx antworten Solicited Nodes (Adresse einer Multicast-Gruppe: 104 Bits für die Gruppe, 24 Bits für die Unicast-Adresse),

  • und Router antworten bei einem Multicast an ff02::2 („All Routers“).

Eine Anwendung kann beliebige (selbstdefinierte) Multicast-Gruppen abonnieren, um über weitere Netzteilnehmer benachrichtigt zu werden.

Für den Zugang ins Internet wird ein IPv6-fähiger Router benötigt. Entweder verteilt dieser die Zugangsinformationen (Gateway-Adresse, globales IPv6-Netzwerk-Präfix des Internet-Providers, IPv6-DNS) per ICMPv6 an „sein“ internes Netz, oder sie werden vom Client per „Router Solicitation“-Nachricht über ICMPv6 angefordert, die mit einem „Router Advertisment“ beantwortet wird. Mit den erhaltenen Informationen wird eine weitere IPv6-Adresse für den Zugang zum Internet generiert, die derzeit mit einer 2 beginnt. Aus fe80::250:56ff:febc:6930 wird damit zum Beispiel 2001:db8:1:1:250:56ff:febc:6930. Zudem erhält der Rechner die benötigten Routen, die sich per ip -6 route list einsehen lassen.

Aus Gründen der Sicherheit und zum Schutz der Privatsphäre ist die leicht rückverfolgbare automatische Adressvergabe um die „Privacy Extensions for Stateless Address Autoconfiguration“ erweitert worden, die die Adresse stärker „randomisiert“. Unter RHEL muss man das von Hand aktivieren (im Beispiel heisst das Netzwerk-Interface ens32), anschliessend wird die Adresse darüber hinaus alle 24h erneuert:

/etc/sysctl.conf
net.ipv6.conf.ens32.use_tempaddr = 2
sysctl -p

Um die IPv6-Adresse zu einem Hostnamen zu ermitteln, hilft dig:

dig -t AAAA www.example.com

IPv6 abschalten

Falls benötigt schaltet man IPv6 wie folgt ab. Im laufenden System:

echo 1 > /proc/sys/net/ipv6/conf/all/disable_ipv6
echo 1 > /proc/sys/net/ipv6/conf/default/disable_ipv6

Dauerhaft:

/etc/sysctl.conf
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
sysctl -p

Built on 2024-03-28