Fakultät Informatik, Institut für Systemarchitektur, Professur Rechnernetze Rechnernetzpraxis Internet Protocol (IPv4/IPv6) und Hilfsprotokolle [email protected] Einleitung • Schicht 3 / das Internet Protocol bietet eine vom Übertragungsmedium unabhängige Schicht • Ermöglicht Adressierung von Knoten eines weltweiten Rechnernetzes • Verfügbar in zwei Versionen: IPv4 und IPv6 Dienstnutzer HTTP TCP z.B. durch Local Internet-Schicht Internet Registry z.B. dynamisch (z.B. ISP) vergebene zugewiesene Adresse Adresse IP Ethernet Dienstanbieter Internet IP Technologie X Router Ethernet IP IP TechnoTechnologie X logie Y Router TechnoEthernet logie Y Router HTTP TCP IP Ethernet • Protokolldetails der Internet-Schicht? • Adressierung von Knoten? Größe und Struktur des Adressraums? • Erforderliche Hilfsprotokolle u.a. zur Ermittlung von Netzcharakteristika und Konfiguration von Knoten? • Möglichkeiten zur 1-zu-n-Kommunikation? 2 • Abhängigkeiten von Netzcharakteristika? Inhalte 1. Internet Protocol Version 4 • Header • Adressierung • Address Resolution Protocol • Internet Control Message Protocol 2. Internet Protocol Version 6 • Header • Fragmentierung • Adressen • Multicast • Neighbor Discovery Protocol • Stateless Address Autoconfiguration • Übergang zu IPv6 3. Raw Sockets 4. Übersicht zur IP-Implementierung im Linux-Kernel 3 IPv4-Header 31 0 Version IHL DSCP ECN Identification TTL Total Length Flags Protocol Fragment Offset Header Checksum Source Address Destination Address Options + Padding Daten • • • • • • • • • • • • Version – 4 Bit: Protokollversion Internet Header Length (IHL) – 4 Bit: Länge des Headers in 32-Bit-Wörtern; ohne Optionen beträgt die Länge 5 → 5 * 32 Bit = 160 Bit = 20 Byte Differentiated Service Code Point (DSCP) – 6 Bit: Feld für Differentiated Services (DiffServ) Explicit Congestion Notification (ECN) – 2 Bit: Meldung von Überlastsituationen Total Length – 16 Bit: Gesamtlänge des Datagramms / Fragments in Bytes Identification – 16 Bit: Eindeutige Kennung eines Datagramms Flags – 3 Bit: Bit 0 → reserviert; muss Null sein (siehe RFC 3514 ;-)); Bit 1: Don't Fragment (DF); Bit 2: More Fragments (MF) Fragment Offset – 15 Bit: Offset in acht Byte-Blöcken, die Daten innerhalb eines ursprünglichen Pakets hatten Time To Live (TTL) – 8 Bit: Laut Spezifikation Lebenszeit, in der Praxis Anzahl von Hops, die Paket weitergeleitet werden kann Protocol – 8 Bit: Im Datenbereich verwendetes Protokoll; Werte finden sich beispielsweise unter Linux in /etc/protocols Header Checksum: Cheksumme nur für den IP-Header 4 Options: Zusatzdaten z.B. zum Routing oder Zeitstempel IPv4-Adressierung • Struktur IPv4-Adresse: Netzadresse 0 bis n Bit • • innerhalb eines Netzes eindeutig Host-Adresse 32-n Bit Notation: IP-Adresse/n (=Classless-Inter-Domain-Routing-Notation (CIDRNotation)) Netzanteil ermöglicht Ausbildung einer hierarchischen Netzstruktur und damit effizientes Routing Pfad zum Internet Netz: 141.76.40.0/24 Netz: 141.76.40.0/25 Netz: 141.76.40.128/25 Router mit Routing-Tabelle: 141.76.40.0/25 → eth0 (= 1. Ethernetschnittstelle) 141.76.40.128/25 → eth1 (= 2. Ethernetschnittstelle) • • IP-Adresse des Hosts: 141.76.40.42/25 IP-Adresse des Hosts: 141.76.40.140/25 Einteilung von IPv4-Adressen in öffentl. Adressen (innerhalb des Internets eindeutig; durch zentrale Instanzen vergeben) und private Adressen (innerhalb eines lokalen Netzes eindeutig; z.B. im Netz 192.168.0.0/24) Insbesondere aufgrund der Knappheit von IPv4-Adressen werden öffentliche Adressen durch Network Address Translation (NAT) auf mehrere Hosts 5 abgebildet Address Resolution Protocol (ARP) - Einordnung Hostname Resolver 2 IP-Adresse • 1 Web Browser Verbindungsaufbau mit IP-Adresse 3 TCP 4 ARP 6 7 EthernetSchnittstelle 5 Sende IP-Datagramm zu IP-Adresse • • IP 8 Fallunterscheidung: Führt Lookup in lokaler ARP-Tabelle durch; falls kein Eintrag gefunden wird, wird ein Broadcast gesendet • • 1 Eingabe eines URI in den Web Browser 4 2 Auflösen des URI in eine IP-Adresse 5 3 Verbindungsaufbau mittels TCP-Schicht initiieren 6 ARP ermittelt die zu IP-Adressen (bzw. weiteren Adressfamilien) gehörigen Hardwareadressen über ein Request/Reply-Protokoll Ermittelte Zuordnungen werden für bestimmten Zeitraum in ARPTabellen auf Knoten gespeichert Sollte IP-Paket nicht für Host in lokalem Netz sein, kann via ARP die Hardwareadresse des lokalen Gateways / eines Routers bestimmt werden → wird für ausgehendes Datagramm auf Schicht 2 als Zieladresse verwendet Im Fall von IPv6 wird ARP durch das Neighbor Discovery Protocol abgelöst ARP-Tabelle unter Linux bspw. via ip neigh show anzeigbar Host mit angefragter IP-Adresse IP-Schicht wird mit Weiterleitung des Datagramms beauftragt Anfrage nach MAC-Adresse des nächsten Knoten auf dem Weg 7 hat sich gemeldet und seine MAC- Senden einer ARP-Anforderung (ARP Request) an BroadcastAdresse (ff:ff:ff:ff:ff:ff) 8 Adresse in ARP-Antwort (ARP Reply) zurückgesendet Übermittlung des IPDatagramms mit ZielMAC = erfragte Adresse 6 Address Resolution Protocol (ARP) - Protokolldetails • Ablauf, falls Host über Gateway (IPv4: 192.168.0.1) einen Knoten im Internet kontaktiert: Wert: 00:00:00:00:00:00 Host Wert: 1 = Request n 0 IP Adr. Hard. Adr. IP Adr. Hard. Adr. Op. Prot. Hard. Prot. Hard. Ethernet Rec. Receiver Sender Sender Code size size type type -Header Gateway Identische Paketstruktur mit: • Hardware Address Sender = Hardware-Adresse des Gateways • IPv4 Address Sender = IPv4-Adresse des Gateways • Op. Code (Operation-Code) = 2 → Reply • Hardware Address Receiver = Hardware-Adresse des Hosts • IPv4 Address Receiver = IPv4-Adresse des Hosts • Hard. type (Hardware Address type): Technologischer Typ der Hardware-Adresse (1 = Ethernet) • Prot. type (Protocol type): Typ der Schicht 3 Protokolladresse, die auf die HardwareAdresse abgebildet wird (0x0800 = IPv4) • Hard. size (Hardware size) / Prot. size (Protocol size): Größe der Hardware- und 7 Protokolladresse in Bytes ICMP-Übersicht • Internet Control Message Protocol (ICMP) dient der Kommunikation von Fehlern und der Abfrage von Statusinformationen in (fast immer IP-basierten) Netzwerken • Für IPv4 spezifiziert in RFC 792, für IPv6 spezifiziert in RFC 4443 • Spezifikation der Typ-Nummern und Code-Nummern erfolgt durch die IANA 0 31 Typ Code Prüfsumme Weitere Inhalte abhängig vom Nachrichtentyp / Code ICMP Nachrichtentypen Fehlermeldungen Anfrage/Antwort Einordnung: IPHeader ICMPNachricht 20 Bytes Typ: Klassifiziert ICMPNachricht Code: Unterkategorie des Typs Prüfsumme: Über die gesamte Nachricht inkl. Daten berechnet • Ausgewählte Typen: • 0 - Echo Reply: Antwort auf ein Echo Request • 3 - Destination Unreachable: Ziel ist nicht erreichbar; u.a. folgende Codes verfügbar: • 0 – Net unreachable • 3 – Port unreachable • 4 – Fragmentation needed and don‘t fragment was set • 9 - Router Advertisement: Dient dem automatischen Disovery von Routern • 11 - Time Exceeded: Time-To-Life-Feld eines IP-Datagramms ist abgelaufen • 13 - Timestamp: Dient Zeitmessung auf dem Kanal zu einem Host bzw. der Messung der Verarbeitungszeit im Host 8 ICMP-Beispiel: ICMP-Redirect (Typ: 5) Szenario: Gateway 1 Ursprünglich geplanter Umweg Netzwerk 1 mit Sender ICMP-RedirectNachricht Gateway 2 Netzwerk 2 mit Empfänger Nach Empfang der ICMP-Nachricht tatsächlich verwendeter und effizienterer Weg • ICMP-Redirect-Nachricht wird von einem Gateway versendet, der feststellt, dass ein Router, an den ein Datagramm als nächstes weitergeleitet wird, im gleichen Netz lokalisiert ist wie der Sender des Datagrams • Sehr gutes Beispiel für ICMP-Nachricht mit Potential zur Durchführung von Angriffen → ICMP-Redirect-Angriff, bei dem ein Angreifer Datenverkehr durch gefälschte RedirectNachrichten über sich leitet Nachrichtenformat: Code-Angabe: 1 31 • 0 = Redirect von Datagrammen für Netz • 1 = Redirect von Datagrammen für Host 5 0-3 Prüfsumme • 2 = Redirect von Datagrammen des Type Gateway Internet Adresse of Services und des Netzwerks • 3 = Redirect von Datagrammen des Type Mindestens 20 Oktette IP-Paketkopf 9 of Services und des Hosts Mind. 64 Bits des ursprünglichen Paketes Gateway: Zu verwendender Gateway Ausgewählte Nachteile von IPv4 • Ausgeschöpfter Adressraum: • • • • • • IP-Adresse muss manuell oder über das Dynamic Host Configuration Protocol (DHCP) vergeben werden Zusätzliche Infrastruktur für automatische Konfiguration erforderlich Ineffizientes Routing: • theoretisch 4 Milliarden Adressen Durch ungünstige Vergabe zusätzlich begrenzt (z.B. erhielt IBM ein /8Netz) IPv4-Adressen werden für Kunden zunehmend teuer Einsatz von Network Address Translation (NAT) kann Verwendung von einigen Diensten erschweren bzw. verhindern (Ende-zu-EndePrinzip wird gebrochen) Keine automatische Konfiguration: • • • • • Header von IPv4-Paketen hat eine variable Länge Optionen können den Header auf bis zu 60 Bytes ausweiten Router prüfen meist, ob ein Paket die MTU überschreitet und leiten ggf. Fragmentierung ein (siehe dennoch RFC 1191) Nur optionale bzw. nachträglich ergänzte Unterstützung für neue Anforderungen, z.B.: • • Keine garantierte Sicherheit auf der Internet-Schicht (IPSec ist optional) Keine native Mobilitätsunterstützung 10 IPv6 • IPv6 soll in den nächsten Jahren schrittweise IPv4 ablösen • Ausgewählte Verbesserungen: • Vergrößerung des Adressraums durch Einführung 128-Bit-Adressen • Erweiterte Adressierungsmöglichkeiten für Multicasts und Einführung v. AnycastAdressierung für die Adressierung eines beliebigen Knotens in einer Gruppe • Vereinfachung des Headers zur Steigerung der Verarbeitungsgeschwindigkeit in intermediären Knoten • Verbesserte Unterstützung für Erweiterungen und Optionen • Automatische Konfiguration von IPv6-Adressen in Knoten • Steigerung der Sicherheit durch IPSec und Privacy-Ansätze • Klassifizierung von Datagrammen durch Flow Label mit verbundener Möglichkeit zur Umsetzung von Quality-of-Service (Qos) 0 Traffic Class: Traffic Class Flow Label • Prioritätsvergabe Version für QoS Payload Length Next Header Hop Limit Flow Label: • Klassifizierung v. Datagrammen in Source Address verschiedene Flows mit je gleichem Label Destination Address Next Header: • Identifikation für ErweiterungsPayload Length: Hop Limit: header / Schicht• Größe des gesamten Datagramms • Ersatz für TTL-Feld zur 11 4-Header (exkl. erstem Header) Angabe maximaler Hops 31 IPv6 – Extension Header • Im einfachsten Fall verweist das Next-Header-Feld auf einen Header eines Protokolls der nächsthöheren Schicht IPv6-Header z.B. Next Header = TCP Payload z.B. TCP-Header + Daten • Für Zusatzinformationen und spezielle Anwendungsfälle können (wohldefinierte) Extension Header in ein Datagramm eingebettet werden IPv6-Header z.B. Next H. = Hop-by-Hop-Options Extension Header Next Header = TCP Payload z.B. TCP-Header + Daten • Folgende Extension Header werden in RFC 2460 definiert: • Hop-by-Hop-Optionen • Falls mehrere Extension Header • Destination-Optionen auftauchen, muss die gegebene Reihenfolge eingehalten werden • Routing • Alle Extension Header (mit Ausnahme • Fragment der Destination-Optionen) dürfen • Authentication maximal einmalig in einem • Encapsulation Security Payload Datagramm vorliegen • Next-Header-Wert 59 zeigt an, dass kein weiterer Header (auch kein Header höherer Schichten) folgt 12 IPv6 - Fragmentierung • Pakete, die größer als die zulässige minimale Maximum Transmission Unit (MTU) des Pfads zum Ziel sind, werden durch den Sender fragmentiert • Absender wird über ICMPv6-Nachricht vom Typ 2 („Packet Too Big“) über Fragmentierungsbedarf informiert • Absender fragmentiert Paket (und nicht wie bei IPv4 Router) → Effizienzsteigerung Zu fragmentierendes IPv6-Paket IPv6-Header plus ExtensionHeader, die von intermediären Knoten verarbeitet werden müssen fragmentierbarer Anteil nicht fragmentierbarer Anteil Nicht fragmentierbarer Anteil … Nicht fragmentierbarer Anteil Extension-Header, die nur von Zielknoten verarbeitet werden müssen plus Header und Daten höherer Schichten Fragment Header 1 Fragment 1 … … Fragment Header N Fragment N Aufteilung in N Pakete, die die minimale Pfad-MTU unterschreiten • Fragment Header enthält vier essentielle Angaben: • Next Header: Identifiziert den initialen Header des fragmentierbaren Anteils • Fragment Offset: 13-Bit-Wert zur Identifikation des Offsets des Fragments innerhalb des ursprünglichen Pakets (Angabe in 8-Oktett-Einheiten) • M-Flag: 1 = Es folgen weitere Fragmente; 0 = keine weiteren Fragmente folgen • Identification: 32-Bit-Identifikator für das ursprüngliche Paket; ermöglicht 13 Rückschluss, welche Fragmente zu welchem Paket gehören IPv6-Adressen - Notation • Adressierung in RFC 4291 festgelegt und in RFC 5952 detailliert • Verbreitetste Form der Adressnotation: x:x:x:x:x:x:x:x • x = vier hexadezimale Zahlen → je 16 Bit • Falls längere Folgen von Null-Blöcken in Adressen auftauchen, können diese durch zwei Doppelpunkte einmalig pro Adresse abgekürzt werden • Beispiel: ff01:0:0:0:0:0:2342:78fa → ff01::2342:78fa • Für die letzten 32 Bit einer Adresse kann die dezimale Notation (wie in IPv4) verwendet werden → ermöglicht leicht lesbare Notation von IPv4-Adressen in IPv6Adressraum Beispiel: ::141.76.40.1 • RFC 4291 schränkt mögliche Notation von Adressen nicht strikt ein, so dass es zahlreiche Varianten einer Adresse gibt → erschwert Arbeit mit Adressen • Empfehlungen aus RFC 5952: • Alle führenden Nullen eines Blocks weglassen • Zwei Doppelpunkte • sollen maximale Anzahl von Null-Blöcken repräsentieren • dürfen nicht zur Abkürzung eines einzelnen Blocks verwendet werden • Bei mehreren Kürzungsoptionen soll Kürzung möglichst weit links durchgeführt werden • Es sollen Kleinbuchstaben in den Adressen verwendet werden • Wenn Portnummern angegeben werden, ist die IPv6-Adresse in eckige Klammern zu schreiben • Beispiel: [ff01:0:0:0:0:0:2342:78fa]:80 (alternativ: [ff01::2342:78fa]:80) → Klammern ebenfalls zur Notation von URLs verwendet 14 IPv6 - Adressen • Unterscheidung von drei Typen von Adressen (neben Spezialfällen): • Unicast-Adressen mit verschiedenen Scopes / Gültigkeitsbereichen • Identifikator eines einzelnen Netzwerkinterfaces • Link-local (verbindungslokale) Unicast-Adressen • Interface-Adressierung innerhalb abgeschlossener Netzsegmente • Globale Unicast-Adressen D0 • Weltweite Interface-Adressierung S Unicast-Adressierung Einziger Empfänger des Pakets D1 • Anycast-Adressen D2 • Identifikator für eine Menge von Interfaces • An Anycast-Adresse gesendetes Paket wird an eines der Interfaces gesendet, das durch die Adresse identifiziert wird S ng ssieru e r d A st Anyca D0 D1 Adressat des Pakets Einziger Empfänger des Pakets • Multicast-Adressen D2 Adressat des Pakets • Identifikator für eine Menge von Interfaces • An Multicast-Adresse gesendetes Paket wird an alle Interfaces gesendet, die durch die Adresse identifiziert werden • Aufgrund von Multicasts sind keine Broadcasts mehr erforderlich S ssie t-Adre s a c i lt Mu rung D0 D1 D2 Empfänger des Pakets 15 IPv6-Adressen Generelle Struktur von IPv6-Adressen Für Routing verwendeter Adressanteil (entspricht NetzAdresse von IPv4) Präfix Interface-Identifier Eindeutiger Identifikator einer Schnittstelle innerhalb des durch den Präfix bestimmten Netzbereichs • Textuelle Notation analog zur Classless-Inter-Domain-Routing-Schreibweise (CIDR): IPv6-Adresse/Präfixlänge • Beispiel: 2001:0db8:0000:e0d2:ab01:0002:4500:a001/48 Präfix-Länge Präfix Interface-Identifier • Typ einer Adresse kann an den höchstwertigsten Bits erkannt werden: • Unspecified-Adressen: • Binärer Präfix: 00…0 (128 Bit) IPv6-Notation: ::/128 • Loopback-Adressen: • Binärer Präfix: 00…1 (128 Bit) IPv6-Notation: ::1/128 • Multicast-Adressen: • Binärer Präfix: 11111111 (8 Bit) IPv6-Notation: ff00::/8 • Link-local Unicast-Adresse: • Binärer Präfix: 1111111010 (10 Bit) • IPv6-Notation: fe80::/10 • Globale Unicast-Adresse: alle anderen Adressen (z.B. 2000::/3) • Anycast-Adressen: Befinden sich im Adressraum der Unicast-Adressen und können von diesen syntaktisch nicht unterschieden werden 16 siehe auch http://www.iana.org/assignments/ipv6-address-space/ipv6-address-space.xhtml Erzeugung Link-local Adresse • Link-lokale Adresse kann aus Link-Layer Adresse des Interfaces berechnet werden und muss anschließend auf Eindeutigkeit hin überprüft werden (siehe SLAAC) • Erzeugung eines 64 Bit Interface-Identifiers im Fall von EthernetInterfaces aus Modified EUI-64 Präfix (64 Bit) Modified EUI-64 Beispiel: MAC-Adresse: 24 77 03 22 E8 2D Invertieren von Bit 7 (=„universal/local 26 Bit”) 77 03 FF FE 22 E8 2D ergänzt Resultierende Link-lokale Adresse: fe80:0000:0000:0000 2677:3ff:fe22:e82d • Problem für globale Adresse: Einfache Identifikation von Nutzern im Internet möglich • Lösung: Privacy Extensions for Stateless Address Autoconfiguration in IPv6 (RFC 4941) = regelmäßige Generierung des Interface-Identifiers unter 17 Verwendung von Zufallswerten IPv6-Multicasts • Aufbau einer Multicast-Adresse: Präfix fe00 (8 Bit) Flags (4 Bit) Scope(4 Bit) z.B. Flag T → von IANA definierte Adresse? Gruppen-ID (112 Bit) z.B. Link-lokal • Beispiel für festgelegte („well-known“) Multicast-Adressen: • ff02::1 → Alle Knoten am Link • ff02::2 → Alle Router am Link • ff02::16 → Alle MLDv2-fähigen Router • Beitritt zu einer Multicast-Gruppe auf dem Link erfolgt über das in ICMPv6 eingebettete Protokoll Multicast Listener Discovery (MLDv2, RFC 3810) Host MLDv2-fähiger Router ICMP-Nachricht (Typ 14 3 = Multicast Listene r Report Message v2) an Adresse ff02::16 18 Neighbor Discovery Protocol (NDP) • Hauptaufgaben von NDP: • Ermitteln von verfügbaren Routern • Bestimmung der Link-Layer-Adresse eines Knotens • Verwaltung von Erreichbarkeitsinformation eines Knotens • Grundlage für Stateless Address Autoconfiguration • Spezifiziert in RFC 4861 • Definiert fünf ICMPv6-Nachrichtentypen: • Router Solicitation • Router Advertisement • Neighbor Solicitation • Neighbor Advertisement • Redirect 1 Host sendet Router Solicitation Message an Multicast-Adresse ff01::2 (alle Router) Router R Host R Router antworten mit Router2 AdvertisementNachricht, die Konfigurationsparameter (z.B. Präfix) enthält R R 1 Host sendet Neighbor Solicitation Message an die Solicited Node MulticastAdresse eines Knotens, dessen LinkLayer-Adresse ermittelt werden soll 2 Host, der auf Neighbor Solicitation Multicast-Adresse lauscht antwortet mit einer Neighbor-AdvertisementNachricht R R R R 19 Neighbor Discovery Protocol (NDP) • Generischer IPv6-Host verwaltet vier Datenstrukturen, die durch NDP gefüllt werden: • Neighbor Cache • • • • Destination Cache • • Prefix List • • • Default Router List Menge von Nachbarknoten, zu denen kürzlich Daten geschickt wurden Entspricht ARP-Tabelle in IPv4 Einträge werden klassifiziert in Router und Hosts Für jeden Nachbarn wird ein Zustand gespeichert, u.a.: • INCOMPLETE: Erreichbarkeitsprüfung wird gerade durchgeführt • REACHABLE: Nachbar war kürzlich erreichbar Beinhaltet für Knoten, zu denen kürzlich Daten gesendet wurden, einen Verweis in den Neighbor Cache Referenzierter Eintrag in Neighbor Cache ist der Next-Hop-Knoten auf dem Weg zum Zielknoten Beinhaltet Liste mit allen Präfixen, die am Link („on-link prefix“) sind Für Entscheidung verwendet, ob Zieladressen zu direktem Nachbar gehört oder nicht Aus den Informationen in Router Advertisements erzeugt Enthält Router, von denen einer für die Paketweiterleitung ausgewählt wird, falls Zielknoten nicht am lokalen Link verfügbar ist 20 NDP – ausgewählte Protokolldetails: Router Advertisement • Router Advertisement wird von einem Router in regelmäßigem Abstand an den lokalen Link versendet; alternativ: Versand nach Anfrage durch Host • IP-Header-Informationen: • Zieladresse: Anfragender Knoten oder Multicast-Adresse für alle Knoten • Hop Limit = 255; Pakete mit Werten < 255 werden verworfen → verhindert, dass valides Paket von außerhalb des Links stammen kann Typ Code Prüfsumme Cur Hop Limit M O Reserved Router Lifetime Reachability Time Retransmission Time Options • Cur Hop Limit: Vorgabe für Hop-Limit-Feld für ausgehende IP-Pakete • M-Bit („Managed address configuration”): 1 = IP-Adressen werden durch DHCP verwaltet • O-Bit („Other configuration”): 1 = weitere Konfigurationsinformationen werden am Link via DHCP verwaltet (z.B. DNS-Konfiguration) • Router Lifetime: Zeit in Millisekunden, die ein Router der Default-Router bleiben sollte • Reachability Time: Zeit in Millisekunden, die ein Nachbar nach Lebenszeichen als erreichbar gilt • Retransmission Time: Zeit, in Millisekunden, die zwischen zwei Neighbor-SolicitationNachrichten liegen soll • Protokoll wird beispielsweise implementiert durch Router Advertisement Daemon (radvd) 21 IPv6 – Stateless Address Autoconfiguration (SLAAC) • Phase I: Erzeugung und Überprüfung einer Link-lokalen Adresse, um Zugriff auf Knoten am lokalen Link zu haben (z.B. lokale Router) 2 1 Link Host 3 4 1 Host generiert eine Link-lokale Adresse aus der MAC-Adresse 2 Host tritt der Solicited-Node-Multicast-Adresse der erzeugten Link-lokalen Adresse bei und sendet eine Neighbor-Solicitation-Nachricht an diese Adresse 3 4 Der Host wartet eine bestimmte Zeitspanne; das Ausbleiben einer Antwort wird als Indikator für die Eindeutigkeit der selbst zugewiesenen Adresse interpretiert → die Adresse wird dem Interface zugewiesen Der Host sendet Neighbor-Advertisement-Nachrichten an alle Hosts des Links (= Multicast-Adresse ff02::1) 22 IPv6 – Stateless Address Autoconfiguration (SLAAC) • Phase 2: Erzeugen einer weltweit eindeutigen Global-Unicast-Adresse: 1 3 Host 2 Link 2 Router 4 1 Host fragt mittels einer Router-Solicitation-Nachricht nach einem Router Advertisement (vermeidet unnötiges Warten auf regelmäßig übertragenes Advertisement) 2 Router versendet ein Router Advertisement mit allen für die Konfiguration wichtigen Informationen (insbesondere Angabe des Präfixes) 3 Unter Verwendung des Präfixes und des zuvor erzeugten Interface-Identifiers der Link-local Adresse wird eine Global Unicast-Adresse erzeugt 4 Nach Beitritt zur Solicited-Node-Multicast-Adresse für die Global Unicast-Adresse, werden mehrere Neighbor-Solicitation-Nachrichten an die Global Unicast-Adresse versendet; sollte die Adresse bereits verwendet werden, antwortet der entsprechende Host mit einer Neighbor-Advertisement-Nachricht 23 Übergang zu IPv6 • Baldige Transition eines Großteils des Internets zu IPv6 wird seit über fünfzehn Jahren propagiert • Aktuell ist IPv4 noch dominierend • Gegenwärtige Situation: Koexistenz von IPv4 und IPv6 → Erfordert Mechanismen zur Realisierung des Übergangs und für Interoperabilität Übergangsmechanismen • Dual-Stack Tunnelmechanismen • • • Übersetzungsverfahren • • Interfaces erhalten sowohl eine IPv4- wie auch eine IPv6-Adresse Knoten können über beide Protokolle unabhängig voneinander Kommunizieren Kapselung von Paketen von IPv4 bzw. IPv6 in IPv6 bzw. IPv4 Ausgewählte Varianten: 4in6, 6in4, 6over4, … Transformation von Headern einer Version in Header der anderen Version Beispiel: NAT64 zur Übersetzung von IPv4Adressen in IPv6-Adressen 24 Dual-Stack Lite (DS-Lite) • Dual-Stack Lite Broadband Deployments Following IPv4 Exhaustion ist spezifiziert in RFC 6333 • Ermöglicht Internet-Service-Providern (ISPs) die Wiederverwendung von IPv4-Adressen für verschiedene Kunden durch 1. IPv4-in-IPv6-Kapselung und 2. Network Address Translation (NAT) 4 1 3 Vermittlung via IPv6 Einsatz von privatem IPv4 1. Entpacken des IPv4-Pakets 2. Abbildung der IPv4Absenderadresse auf öffentliche IPv4-Adresse CGN Kundennetz CGN = Carrier Grade NAT CPE ISP-Netzwerk CPE = Customer-Premises Equipment 2 IPv4Internet Router (IPv6) IPv6Internet Kapselt IPv4Pakete in IPv6Pakete • Vorteile: • Infrastruktur des Providers kann auf IPv6 umgestellt werden • IPv4-Adressen werden beim Provider eingespart 25 Raw Sockets • Ermöglichen die Implementierung von IPv4-Protokollen im User-Space • IP-Headerelemente wie auch gekapselte Datagramme können im Programm befüllt werden • Durch Raw Sockets können z.B. implementiert werden: • Netzwerksicherheitswerkzeuge wie Portscanner • ICMP-basierte Anwendungen IP-Header wird • Routing-Protokolle durch die … struct iphdr *ip = (struct iphdr *)packet; struct tcphdr *tcp = (struct tcphdr *)(packet + sizeof(struct iphdr)); … int rawsock = socket(AF_INET,SOCK_RAW,IPPROTO_TCP); setsockopt(rawsock, IPPROTO_IP, IP_HDRINCL, &one, sizeof(one)); … unsigned int packetsize = sizeof(struct iphdr) + sizeof(struct tcphdr); ip->version = 4; ip->ihl = 5; ip->id = htonl(random()); ip->saddr = inet_addr("127.0.0.1"); // Source IP ip->daddr = inet_addr("127.0.0.1"); // Destination IP ip->ttl = 123; ip->protocol = IPPROTO_TCP; ip->tot_len = packetsize; ip->check = 0; // wenn == 0, wird sie vom Kernel berechnet Anwendung und nicht durch das Betriebssystem erstellt Im fiktiven Beispiel wird nur ein IPHeader und ein TCPHeader ohne weitere Inhaltsdaten versendet Beliebige Quell- und Ziel-IP-Adressen (bei Angabe öffentlicher Adresse ggf. vom InternetServiceProvider gefiltert) 26 Übersicht IPv6-Implementierung im Linux-Kernel (4.9) • Implementierung von IPv4 bzw. IPv6 befindet sich im Ordner net/ip bzw. net/ipv6 • Pakete können in verschiedenen Verarbeitungszuständen durch registrierte Netfilter-Hook-Funktionen abgefangen, untersucht und manipuliert werden; Anwendungsfeld: Paketfilterdefinition mittels Iptables Transportschicht ip6_input_finish(…) ip6_xmit(…) (net/ipv6/ip6_input.c) (net/ipv6/ip6_output.c) nf_hook(…, NF_INET_LOCAL_OUT,…) nf_hook(…, NF_INET_LOCAL_IN,…) ip6_forward(…) ROUTING (net/ipv6/ip6_output.c) nf_hook(…, NF_INET_FORWARD,…) ROUTING nf_hook(…, NF_INET_PRE_ROUTING,…) ip_output(…) ipv6_rcv(…) (net/ipv6/ip_output.c) (net/ipv6/ip6_input.c) nf_hook(…, NF_INET_POST_ROUTING,…) Datenübertragungsschicht 27 IPv6-Implementierung im Linux-Kernel (4.9) • Minimaler Auszug aus ip6_forward(…) (net/ipv6/ip6_output.c) int ip6_forward(struct sk_buff *skb) { struct dst_entry *dst = skb_dst(skb); struct ipv6hdr *hdr = ipv6_hdr(skb); struct inet6_skb_parm *opt = IP6CB(skb); struct net *net = dev_net(dst->dev); ... if (hdr->hop_limit <= 1) { skb->dev = dst->dev; icmpv6_send(skb, ICMPV6_TIME_EXCEED, ICMPV6_EXC_HOPLIMIT, 0); IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_INHDRERRORS); } ... Kann Paket weitere „Hops“ durchlaufen? Schicke ICMPNachricht an Sender und erhöhe Statistikzähler kfree_skb(skb); return -ETIMEDOUT; hdr = ipv6_hdr(skb); hdr->hop_limit--; __IP6_INC_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS); __IP6_ADD_STATS(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTOCTETS, skb->len); return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD, skb, skb->dev, dst->dev, ip6_forward_finish); ... } Dekrementiere Feld „hop limit“ Erhöhe Statistikzähler Sprung zu NetfilterHooks und anschließend zu ip6_forward_finish 28 Zusammenfassung Automatische IPAdressvergabe durch Dynamic Host Configuration Protocol (DHCP) IPv4Host • IPv4-Adressen: 32 Bit Schwächen: • Begrenzter Adressraum • Ineffizientes Routing • Keine automatische Konfiguration • Nur optionale bzw. nachträglich ergänzte Unterstützung für neue Anforderungen Wichtige Hilfsprotokolle: • Internet Control Message Protocol (auch in IPv6 eingesetzt → ICMPv6) • Address Resolution Protocol Übergang unterstützt durch: Dual-Stack, Tunnelmechanismen, Übersetzungsverfahren Automatische IP-Adressvergabe Ausgewählte Eigenschaften: • Multicast + Anycastdurch Stateless Address Adressierung Autoconfiguration oder Dynamic • Effizienteres Routing Host Configuration Protocol (Vereinfachter Header) (DHCP) • Steigerung der Sicherheit durch IPv6IPSec und Privacy-Ansätze Host • Verbesserte Quality-of-ServiceUnterstützung (Qos) • IPv6-Adressen: 128 Bit Partieller ARP-/DHCPErsatz: Neighbor Discovery Protocol → → → → → Router Solicitation Router Advertisement Neighbor Solicitation Neighbor Advertisement Redirect 29 Literatur / Links Ausgewählte RFCs • • • • • Internet Protocol Version 4 http://tools.ietf.org/html/rfc791 Internet Protocol Version 6 http://tools.ietf.org/html/rfc2460 IPv6 SLAAC http://tools.ietf.org/html/rfc4862 IPv6-Adressierungsarchitektur http://tools.ietf.org/html/rfc4291 Neighbor Discovery Protocol http://tools.ietf.org/html/rfc4861 Bücher • TCP/IP Illustrated Volume 1 von W. Richard Stevens, Addison-Wesley Professional Computing Series, 1994 • Linux Kernelarchitektur von Wolfgang Mauerer, (Kapitel 9 zur Protokollrealisierung in Kernel 2.6), Carl Hanser Verlag, 2004 Sonstiges • Linux IPv6 Router Advertisement Daemon (radvd): • http://www.litech.org/radvd/ 30