next up previous contents
Nächste Seite: 7 IPv6 Tunneling Aufwärts: Inhalt Vorherige Seite: 5 IPv6 Routing mit   Inhalt

Unterabschnitte

6 IPv6 Routing-Protokolle

In diesem Kapitel werden die drei IPv6 Routing-Protokolle RIPng, OSPFv6 und IS-IS genauer untersucht. Die wichtigsten Eigenschaften der einzelnen Protokolle werden beschrieben und die Konfiguration sowohl auf einem Linux-basierten Router als auch auf einem Cisco 2611XM erklärt.

1 Aufbau des Netzwerks

Abbildung 6.1: Routing-Protokolle: Aufbau des Netzwerks
Image images/routing-protocols.png

Um die verschiedenen IPv6 Routing-Protokolle analysieren zu können, wird ein Testnetzwerk aus drei Subnetzen aufgebaut (Abb. 6.1). Die drei Netzwerke sind über zwei Router miteinander verbunden, als Router kommt der Cisco 2611XM sowie der Linux PC 1 mit der Routing-Software Zebra zum Einsatz.

Der Domino LAN-Analyzer wird im Subnetz A zwischen die beiden Router installiert, um die Routing-Updates aufzeichnen zu können.

2 RIPng

Das RIPng-Protokoll ist spezifiziert in RFC 2080 (14) und ist im wesentlichen eine Re-Implementierung von RIP angepasst an IPv6. Es wurden nur dort Änderungen im Protokoll vorgenommen, wo dies für die Lauffähigkeit mit IPv6 notwendig ist. Insbesondere gelten die selben Einschränkungen bezüglich Anzahl Hops (max. 15), des counting to infinity-Problems und der fixen Metrik wie für das klassische RIP. Dafür ist es genauso problemlos in der Konfiguration und stellt für kleine Netzwerke eine gute und einfache Lösung dar.

1 Konfiguration des Linux-Routers

In der Zebra-Konfiguration muss der ripngd eingeschaltet werden, dies geschieht über den Eintrag ripngd=yes in /etc/zebra/daemons. Der Linux-Router erhält auf beiden Interfaces eine manuell konfigurierte IPv6-Adresse, diese können in der Datei zebra.conf eingetragen werden. Ausserdem muss sichergestellt werden, dass der Linux-Router nur im Subnetz C Router Advertisements verbreitet.

interface eth0
  ipv6 address fec2::1/64
  ipv6 nd send-ra
  ipv6 nd prefix-advertisement fec2::/64

interface eth1
  ipv6 address fec0::1/64
  no ipv6 nd send-ra

Der ripngd wird über die Datei ripngd.conf konfiguriert. Mit folgenden vier Einträgen wird das Subnetz fec2::/64 per RIPng auf beiden Netzwerkinterfaces verbreitet:

router ripng
network eth1
network eth0
route fec2::/64

Danach muss Zebra mit /etc/init.d/zebra restart neu gestartet werden.

2 Konfiguration des Cisco 2611XM

Als erstes wird ein benannter RIPng Routing-Prozess gestartet mit ipv6 router rip name. Danach genügt ein Befehl im Konfigurations-Modus des gewünschten Interfaces um den Routing-Prozess einzuschalten. Im Beispiel lautet der Name des Routing-Prozesses ripng:

R5#configure terminal
R5(config)#ipv6 router rip ripng
R5(config-router)#interface f0/0
R5(config-if)#ipv6 rip ripng enable
R5(config-if)#interface f0/1
R5(config-if)#ipv6 rip ripng enable

Da das Routing Information Protocol sehr einfach aufgebaut ist, hat es praktisch keine Optionen, die verändert werden können. Um diese Optionen zu verändern, sei auf IPv6 for Cisco IOS Command Reference (1) verwiesen.

Mit dem Befehl show running-configuration wird angezeigt, dass RIPng eingeschaltet ist:

...
interface FastEthernet0/1
 no ip address
 duplex auto
 speed auto
 ipv6 address FEC1::/64 eui-64
 ipv6 enable
 ipv6 nd ra-interval 10
 ipv6 rip ripng enable
...

Die ganze Konfiguration des Cisco-Routers ist in Anhang C.2.2 ersichtlich.

3 Analyse der RIPng-Meldungen

Im Wesentlichen existieren zwei relevante RIPng-Meldungstypen, Requests und Responses. Ein Request wird in der Regel an eine Mulitcast-Adresse (üblicherweise die Link-Local-RIPng-Multicast-Adresse ff02::9) von einem Router verschickt, welcher eben erst ans Netz gekommen ist, damit er möglichst schnell alle nötigen Informationen bekommt, die er zum Füllen seiner Routingtabellen benötigt. Die anderen Router im Netz antworten darauf mit RIPng-Unicast-Responses.

Ausserdem sendet jeder Router in 30 Sekunden-Intervallen seine ganze RIPng-Tabelle als UDP-Paket an die Multicast-Adresse ff02::9 (UDP-Port 521). Als Absenderadresse wird für beide Meldungstypen stets die Link-Local-Adresse des jeweiligen Interfaces verwendet, da diese Adresse direkt Eingang in die Routing-Tabellen findet. Ausnahmen von diesen Regeln sind im RFC 2080 (14) beschrieben.

Zebra RIPng Request

Zunächst sendet der Linux-Router einen RIPng Request. Gut erkennbar ist, dass als Absenderadresse die Link-Local-Adresse fe80::201:2ff:fe87:17a5 des Interfaces eth1 benutzt wird (Zeile 13).

