next up previous contents
Nächste Seite: 8 NAT-PT Aufwärts: Inhalt Vorherige Seite: 6 IPv6 Routing-Protokolle   Inhalt

Unterabschnitte

7 IPv6 Tunneling

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.

1 Aufbau des Netzwerks

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.

Abbildung 7.1: IPv6 Tunneling: Aufbau des Netzwerks
Image images/tunneling.png

2 Konfiguration des Linux-Routers

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.

3 Konfiguration des Cisco 2611XM

Für die Konfiguration des Cisco sind folgende Schritte notwendig:

Die Konfiguration ist in Anhang C.2.5 aufgeführt.

4 Beispiele von getunnelten Paketen

RIPng Response

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

HTTP GET-Request

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


next up previous contents
Nächste Seite: 8 NAT-PT Aufwärts: Inhalt Vorherige Seite: 6 IPv6 Routing-Protokolle   Inhalt
Beat Graf / Daniel Werner