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