Ethernet II
    Destination: 33:33:00:00:00:09 (33:33:00:00:00:09)
    Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Type: IPv6 (0x86dd)
    Trailer: 76D673BD
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 32
    Next header: UDP (0x11)
    Hop limit: 255
    \textbf{Source address: fe80::201:2ff:fe87:17a5}
    Destination address: ff02::9
User Datagram Protocol, Src Port: 521 (521), Dst Port: 521 (521)
    Source port: 521 (521)
    Destination port: 521 (521)
    Length: 32
    Checksum: 0xe1d1 (correct)
RIPng
    Command: Request (1)
    Version: 1
    IP Address: ::/0, Metric: 16
        IP Address: ::
        Tag: 0x0000
        Prefix length: 0
        Metric: 16

Cisco RIPng Response

Der Cisco 2611XM beantwortet den Request des Linux-Routers mit einer RIPng Response Meldung. Dies ist erkennbar an der Unicast Destination Adresse, die der Link Local Adresse des Interfaces des Linux-Routers entspricht (Zeile 14).

Ethernet II
    Destination: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Type: IPv6 (0x86dd)
    Trailer: 227E2C58
Internet Protocol Version 6
    Version: 6
    Traffic class: 0xe0
    Flowlabel: 0x00000
    Payload length: 52
    Next header: UDP (0x11)
    Hop limit: 255
    Source address: fe80::20d:29ff:fe28:0
    \textbf{Destination address: fe80::201:2ff:fe87:17a5}
User Datagram Protocol, Src Port: 521 (521), Dst Port: 521 (521)
    Source port: 521 (521)
    Destination port: 521 (521)
    Length: 52
    Checksum: 0x398a (correct)
RIPng
    Command: Response (2)
    Version: 1
    IP Address: fec0::/64, Metric: 1
        IP Address: fec0::
        Tag: 0x0000
        Prefix length: 64
        Metric: 1
    IP Address: fec1::/64, Metric: 1
        IP Address: fec1::
        Tag: 0x0000
        Prefix length: 64
        Metric: 1

Zebra RIPng Response

Zum Vergleich hier ein Beispiel einer regulären periodischen RIPng Response Meldung. Diese besitzt als Destination Adresse die Multicast-Adresse ff02::9 (Zeile 14), welche alle RIPng-Router im lokalen Segment anspricht.

Ethernet II
    Destination: 33:33:00:00:00:09 (33:33:00:00:00:09)
    Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Type: IPv6 (0x86dd)
    Trailer: 8E8BFE96
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 32
    Next header: UDP (0x11)
    Hop limit: 255
    Source address: fe80::201:2ff:fe87:17a5
    \textbf{Destination address: ff02::9}
User Datagram Protocol, Src Port: 521 (521), Dst Port: 521 (521)
    Source port: 521 (521)
    Destination port: 521 (521)
    Length: 32
    Checksum: 0xa21d (correct)
RIPng
    Command: Response (2)
    Version: 1
    IP Address: fec2::/64, Metric: 1
        IP Address: fec2::
        Tag: 0x0000
        Prefix length: 64
        Metric: 1

3 OSPF für IPv6

OSPF für IPv6 ist spezifiziert im RFC 2740 (2) und ist auch bekannt unter den Namen OSPFv3 und OSPFv6. Die grundsätzliche Funktionsweise hat sich gegenüber OSPF für IPv4 (RFC 2328 (16)) nicht verändert, es gibt aber einige wichtige Unterschiede:

Per-Link statt Per-Subnetz:
Da mit IPv6 mehrere Subnetze an ein Interface gebunden werden können und zwei direkt verbundene Knoten auch dann kommunizieren können, wenn sie nicht im selben Subnetz liegen (über Link-Local-Adressen), funktioniert OSPFv3 nicht mehr auf Subnetz- sondern auf Link-Basis.

Wegfall der Adress-Semantik in OSPF-Paketen:
Im Gegensatz zu OSPFv2 stellen die syntaktisch unveränderten 32-Bit Router-, Area- und LSA Link State-IDs keine IP-Adressen mehr dar, es handelt sich nur noch um OSPF-interne IDs. Damit enthalten Router- und Network-LSAs keinerlei Adress-Informationen mehr, sondern nur noch Informationen über die Topologie.

Flooding-Bereiche:
Neu gibt es drei Flooding-Bereiche, Link-Local, Area und AS. Der Bereich wird im LS Type-Feld der LSAs festgelegt.

Mehrere Instanzen pro Link:
Es ist möglich, mehrere OSPF-Instanzen auf dem selben Link zu fahren.

Verwendung von Link-Local-Adressen.

Wegfall von Authentifizierungsmechanismen:
Da IPv6 bereits Authentifizierungsmechanismen bietet, sind diese aus dem OSPF-Protokoll entfernt worden.

OSPF ist ein Link-State-Routing-Protokoll, welches die kürzesten Pfade mit dem Dijkstra-Algorithmus berechnet. Das heisst, dass alle Knoten die gesamte Netztopologie kennen.

Zu Beginn weiss der Knoten noch nichts über das Netz. Mittels Hello-Nachrichten werden die ersten Daten ausgetauscht. Diese beinhalten neben Router-ID, Interface-ID und einigen Zeiteinstellungen auch allfällige Nachbarn, den Designated Router und den Backup Designated Router. Wenn diese noch nicht bestimmt sind, wählen die Router unter sich einen Designated Router und Designated Backup Router aus. Nachdem diese Informationen ausgetauscht worden sind, beginnen die Router ihre Routingeinträge mit Link-State-Advertisements (LSA) auszutauschen. Dabei werden Sequenznummern verwendet, um veraltete Pakete zu erkennen und wegzuwerfen. Aus diesem Grund setzt das Protokoll direkt auf IP auf und nicht auf TCP. Wenn ein Paket nicht ankommt, greift nicht ein Fehlerkorrekturmechanismus ein, sondern es wird auf das nächste Paket gewartet, welches nach der eingestellten Zeit verschickt wird.

