Im ersten Blogbeitrag zu OSPF (OSPFv2) haben wir recht ausführlich die grundlegenden Eigenschaften von OSPF, den verschiedenen Arten von Routingprotokollen und der Funktion und Konfiguration von OSPFv2 für IPv4 erläutert.
Nun soll es hier um OSPFv3 für IPv6 und IPv4 gehen. Die grundlegenden OSPF-Funktionen bleiben dabei gleich, lediglich einige LSA-Typen sind abgeändert bzw. angepasst.
OSPFv3 für IPv6
OSPF wurde mit der Version 3, kurz OSPFv3, für IPv6 angepasst.
Standardisiert ist OSPFv3 für IPv6 in der RFC 5340 https://tools.ietf.org/html/rfc5340
Mehr Grundlagen zum Thema IPv6 gibt es hier auf der iternas IPv6 Seite.
Konfiguration von OSPF für IPv6
Es gibt zwei Möglichkeiten, OSPF für IPv6 zu konfigurieren.
Der erste Ansatz ist, OSPF für IPv6 als separaten Prozess und von den Befehlen her ähnlich wie IPv4 einzurichten.
Lediglich die vertraute Zuordnung der zu routenden Netze per "network-Befehl" entfällt, statt dessen wird das gesamte Interface dem OSPFv3-Prozess zugeordnet. Damit sind alle IPv6-Interfaceadressen Bestandteil vom OSPF. Wir haben also zusätzlich zu IPv4 OSPFv2 einen neuen OSPFv3 Prozess nur für IPv6.
Der neuere Weg ist, einen OSPFv3 Prozess zu starten und darunter die IPv6 and IPv4 unicast Adress Family (AFs) anzulegen.
Dazu gibt es im OSPFv3 eine Erweiterung, welche auf der bestehende OSPFv3-Basis weitere Adressarten (aktuell zusätzlich IPv4) und VRFs unterstützt. Diese Erweiterung von OSPFv3 ist in der RFC 5838 https://tools.ietf.org/html/rfc5838 definiert.
-> Achtung, nicht jeder Router und Hersteller unterstützt diesen Weg bzw. erst ab einer gewissen Softwareversion. (Cisco IOS XE Release 3.4S und höher, Cisco IOS 15.1 und höher haben die Funktion implementiert.)
Wie oben bereits erwähnt, erfolgt die Zuweisung der Netze und Areas bei IPv6 OSPF immer, egal in welcher Art und Weise, in der Interfacekonfiguration und nicht mehr als network statement im OSPF-Prozess, wie es bei OSPFv2 für IPv4 der Fall war. Dieses rührt daher, dass wir bei IPv6 OSPF von „Links“ und nicht mehr von Netzen sprechen.
Damit werden, wie erwähnt, alle IP-Adressen eines Interfaces in den Routingprozess aufgenommen, eine Selektion von einzelnen IP-Adressen ist an dieser Stelle nicht vorgesehen. Da ein Interface beliebig viele IPv6-Adressen haben kann und die sich zudem ändern können, wurde in den Standard-RFCs diese Festlegung getroffen.
In unserem Beispiel LAB legen wir als erstes die OSPF IPv6-Konfig so an, wie wir es von IPv4 kennen. Die Zuweisung der Netze erfolgt im Interface mit dem Befehl "ipv6 ospf 1 area 0":
Router01
!
ipv6 router ospf 1
router-id 1.2.3.4
!
!
interface GigabitEthernet0/0
ipv6 address 2001:db8:aabb:1234::2/64
ipv6 ospf 1 area 0
!
!
interface Loopback10
no ip address
ipv6 address FE80::2 link-local
ipv6 address 2000:3::2/64
ipv6 ospf 1 area 0
!
Auf dem Router02 konfigurieren wir das Interface Gig 0/0 und das Loopback-Interface sinngemäß:
Router02
!
ipv6 router ospf 1
router-id 3.4.5.6
!
!
interface Loopback10
no ip address
ipv6 address FE80::3 link-local
ipv6 address 2000:4::3/64
ipv6 ospf 1 area 0
!
interface GigabitEthernet0/0
ipv6 address 2001:db8:aabb:1234:1111:2222:3333:4444/64
ipv6 ospf 1 area 0
!
Wir prüfen die Konfiguration und sehen einen separaten OSPF-Prozess für IPv6.
In der Abbildung 13 sehen wir die Routing-Tabelle vom Router 01:
Nun löschen wir die OSPFv3 Konfiguration („no ipv6 router ospf 1“ oder etwas robuster mit „no ipv6 unicast-routing“ und dann wieder „ipv6 unicast-routing“)
Jetzt konfigurieren wir OSPFv3 mit dem „address-family“-Ansatz und weisen dazu einfach in den Interfaces die OSPF-Areas hinzu. Allein durch das Hinzufügen der Areas zu den Interfaces wird ein neuer OSPFv3-Prozess angelegt. Nur optional ist es notwendig, dort Änderungen vorzunehmen, bspw. die Router-ID auf einen manuellen Wert (pro Adress family separat möglich) zu ändern.
!
Router01
!
interface Loopback10
no ip address
ipv6 address FE80::2 link-local
ipv6 address 2000:3::/64
ospfv3 1 ipv6 area 0
!
!
interface GigabitEthernet0/0
ip address 192.168.1.1 255.255.255.0
ipv6 address 2001:BB9:AABB:1234::1/64
ospfv3 1 ipv4 area 0
ospfv3 1 ipv6 area 0
!
Anstelle des „ipv6 router ospf 1” aus dem ersten Beispiel haben wir nun:
!
Router02
!
router ospfv3 1
router-id 10.10.10.10
!
address-family ipv4 unicast
redistribute static
default-information originate always
exit-address-family
!
address-family ipv6 unicast
router-id 1.2.3.4 !optional, überschreibt die globale OSPFv3 Router-ID
exit-address-family
!
Hier in Abbildung 14 sehen wir die OSPFv3 Nachbarn beider unicast address family.
Fortan werden die OSPF LSA, also die Routing-Informationen für IPv4 und IPv6 als OSPFv3 durch das Netzwerk verteilt.
Wichtig ist, dass es für jede Adressart separate OSPF neighbors aufgebaut und Hello-Nachrichten versendet werden. Die gesamte OSPFv6-Kommunikation erfolgt über, egal bei welcher zu routenden Adressfamilie, über IPv6 link-local Adressen.
Daher ist es zwingend notwendig, dass auf allen OSPFv3-Links mindestens IPv6 link-local Adressen eingerichtet sind. (siehe RFC 5838, Abschnitt 2.7)
(Lediglich virtual-links verwenden globale IPV6-Adressen als Endpunkte, da sich die IPv6-Adressen für die virtuellen Endpunkte ebenfalls routen lassen müssen, link-local IPv6-Adressen erfüllen diese Bedingung nicht.
Figure 15: zeigt ein OSPFv3 Hello Paket, in diesem Fall mit IPv4-Routinginformationen. Zu erkennen ist, dass die OSPFv3-Informationen über IPv6 link-local Adressen ausgetauscht werden, auch wenn die zu routenden Netze IPv4 sind.
So sieht das Capture gut aus!
Während unseren Schulungen stellen wir das OSPFv3-Setup im Lab nach und prüfen das Ergebnis im Lab.