In diesem Teil wird ein manueller IPv6-over-IPv4-Tunnel eingerichtet und
der Netzwerkverkehr analysiert. Als Tunnel-Endpunkte dienen der Cisco 2611XM
sowie der Linux-Router. In der Praxis wird dieses Verfahren verwendet, um
IPv6-Inseln an den 6Bone
anzubinden.
Zunächst wird das Testnetzwerk aufgebaut sowie der Linux-Router und der Cisco 2611XM konfiguriert. Der Tunnel verläuft über das bestehende Netzwerk im KOM-Labor, die Konfiguration der Router in diesem Netz bleibt unverändert. Damit wird ein realistisches Szenario simuliert, da in der Praxis in der Regel das Netz zwischen zwei IPv6-Inseln ebenfalls nicht beeinflusst werden kann.
Das Testnetzwerk für diesen Versuch besteht aus fünf Teilnetzen (Abb. 7.1). Die Netze A und B sind reine IPv6-Netze, die Netze C, D und E sind IPv4-Netze. Zwischen dem Linux-Router und dem Cisco 2611XM wird der IPv6-over-IPv4-Tunnel geschaltet. Der Tunnel verläuft über zwei weitere Cisco-Router, welche nicht IPv6-fähig sind. Zwischen den Linux-Router und den Cisco-Router R4 (ein Cisco 2611) wird der Domino LAN-Analyzer platziert, um den Tunnel-Verkehr analysieren zu können.
Zunächst muss das Tunnel-Interface sit1 mit den richtigen Parametern kreiert und anschliessend eingeschaltet werden:
# ip tunnel add sit1 mode sit ttl 64 remote 10.0.1.2 local 10.0.4.2 # ip link set dev sit1 up
Die restliche Konfiguration wird über Zebra vorgenommen. Zebra übernimmt folgende Aufgaben:
Die dazu nötigen Einstellungen in zebra.conf:
! 1. Ethernet-Interface interface eth0 ipv6 address fec2::1/64 ipv6 nd send-ra ipv6 nd prefix-advertisement fec2::/64 ! 2. Ethernet-Interface interface eth1 ip address 10.0.4.2/24 ! Tunnel-Interface interface sit1 ipv6 address fec0::1/64 ipv6 nd send-ra !log file zebra.log log file /var/log/zebra/zebra.log
Des Weiteren müssen die beiden Routing-Daemons ripd und ripngd aktiviert werden:
zebra=yes bgpd=no ospfd=no ospf6d=no ripd=yes ripngd=yes
Der ripd wird nur auf dem Interface eth1 eingeschaltet. Der Router R4 benutzt RIP Version 1, Zebra muss also auf die selbe Version eingestellt werden:
hostname ripd password geheim ! router rip network eth1 version 1 ! log file /var/log/zebra/ripd.log
RIPng schliesslich wird auf den Interfaces eth0 und sit1 benutzt:
hostname ripngd password geheim ! router ripng network sit1 network eth0 ! log file /var/log/zebra/ripngd.log
Nach einem Neustart von Zebra ist der Tunnel auf der Linux-Seite bereit.
Für die Konfiguration des Cisco sind folgende Schritte notwendig:
R5(config)#interface f0/0 R5(config-if)#ip address 10.0.1.2 255.255.255.0
Dieser Anschluss gehört, wie in Abbildung 7.1 zu sehen ist, zum Subnetz D, daher erhält er die IP-Adresse 10.0.1.2 zugewiesen.
R5(config-if)#no ipv6 enable R5(config-if)#no ipv6 address R5(config-if)#no ipv6 nd ra-interval 10
R5(config-if)#ipv6 enable R5(config-if)#ipv6 address FEC1::/64 eui-64 R5(config-if)#ipv6 nd ra-interval 10
R5(config)#interface tunnel 0
Die Null ist der Bezeichner des Tunnels.
R5(config-if)#tunnel mode ipv6ip
R5(config-if)#tunnel source fastethernet 0/1
R5(config-if)#tunnel destination 10.0.4.2
Somit steht der IPv6-Tunnel.
R5(config-if)#ipv6 address FEC0::2/64
R5(config-if)#ipv6 rip ripng enable
R5(config)#router ospf 1
R5(config-router)#network 10.0.0.0 0.255.255.255 area 0
Die Konfiguration ist in Anhang C.2.5 aufgeführt.
Das RIPng wird zwischen R5 und dem Linux-Router durch den Tunnel übertragen. Gut zu sehen ist, dass die Link-Local-Adresse des virtuellen Tunnel-Interfaces aus der IPv4-Adresse des physischen Interfaces gebildet wird (Zeile 31).
Ethernet II
Destination: 00:01:02:87:17:a5 (BBN_87:17:a5)
Source: 00:03:e3:a0:12:80 (Cisco_a0:12:80)
Type: IP (0x0800)
Trailer: 29AD3471
Internet Protocol, Src Addr: 10.0.1.2 (10.0.1.2), Dst Addr: 10.0.4.2 (10.0.4.2)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0xe0 (DSCP 0x38: Class Selector 7; ECN: 0x00)
1110 00.. = Differentiated Services Codepoint: Class Selector 7 (0x38)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 112
Identification: 0x103a
Flags: 0x00
.0.. = Don't fragment: Not set
..0. = More fragments: Not set
Fragment offset: 0
Time to live: 253
Protocol: IPv6 (0x29)
Header checksum: 0x9347 (correct)
Source: 10.0.1.2 (10.0.1.2)
Destination: 10.0.4.2 (10.0.4.2)
Internet Protocol Version 6
Version: 6
Traffic class: 0xe0
Flowlabel: 0x00000
Payload length: 52
Next header: UDP (0x11)
Hop limit: 255
\textbf{Source address: fe80::a00:102 (fe80::a00:102)}
Destination address: ff02::9 (ff02::9)
User Datagram Protocol, Src Port: 521 (521), Dst Port: 521 (521)
Source port: 521 (521)
Destination port: 521 (521)
Length: 52
Checksum: 0x735f (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
Als Beispiel eines getunnelten TCP-Paketes folgt hier ein HTTP-GET-Request. Gut zu sehen ist, dass die TTL des IPv4-Paketes auf 64 gesetzt wird (Zeile 19), unabhängig vom Hop-Count des IPv6-Paketes, der vom Router bereits um eins erniedrigt wurde (Zeile 30).
Ethernet II
Destination: 00:03:e3:a0:12:80 (Cisco_a0:12:80)
Source: 00:01:02:87:17:a5 (BBN_87:17:a5)
Type: IP (0x0800)
Trailer: 63A81A0D
Internet Protocol, Src Addr: 10.0.4.2 (10.0.4.2), Dst Addr: 10.0.1.2 (10.0.1.2)
Version: 4
Header length: 20 bytes
Differentiated Services Field: 0x00 (DSCP 0x00: Default; ECN: 0x00)
0000 00.. = Differentiated Services Codepoint: Default (0x00)
.... ..0. = ECN-Capable Transport (ECT): 0
.... ...0 = ECN-CE: 0
Total Length: 108
Identification: 0x0000
Flags: 0x04
.1.. = Don't fragment: Set
..0. = More fragments: Not set
Fragment offset: 0
|textbf{Time to live: 64}
Protocol: IPv6 (0x29)
Header checksum: 0x2166 (correct)
Source: 10.0.4.2 (10.0.4.2)
Destination: 10.0.1.2 (10.0.1.2)
Internet Protocol Version 6
Version: 6
Traffic class: 0x00
Flowlabel: 0x00000
Payload length: 48
Next header: TCP (0x06)
|texttt{Hop limit: 63}
Source address: fec2::203:93ff:fe4e:5c8c (fec2::203:93ff:fe4e:5c8c)
Destination address: fec1::201:2ff:fe87:179c (fec1::201:2ff:fe87:179c)
Transmission Control Protocol, Src Port: 50793 (50793), Dst Port: www (80), Seq: 4150492988, Ack: 1974094230, Len: 16
Source port: 50793 (50793)
Destination port: www (80)
Sequence number: 4150492988
Next sequence number: 4150493004
Acknowledgement number: 1974094230
Header length: 32 bytes
Flags: 0x0018 (PSH, ACK)
0... .... = Congestion Window Reduced (CWR): Not set
.0.. .... = ECN-Echo: Not set
..0. .... = Urgent: Not set
...1 .... = Acknowledgment: Set
.... 1... = Push: Set
.... .0.. = Reset: Not set
.... ..0. = Syn: Not set
.... ...0 = Fin: Not set
Window size: 32844
Checksum: 0x6094 (correct)
Options: (12 bytes)
NOP
NOP
Time stamp: tsval 13806298, tsecr 19403064
Hypertext Transfer Protocol
GET / HTTP/1.1\r\n