1 Konfiguration des Linux-Routers

Zunächst muss der ospf6d in der Zebra-Konfiguration mit der Zeile ospf6d=yes in /etc/zebra/daemons eingeschaltet werden. Die Datei zebra.conf bleibt unverändert.

Die Konfiguration des ospf6d geschieht in der Datei ospf6d.conf. Um später genaue Analysen vornehmen zu können, empfiehlt es sich, die verschiedenen Debug-Optionen einzuschalten. So werden sämtliche Vorgänge im Logfile, welches über log file /var/log/zebra/ospf6d.log angegeben wird, festgehalten.

debug ospf6 dbdesc
debug ospf6 lsreq
debug ospf6 lsupdate
debug ospf6 lsack
debug ospf6 neighbor
debug ospf6 interface
debug ospf6 area
debug ospf6 lsa
debug ospf6 zebra
debug ospf6 config
debug ospf6 dbex
debug ospf6 spf
debug ospf6 route

Für die Konfiguration der Interfaces ist es wichtig, dass bei benachbarten Routern die gleichen Hello- und Router-Dead-Intervalle gewählt werden, ansonsten werden sich die Router nicht als Nachbarn akzeptieren.

Um später die Berechnung der Costs für verschiedene Wege nachvollziehen zu können, werden die Cost-Werte für die verschiedenen Interfaces auf eindeutige Werte gesetzt:

interface eth1
 ipv6 ospf6 cost 13
 ipv6 ospf6 hello-interval 5
 ipv6 ospf6 dead-interval 60
 ipv6 ospf6 retransmit-interval 5
 ipv6 ospf6 priority 1
 ipv6 ospf6 transmit-delay 1
 ipv6 ospf6 instance-id 0
!
interface eth0
 ipv6 ospf6 cost 7
 ipv6 ospf6 hello-interval 5
 ipv6 ospf6 dead-interval 60
 ipv6 ospf6 retransmit-interval 5
 ipv6 ospf6 priority 1
 ipv6 ospf6 transmit-delay 1
 ipv6 ospf6 instance-id 0

Schliesslich kann mit password noch ein Passwort gesetzt werden, dann steht nach dem Start von Zebra eine IOS-ähnliche VTY-Konsole auf dem TCP-Port 2606 zur Verfügung, über welche Statusabfragen sowie Konfigurationsanpassungen vorgenommen werden können.

2 Konfiguration des Cisco 2611XM

OSPF für IPv6 kann über die Config-Konsole des jeweiligen Interfaces eingeschaltet werden:

R5(config-if)#ipv6 ospf 1 area 0

Wobei die 1 die interne Identifikation und 0 die Area, welche diesem Interface zugeordnet ist, darstellt.

Der Befehl ipv6 ospf dead-interval 60 setzt das Timeout für das Erkennen eines Ausfalls von anderen Routern auf 60 Sekunden. Das heisst, wenn ein Router innerhalb dieser Zeit nicht antwortet, wird der Router als möglicher Weg gestrichen. Mit ipv6 ospf hello-interval 5 wird die Periode für das Senden der Hello-Pakete auf fünf Sekunden gesetzt. Standardmässig ist dieser Parameter auf zehn Sekunden gesetzt, damit das Netzwerk nicht mit Paketen überfüllt wird. Die Parameter dead-interval und hello-interval müssen für alle Router im selben Link-Segment gleich sein, sonst sehen sich die Router nicht als Nachbarn und die Routinginformationen werden nicht weitergeleitet. Für die vollständige Konfiguration sei auf Anhang C.2.3 verwiesen.

Ausgeschaltet wird OSPF mit dem Befehl no ipv6 ospf 1 area 0

3 Analyse der OSPF-Meldungen

OSPF Hello Packet

Dieses erste Hello Packet stammt vom Cisco, erkennbar an seiner Router ID, welche auf 192.168.1.1 gesetzt ist (Zeile 20). Da er zunächst der einzige Router im Netz ist, hat er sich selber zum Designated Router ernannt (Zeile 31). Ein Backup Designated Router existiert noch nicht im Netz (Zeile 32).

Ethernet II
    Destination: 33:33:00:00:00:05 (33:33:00:00:00:05)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Type: IPv6 (0x86dd)
    Trailer: 1CC42A26
Internet Protocol Version 6
    Version: 6
    Traffic class: 0xe0
    Flowlabel: 0x00000
    Payload length: 36
    Next header: OSPF (0x59)
    Hop limit: 1
    Source address: fe80::20d:29ff:fe28:0
    Destination address: ff02::5
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: Hello Packet (1)
        Packet Length: 36
        \textbf{Source OSPF Router: 192.168.1.1 (192.168.1.1)}
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0x4ff5 (correct)
        Instance ID: 0
        Reserved: 0
    OSPF Hello Packet
        Interface ID: 3
        Router Priority: 1
        Options: 0x13 (V6/E/R)
        Hello Interval: 5 seconds
        Router Dead Interval: 60 seconds
        \textbf{Designated Router: 192.168.1.1}
        \textbf{Backup Designated Router: 0.0.0.0}

Zum Vergleich das erste Hello Packet des Linux-Routers (Router ID 1.2.3.4, vgl. Zeile 20). Da er gerade erst ans Netz gekommen ist, kennt er weder einen Designated noch einen Backup Designated Router (Zeilen 31 und 32).

Ethernet II
    Destination: 33:33:00:00:00:05 (33:33:00:00:00:05)
    Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Type: IPv6 (0x86dd)
    Trailer: 80392587
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 36
    Next header: OSPF (0x59)
    Hop limit: 1
    Source address: fe80::201:2ff:fe87:17a5
    Destination address: ff02::5
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: Hello Packet (1)
        Packet Length: 36
        \textbf{Source OSPF Router: 1.2.3.4 (1.2.3.4)}
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0xde4a (correct)
        Instance ID: 0
        Reserved: 0
    OSPF Hello Packet
        Interface ID: 3
        Router Priority: 1
        Options: 0x13 (V6/E/R)
        Hello Interval: 5 seconds
        Router Dead Interval: 60 seconds
        \textbf{Designated Router: 0.0.0.0}
        \textbf{Backup Designated Router: 0.0.0.0}

OSPF DB Description

Der Austausch der Routing Informationen wird über eine bidirektionale Kommunikation vorgenommen. Zur Aufnahme dieser Kommunikation wird zunächst ein ansonsten leeres Database Description Paket verschickt, welches eine Sequenznummer enthält (Zeile 31). Der Initiator der Verbindung fungiert für die Dauer dieser Kommunikation als Master, in diesem Fall ist es der Cisco.

Ethernet II
    Destination: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Type: IPv6 (0x86dd)
    Trailer: E35062FA
Internet Protocol Version 6
    Version: 6
    Traffic class: 0xe0
    Flowlabel: 0x00000
    Payload length: 28
    Next header: OSPF (0x59)
    Hop limit: 1
    Source address: fe80::20d:29ff:fe28:0
    Destination address: fe80::201:2ff:fe87:17a5
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: DB Descr. (2)
        Packet Length: 28
        Source OSPF Router: 192.168.1.1 (192.168.1.1)
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0xe3e6 (correct)
        Instance ID: 0
        Reserved: 0
    OSPF DB Description
        Reserved: 0
        Options: 0x13 (V6/E/R)
        Interface MTU: 1500
        Reserved: 0
        Flags: 0x7 (MS/M/I)
        \textbf{DD Sequence: 3714}

Der Linux-Router antwortet auf diese Anfrage mit einem DB Description Paket, welches mehrere Link State Advertisements (LSA) enthält (Zeilen 32-55). Um das Paket als Antwort auf die vorherige Anfrage des Cisco-Routers auszuweisen, benutzt der Linux-Router die gleiche Sequenznummer für die Antwort (Zeile 31).

Ethernet II
    Destination: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Type: IPv6 (0x86dd)
    Trailer: 627B617F
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 88
    Next header: OSPF (0x59)
    Hop limit: 64
    Source address: fe80::201:2ff:fe87:17a5
    Destination address: fe80::20d:29ff:fe28:0
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: DB Descr. (2)
        Packet Length: 88
        Source OSPF Router: 1.2.3.4 (1.2.3.4)
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0x4197 (correct)
        Instance ID: 0
        Reserved: 0
    OSPF DB Description
        Reserved: 0
        Options: 0x13 (V6/E/R)
        Interface MTU: 1500
        Reserved: 0
        Flags: 0x0 ()
        \textbf{DD Sequence: 3714}
    LSA Header
        LS Age: 2 seconds
        LSA Type: 0x2001 (Router-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483647
        LS Checksum: ed38
        Length: 24
    LSA Header
        LS Age: 1 seconds
        LSA Type: 0x2009 (Intra-Area-Prefix-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483646
        LS Checksum: 4c94
        Length: 56
    LSA Header
        LS Age: 2 seconds
        LSA Type: 0x0008 (Link-LSA)
        Link State ID: 0.0.0.3
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483647
        LS Checksum: 58fb
        Length: 56

Der Cisco-Router sendet nun seinerseits seine LSA (Zeilen 32-79) in einem weiteren DB Description Paket an den Linux-Router. Die vorherigen Advertisements des Linux-Routers sind bereits in die Meldung des Ciscos integriert. Die Sequenznummer des DBD-Pakets ist um Eins erhöht (Zeile 31).

Ethernet II
    Destination: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Type: IPv6 (0x86dd)
    Trailer: B1F9F10F
Internet Protocol Version 6
    Version: 6
    Traffic class: 0xe0
    Flowlabel: 0x00000
    Payload length: 148
    Next header: OSPF (0x59)
    Hop limit: 1
    Source address: fe80::20d:29ff:fe28:0
    Destination address: fe80::201:2ff:fe87:17a5
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: DB Descr. (2)
        Packet Length: 148
        Source OSPF Router: 192.168.1.1 (192.168.1.1)
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0x55fd (correct)
        Instance ID: 0
        Reserved: 0
    OSPF DB Description
        Reserved: 0
        Options: 0x13 (V6/E/R)
        Interface MTU: 1500
        Reserved: 0
        Flags: 0x3 (MS/M)
        DD Sequence: 3715
    LSA Header
        LS Age: 231 seconds
        LSA Type: 0x2001 (Router-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483640
        LS Checksum: 1f7b
        Length: 40
    LSA Header
        LS Age: 101 seconds
        LSA Type: 0x2001 (Router-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 192.168.1.1 (192.168.1.1)
        LS Sequence Number: -2147483633
        LS Checksum: b9de
        Length: 24
    LSA Header
        LS Age: 1068 seconds
        LSA Type: 0x0008 (Link-LSA)
        Link State ID: 0.0.0.3
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483647
        LS Checksum: 58fb
        Length: 56
    LSA Header
        LS Age: 1320 seconds
        LSA Type: 0x0008 (Link-LSA)
        Link State ID: 0.0.0.3
        Advertising Router: 192.168.1.1 (192.168.1.1)
        LS Sequence Number: -2147483647
        LS Checksum: 0caf
        Length: 56
    LSA Header
        LS Age: 231 seconds
        LSA Type: 0x2009 (Intra-Area-Prefix-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 1.2.3.4 (1.2.3.4)
        LS Sequence Number: -2147483639
        LS Checksum: 44a3
        Length: 44
    LSA Header
        LS Age: 101 seconds
        LSA Type: 0x2009 (Intra-Area-Prefix-LSA)
        Link State ID: 0.0.0.0
        Advertising Router: 192.168.1.1 (192.168.1.1)
        LS Sequence Number: -2147483644
        LS Checksum: 2af2
        Length: 56

Nun braucht der Cisco noch weitere Informationen zum Status des Linux Routers, er sendet daher gleich einen Link State Request hinterher, in dem er ein Link State Update zum Link mit der Link State ID 0.0.0.3 verlangt (Zeile 28).

Ethernet II
    Destination: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Type: IPv6 (0x86dd)
    Trailer: 10C8A6DB
Internet Protocol Version 6
    Version: 6
    Traffic class: 0xe0
    Flowlabel: 0x00000
    Payload length: 28
    Next header: OSPF (0x59)
    Hop limit: 1
    Source address: fe80::20d:29ff:fe28:0
    Destination address: fe80::201:2ff:fe87:17a5
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: LS Request (3)
        Packet Length: 28
        Source OSPF Router: 192.168.1.1 (192.168.1.1)
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0xf44c (correct)
        Instance ID: 0
        Reserved: 0
    Link State Request
        Reserved: 0
        LS Type: Link-LSA (0x0008)
        \textbf{Link State ID: 0.0.0.3}
        Advertising Router: 1.2.3.4 (1.2.3.4)

Der Linux-Router antwortet sofort mit einem Link State Update, in welchem er das zugehörige Subnetz (Zeile 42), dessen Präfix-Länge (Zeile 39) sowie die Interface-Adresse (Zeile 37) bekannt gibt. Das LSA in diesem Update enthält ausserdem eine Sequenznummer (Zeile 32) und eine Checksumme (Zeile 33), anhand diesen erkennt der Cisco-Router, ob die LSA in zukünftigen DB Descriptions des Linux-Routers aktualisiert worden sind.

Ethernet II
    Destination: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
    Type: IPv6 (0x86dd)
    Trailer: 74D8B32B
Internet Protocol Version 6
    Version: 6
    Traffic class: 0x00
    Flowlabel: 0x00000
    Payload length: 76
    Next header: OSPF (0x59)
    Hop limit: 64
    Source address: fe80::201:2ff:fe87:17a5
    Destination address: fe80::20d:29ff:fe28:0
Open Shortest Path First
    OSPF Header
        OSPF Version: 3
        Message Type: LS Update (4)
        Packet Length: 76
        Source OSPF Router: 1.2.3.4 (1.2.3.4)
        Area ID: 0.0.0.0 (Backbone)
        Packet Checksum: 0x7ed5 (correct)
        Instance ID: 0
        Reserved: 0
    LS Update Packet
        Number of LSAs: 1
        Link-LSA (Type: 0x0008)
            LS Age: 1 seconds
            LSA Type: 0x0008 (Link-LSA)
            Link State ID: 0.0.0.3
            Advertising Router: 1.2.3.4 (1.2.3.4)
            LS Sequence Number: -2147483647
            LS Checksum: 58fb
            Length: 56
            Router Priority: 1
            Options: 0x13 (V6/E/R)
            Link-local Interface Address: fe80::201:2ff:fe87:17a5
            # prefixes: 1
            PrefixLength: 64
            PrefixOptions: 0x00 ()
            Reserved: 0
            Address Prefix: fec0:0000:0000:0000

Auch der Linux-Router sendet danach einen Link State Request und erhält darauf in einem Link State Update die Antwort des Cisco-Routers. Der Ablauf ist genau gleich und wird deshalb hier nicht mehr detailliert aufgeführt.

4 IS-IS

Intermediate System to Intermediate System ist ein von ISO standardisiertes Link State Routing-Protokoll (ISO 10589) und wurde von der IETF im RFC 1142 (18) unverändert übernommen. IS-IS ist multiprotokollfähig, die nötigen Anpassungen an IPv6 sind minimal und in einem sechs Seiten kurzen IETF Draft (12) aufgeführt. Schlussendlich sind es nur zwei neue TLV (Type-Length-Value), die neu definiert werden.

TLV sind Felder in den IS-IS-Routing-Paketen, welche spezifische Routinginformationen enthalten. Neu definiert werden zum einen die IPv6 Reachability TLV, welche Informationen über die IPv6-Netze eines Routers enthält, zum anderen die IPv6 Interface Address TLV, diese enthält die IPv6-Interface-Adresse eines IS.

Schliesslich wird noch der Network Layer Protocol Identifier für IPv6 definiert, er lautet 0x8E. Dieser Identifier wird benutzt, um das Protokoll anzugeben für welches die Routinginformationen bestimmt sind.

Für weitere Informationen zu IS-IS sei auf die Projektarbeit Dynamisches IP Routing unter Einsatz des Routingprotokolls IS-IS von Daniel Thar und Michael Schaffner (20) verwiesen.

1 Konfiguration des Linux-Routers

Die Standard-Zebra-Version unterstützt IS-IS nicht. Es existiert jedoch ein sich in der Entwicklung befindlicher Patch[*], welcher diese Unterstützung bietet. Wie die aktuelle Versionsnummer 0.0.7 des isisd vermuten lässt, ist die Entwicklung noch nicht sehr weit fortgeschritten. Die Entwicklung geht auch nicht sehr schnell voran: Die Version 0.0.7 stammt aus dem Oktober 2002, und im CVS hat sich seit einem halben Jahr nichts mehr am Code verändert.

Der IPv6-Support des isisd ist noch sehr instabil, das Programm stürzt reproduzierbar nach 30 Sekunden mit einem Segmentation Fault ab, wenn der Cisco-Router am Netz hängt. Die Funktionalität genügt jedoch, um zusammen mit dem Cisco 2611XM die grundsätzliche Arbeitsweise von IS-IS für IPv6 zu analysieren.

Um die gepatchte Version von Zebra zu installieren, muss zunächst die Debian-Version entfernt werden mit dem Befehl apt-get remove zebra. Damit bleiben die Konfigurationsdateien sowie das SysV-Init-Skript /etc/init.d/zebra erhalten.

Nach dem Herunterladen des Zebra-Quellpaketes in ein geeignetes Verzeichnis (z. B. /usr/src/) wird es entpackt, konfiguriert, kompiliert und installiert. Mit der Option -sysconfdir=/etc/zebra wird das Verzeichnis für die Konfigurationsdateien angegeben, damit werden die aus den vorherigen Versuchen bereits vorhandenen Konfigurationsdateien weiter benutzt.

# tar xvzf zebra-0.93b-isisd-0.0.7.tar.gz 
# cd zebra-0.93b
# ./configure --sysconfdir=/etc/zebra --enable-isisd
...
zebra configuration
-------------------
zebra version           : 0.93b
host operationg system  : linux-gnu
source code location    : .
compiler                : gcc
compiler flags          : -g -O2 -Wall
directory for pid files : /var/run
# make
...
make[2]: Leaving directory `/usr/src/zebra-0.93b/doc'
make[2]: Entering directory `/usr/src/zebra-0.93b'
make[2]: Leaving directory `/usr/src/zebra-0.93b'
make[1]: Leaving directory `/usr/src/zebra-0.93b'
# make install

Als Ausgangspunkt für die Konfiguration des isisd kann die Beispielkonfigurationsdatei /etc/zebra/isisd.conf.sample nach isisd.conf kopiert werden. Die Datei sollte in etwa wie folgt aussehen:

hostname linux1
password geheim
enable password geheimer
log file /var/log/zebra/isisd.log
!
interface eth0
 ipv6 router isis \textbf{e423}
interface eth1
 ipv6 router isis \textbf{e423}
!
router isis \textbf{e423}
 net \textbf{04.0002.0000.0000.0004.00}
!
!
line vty

Wichtig ist die Angabe in der Zeile net 04.0002.0000.0000.0004.00. Die lange Nummer definiert den Network Entity Title NET, welcher sich aus der Area ID (in diesem Fall 04.0002) und der System ID (hier 0000.0000.0004 zusammensetzt. Der Bezeichner e423 kann frei gewählt werden.

Damit das Init-Skript weiter benutzt werden kann, muss der Pfad zu den Binaries sowie die Liste der Routing-Daemons in /etc/init.d/zebra angepasst werden:

D_PATH=/usr/local/sbin
DAEMONS="zebra bgpd ripd ripngd ospfd ospf6d isisd"

Durch die Zeile isisd=yes in /etc/zebra/daemons wird der isisd beim nächsten Zebra-Start automatisch mitgestartet.

2 Konfiguration des Cisco 2611XM

Obwohl das IS-IS für IPv6 (Version 2) erst ein Draft ist, unterstützt es die IOS Version 12.3(1a) schon. Folgende Befehle schalten das IS-IS-Protokoll ein:

Die ganze benutzte Konfiguration ist in Anhang C.2.4 aufgelistet. Um die verschiedenen Parameter des Protokolls einzustellen, muss in der Router-Konfiguration der Befehl address-family ipv6 eingegeben werden. Mit der Hilfetaste (Taste ?) werden alle verfügbaren Befehle angezeigt.

Ausgeschaltet wird IS-IS im Konfigurationsmodus mit no router isis e423.

3 Analyse der IS-IS-Meldungen

Beim Informationsaustausch zwischen den IS-IS-Routern kommen drei Arten von Paketen ins Spiel: Hello-Pakete, Link State PDU-Pakete (LSP) sowie Complete Sequence Numbers PDU-Pakete (CSNP). Diese werden in der Folge anhand jeweils eines Beispiels beschrieben.

IS-IS Hello

Im Hello-Paket finden sich Informationen zum sendenden Router, die für den Aufbau eines Nachbarschaftsverhältnisses gebraucht werden, z. B. seine System-ID (Zeile 25), die unterstützten Protokolle (Zeile 31), die Area, in der sich der Router befindet (Zeile 33) oder die ihm bekannten Nachbarn (Zeile 40). Schliesslich wird die PDU mit 177 Bytes Padding auf die minimale Grösse aufgefüllt (PDU Alignment, Zeilen 41-46).

IEEE 802.3 Ethernet 
    Destination: 01:80:c2:00:00:14 (01:80:c2:00:00:14)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Length: 1500
    Trailer: F5E5AA78
Logical-Link Control
    DSAP: ISO Network Layer (0xfe)
    IG Bit: Individual
    SSAP: ISO Network Layer (0xfe)
    CR Bit: Command
    Control field: U, func = UI (0x03)
        000. 00.. = Unnumbered Information
        .... ..11 = Unnumbered frame
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intra Domain Routing Protocol Discriminator: ISIS (0x83)
    PDU Header Length  : 27
    Version (==1)      : 1
    System ID Length   : 0
    PDU Type           : L1 HELLO (R:000)
    Version2 (==1)     : 1
    Reserved (==0)     : 0
    Max.AREAs: (0==3)  : 0
    ISIS HELLO
        Circuit type              : Level 1 and 2, reserved(0x00 == 0)
        \textbf[SystemID{ Sender of PDU } : 0000.0000.0003]
        Holding timer             : 10
        PDU length                : 1497
        Priority                  : 64, reserved(0x00 == 0)
        SystemID{ Designated IS } : 0000.0000.0003-01
        Protocols Supported (1)
            \textbf[NLPID(s): IPv6 (0x8e)]
        Area address(es) (4)
            \textbf[Area address (3): 04.0002]
        IPv6 Interface address(es) (16)
            IPv6 interface address    : fe80::20d:29ff:fe28:0
        Restart Signaling (3)
            Restart Request bit clear, Restart Acknowledgement bit clear
            Remaining holding time: 0s
        IS Neighbor(s) (6)
            \textbf[IS Neighbor: BBN_87:17:a5]
        Padding (255)
        Padding (255)
        Padding (255)
        Padding (255)
        Padding (255)
        Padding (143)

IS-IS LSP

Mit den Link State PDUs wird zwischen Nachbarn Routing-Information ausgetauscht. Die LSP enthält die Subnetze (Zeile 47, 52) mit den zugehörigen Metriken (Zeile 48, 53) eines Interfaces (Zeile 38).

IEEE 802.3 Ethernet 
    Destination: 01:80:c2:00:00:15 (01:80:c2:00:00:15)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Length: 105
    Trailer: 00DF4C4C
Logical-Link Control
    DSAP: ISO Network Layer (0xfe)
    IG Bit: Individual
    SSAP: ISO Network Layer (0xfe)
    CR Bit: Command
    Control field: U, func = UI (0x03)
        000. 00.. = Unnumbered Information
        .... ..11 = Unnumbered frame
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intra Domain Routing Protocol Discriminator: ISIS (0x83)
    PDU Header Length  : 27
    Version (==1)      : 1
    System ID Length   : 0
    PDU Type           : L2 LSP (R:000)
    Version2 (==1)     : 1
    Reserved (==0)     : 0
    Max.AREAs: (0==3)  : 0
    ISO 10589 ISIS Link State Protocol Data Unit
        PDU length: 102
        Remaining lifetime: 1199
        LSP ID: 0000.0000.0003.00-00
        Sequence number: 0x000001b8
        Checksum: 0x1c1c
        Type block(0x03): P:0, Supported metric(s): default-only, OL:0, 
                                                    istype:Level 1 and Level 2 IS
        Area address(es) (4)
            Area address (3): 04.0002
        Protocols supported (1)
            NLPID(s): IPv6 (0x8e)
        Hostname (2)
            Hostname: R5
        IPv6 Interface address(es) (16)
            \textbf{IPv6 interface address: fec1::20d:29ff:fe28:1}
        IS Reachability (12)
            Reserved value 0x00, must == 0
            IS Neighbor:  0000.0000.0003-01
                Default Metric: 10, Internal
                Delay Metric:   Not supported
                Expense Metric: Not supported
                Error Metric:   Not supported
        IPv6 reachability (28)
            \textbf{IP prefix: fec0:: /64}
                \textbf{Metric: 10}
                Distribution: up, internal
                Reserved bits: 0x0
                sub-TLVs: no
            \textbf{IP prefix: fec1:: /64}
                \textbf{Metric: 10}
                Distribution: up, internal
                Reserved bits: 0x0
                sub-TLVs: no

IS-IS CSNP

Eine Complete Sequence Numbers Protocol Data Unit dient dazu, die Routing-Datenbank aktuell zu halten. Die CSNPs werden periodisch verteilt, ein Router erkennt anhand der LSP ID, der Sequenznummer sowie der Checksumme, ob eine bestimmte LSP noch gültig ist. Jede LSP besitzt ausserdem einen Timer, der ihre Lebenszeit begrenzt (Zeilen 29-54).

IEEE 802.3 Ethernet 
    Destination: 01:80:c2:00:00:15 (01:80:c2:00:00:15)
    Source: 00:0d:29:28:00:00 (00:0d:29:28:00:00)
    Length: 102
    Trailer: 22DC72FF
Logical-Link Control
    DSAP: ISO Network Layer (0xfe)
    IG Bit: Individual
    SSAP: ISO Network Layer (0xfe)
    CR Bit: Command
    Control field: U, func = UI (0x03)
        000. 00.. = Unnumbered Information
        .... ..11 = Unnumbered frame
ISO 10589 ISIS InTRA Domain Routeing Information Exchange Protocol
    Intra Domain Routing Protocol Discriminator: ISIS (0x83)
    PDU Header Length  : 33
    Version (==1)      : 1
    System ID Length   : 0
    PDU Type           : L2 CSNP (R:000)
    Version2 (==1)     : 1
    Reserved (==0)     : 0
    Max.AREAs: (0==3)  : 0
    ISO 10589 ISIS Complete Sequence Numbers Protocol Data Unit
        PDU length: 99
        Source id    : 0000.0000.0003-00
        Start LSP id : 0000.0000.0000.00-00
        End   LSP id : ffff.ffff.ffff.ff-ff
        LSP entries (64)
            Remaining life      : 1196
            LSP ID              : 0000.0000.0003.00-00
            LSP Sequence Number : 0x01bc
            LSP checksum        : 0x1420
            Remaining life      : 1196
            LSP ID              : 0000.0000.0003.01-00
            LSP Sequence Number : 0x00d1
            LSP checksum        : 0xbd46
            Remaining life      : 1154
            LSP ID              : 0000.0000.0004.00-00
            LSP Sequence Number : 0x001d
            LSP checksum        : 0xfb3c
            Remaining life      : 1053
            LSP ID              : 0000.0000.0004.02-00
            LSP Sequence Number : 0x0006
            LSP checksum        : 0x29b5

4 Statusabfragen

Die Zebra-VTY-Konsole bietet einige Kommandos um verschiedene Informationen aus der IS-IS-Routing-DB abzufragen. In die Konsole gelangt man mit telnet localhost 2601. Der folgende Zebra-Befehl liefert detaillierte Informationen über die IS-IS-Nachbarn des Linux-Routers:

linux1# show isis neighbors detail 
Area e423:
  R5                  
    Interface: eth1, Level: 1, State: Up, Expires in 7s
    Adjacency flaps: 0, Last: 5m16s ago
    Circuit type: L1L2, Speaks: IPv6
    SNPA: 000d.2928.0000, LAN id: R5.01
    Priority: 64, is DIS, DIS flaps: 1, Last: 4m14s ago
    IPv6 Addresses:
      fe80::20d:29ff:fe28:0

  R5                  
    Interface: eth1, Level: 2, State: Up, Expires in 9s
    Adjacency flaps: 0, Last: 5m16s ago
    Circuit type: L1L2, Speaks: IPv6
    SNPA: 000d.2928.0000, LAN id: R5.01
    Priority: 64, is DIS, DIS flaps: 1, Last: 4m9s ago
    IPv6 Addresses:
      fe80::20d:29ff:fe28:0

Der Cisco-Router mit dem Namen R5 ist doppelt aufgeführt, weil er sowohl Level-1- als auch Level-2-Router ist.

Auch die Topologie-Daten lassen sich abfragen:

linux1# show isis topology 
Area e423:
IS-IS paths to level-1 routers that speak IP
System Id            Metric     Next-Hop             Interface   SNPA
linux1             --
R5                   10         R5                   eth1        000d.2928.0000
IS-IS paths to level-2 routers that speak IP
System Id            Metric     Next-Hop             Interface   SNPA
linux1             --
R5                   10         R5                   eth1        000d.2928.0000

Schliesslich kann auch die komplette Link State Database angezeigt werden:

linux1# show isis database 
Area e423:
  IS-IS Level-1 link-state database:
  LSP ID                        Sequence   Checksum Lifetime Attributes
  R5.00-00                      0x0000020a   0x499c     1196 L2
  R5.01-00                      0x00000121   0x8c9e     1195 L2
  linux1.00-00                * 0x00000021   0xb632      927 L2
  linux1.02-00                * 0x00000007   0x27b6      864 L2

    4 LSPs

  IS-IS Level-2 link-state database:
  LSP ID                        Sequence   Checksum Lifetime Attributes
  R5.00-00                      0x0000020a   0x766f     1198 L2
  R5.01-00                      0x00000121   0x1c97     1198 L2
  linux1.00-00                * 0x00000020   0xb831      892 L2
  linux1.02-00                * 0x00000007   0x27b6      893 L2

    4 LSPs

5 Vergleich RIPng, OSPF und IS-IS

Die drei Interior Gateway Protokolle (IGP) RIPng, OSPF und IS-IS waren schon unter IPv4 verfügbar, mussten jedoch für IPv6 angepasst weren. RIP, das älteste Protokoll, ist sehr einfach aufgebaut. Es muss kaum konfiguriert werden und ist sofort einsatzbereit. Da es jedoch nur für kleinere Autonome Systeme (AS) entworfen wurde, darf dieses nicht mehr als 15 Hops haben. Als Metrik wird Hopcount verwendet. IS-IS ist ein OSI-Routing-Protokoll und ist hierarchisch aufgebaut. Verschiedene Level 1-IS werden über einen Level 2-Backbone verbunden. Metriken kann der Administartor selber vergeben, die maximale Metrik ist 64 pro Pfad.

Auch OSPF ist ein hierarchisch aufgebautes Protokoll. Sein Vorteil liegt darin, dass es grosse, heterogene Netze bedienen kann. Ein AS kann mit OSPF in verschiedene Areas aufgeteilt werden. Durch diese Aufteilung wird der Routingverkehr gering gehalten. Die Standardmetrik berechnet der Router mit 108/Bandbreite in bps. Diese kann noch durch Type of Service (TOS) verändert werden. Ebenfalls hat die Bandbreite der Anschlüsse einen Einfluss auf die Routenwahl.

RIP, IS-IS wie auch OSPF sind offene Standards, d.h. die Spezifikationen sind in RFCs offengelegt und von jedermann einsehbar.

Eigenschaft RIPng OSPF IS-IS
Algorithmus Distance Vektor Link-State Link-State
ISO-Layer 5 4 3
maximale Hops 15 beliebig beliebig
Metrik 1 variabel variabel, max 64/Pfad
Authentifizierung nein möglich möglich
Updateverkehr klein gross gross
Administrationsaufwand keiner klein klein


next up previous contents
Nächste Seite: 7 IPv6 Tunneling Aufwärts: Inhalt Vorherige Seite: 5 IPv6 Routing mit   Inhalt
Beat Graf / Daniel Werner