next up previous contents
Nächste Seite: 10 Access Control Lists Aufwärts: Inhalt Vorherige Seite: 8 NAT-PT   Inhalt

Unterabschnitte

9 Transport Relay Translator

TRT kann unter Linux mit Hilfe des TRT-Servers pTRTd (Portable Transport Relay Translator Daemon) sowie des DNS-Proxy totd (Trick or Treat Daemon), welcher als DNS-ALG agiert, realisiert werden. Als Grundlage für die Konfiguration dient das TRT-Howto (19).

1 Aufbau des Netzwerks

Es wird ein ähnliches Netzwerk wie für den NAT-PT-Versuch aufgebaut, allerdings wird der Linux PC 1 als Router eingesetzt und der Windows 2003 PC dient als DNS-Server (Abb. 9.1). Auf dem Linux-Router laufen ausserdem der TRT-Server als auch der DNS-ALG.

Abbildung 9.1: Transport Relay Translator: Aufbau des Netzwerks
Image images/network-trt.png

Der DNS-ALG muss nicht zwingend auf der gleichen Maschine wie der TRT-Server laufen, er könnte auch auf einem IPv6-Only-Host im Subnetz B beheimatet sein. In diesem Fall müsste allerdings auch ein per IPv6 erreichbarer DNS-Server vorhanden sein, welcher auch Anfragen nach (IPv4-) A-Records beantwortet.

Im in Abbildung 9.1 gezeigten Setup stellt der DNS-ALG die umgesetzten DNS-Anfragen über IPv4 an den Windows 2003 DNS-Server.

2 Konfiguration des Linux Routers

1 Installation des totd

Für den totd ist kein Debian-Paket verfügbar, dieser muss daher aus dem Quellpaket installiert werden. Dazu sind folgende Schritte vorzunehmen:

2 Installation des pTRTd

Auch der pTRTd muss aus dem Quellpaket installiert werden, da kein fertiges Debian-Paket für Debian 3.0 existiert:


3 Installation des tun-Moduls

Als erstes muss die Kernel-Konfiguration angepasst werden:

# cd /usr/src/usagi/kernel/linux24
# make menuconfig

Im Abschnitt Network device support muss der Universal TUN/TAP device driver support als Modul ausgewählt werden (vgl. Abb. 9.2). Anschliessend können die Module mit make modules && make modules_install kompiliert und installiert werden.

Abbildung 9.2: Kernelkonfiguration: TUN/TAP device driver als Modul
Image images/tuntap-config.png

Schliesslich muss unter Umständen noch das tun-Device-File kreiert und mit den korrekten Berechtigungen versehen werden:

# mkdir /dev/net
# mknod /dev/net/tun c 10 200
# chmod 0700 /dev/net/tun

In der Datei /etc/modules.conf muss eine Zeile alias char-major-10-200 tun vorhanden sein, damit das Modul bei Bedarf automatisch geladen wird.


4 Zebra Konfiguration

In diesem Versuch übernimmt Zebra das Routing-Advertisement im IPv6-Netz und setzt beim Start die IP-Adressen und die Routing-Einträge. In /etc/zebra/daemons sollte nur der zebrad gestartet werden, alle anderen Einträge werden auf no geändert. Die zebra.conf sieht wie folgt aus:

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

interface eth1
  ip address 10.0.1.3/24

3 Konfiguration des Linux PC 2

Auf dem zweiten Linux-PC muss der Linux-Router als DNS eingetragen werden:

nameserver fec0::1

Die IPv6-Adresse und die Routing-Information erhält er per Autokonfiguration.

4 Konfiguration des DNS-Servers (Windows 2003)

Der DNS-Server muss den Namen des Webservers www.ipv6.local sowohl vorwärts (Abb. 9.3) als auch rückwärts (Abb. 9.4) auflösen. Diese Konfiguration erfolgt über die Management Konsole (mmc).

Abbildung 9.3: Management Konsole: Forward-Zone ipv6.local
Image images/trt-dns-forward.png

Abbildung 9.4: Management Konsole: Reverse-Zone 1.0.10.in-addr.arpa
Image images/trt-dns-reverse.png

5 Inbetriebnahme

Auf dem Linux-Router müssen zebra, totd und pTRTd gestartet werden:

# /etc/init.d/zebra start
# /usr/local/sbin/totd -c /etc/totd.conf -d2
# /usr/local/sbin/ptrtd -p fec1:: -l 96

Der pTRTd nimmt beim Start automatisch das tap0-Device in Betrieb, welches eine virtuelle Ethernet-Schnittstelle darstellt:

# ip addr show dev tap0
14: \textbf{tap0}: <BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast qlen 100
    link/ether 00:ff:19:d9:7c:7a brd ff:ff:ff:ff:ff:ff
    inet6 fe80::1/64 scope link 
    inet6 fe80::2ff:19ff:fed9:7c7a/64 scope link

Das Routing passt er ebenfalls an, so dass nun das Netz fec1::/96 über das tap0-Interface geroutet wird:

# ip -6 route show
fe80::/64 dev eth1  proto kernel  metric 256  mtu 1500 advmss 1440
fe80::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
fe80::/64 dev tap0  proto kernel  metric 256  mtu 1500 advmss 1440
fec0::/64 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
\textbf{fec1::/96 via fe80::5 dev tap0  metric 1024  mtu 1500 advmss 1440}
ff00::/8 dev eth1  proto kernel  metric 256  mtu 1500 advmss 1440
ff00::/8 dev eth0  proto kernel  metric 256  mtu 1500 advmss 1440
ff00::/8 dev tap0  proto kernel  metric 256  mtu 1500 advmss 1440

Die Gateway-Adresse fe80::5 ist die Adresse des pTRTd am anderen Ende des virtuellen Interfaces und ist wie ein normaler Nachbar sichtbar:

# ip -6 neigh show dev tap0
\textbf{fe80::5} dev tap0 lladdr 02:00:12:34:56:78 nud reachable

Auf dem Windows 2003 PC muss der DNS aktiv sein und auf dem iBook der Webserver gestartet sein. Danach wird vom Linux PC 2 aus eine HTTP-Session zum Webserver www.ipv6.local aufgebaut.

6 Ablauf des Verbindungsaufbaus

Der Ablauf ist ähnlich wie bei NAT-PT (Abb. 9.5). Der Linux-Client sendet eine DNS-Anfrage nach einem AAAA-Record an den DNS-ALG. Der totd nimmt diese Anfrage entgegen und reicht sie an den IPv4-DNS weiter. Den A-Record, den er zurückerhält, ersetzt er durch einen AAAA-Record, der die IPv4-Adresse mit dem vorgegebenen TRT-Präfix fec1::/96 vorangestellt enthält, in diesem Fall also fec1::a00:11f.

Der TRT-Server kommt erst ins Spiel, wenn die TCP-Verbindung aufgebaut wird. Der Client macht einen Verbindungsaufbau zu fec1::10.0.1.31. Der TRT-Server nimmt diese Verbindung entgegen und baut seinerseits über IPv4 eine Verbindung zu 10.0.1.31 auf. Dass es sich tatsächlich um zwei verschiedene TCP-Verbindungen handelt, ist an den unterschiedlichen Sequenznummern und den verschiedenen TCP-Source-Ports zu erkennen.

Abbildung: TCP-Verbindungsaufbau über den TRT-Server/DNS-ALG
Image images/trt-init.png

DNS-Lookup AAAA www.ipv6.local

1 DNS-Query
fec0::201:2ff:fe87:179c \(\rightarrow\) fec0::1
Domain Name System (query)
    Transaction ID: 0x07f9
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.ipv6.local: type AAAA, class inet
            Name: www.ipv6.local
            Type: IPv6 address
            Class: inet

2 DNS-Query
10.0.1.3 \(\rightarrow\) 10.0.1.30
Domain Name System (query)
    Transaction ID: 0xb23c
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.ipv6.local: type AAAA, class inet
            Name: www.ipv6.local
            Type: IPv6 address
            Class: inet

3 DNS-Response
10.0.1.30 \(\rightarrow\) 10.0.1.3
Domain Name System (response)
    Transaction ID: 0xb23c
    Flags: 0x8580 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... ..0. .... = Answer auth.: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 0
    Authority RRs: 1
    Additional RRs: 0
    Queries
        www.ipv6.local: type AAAA, class inet
            Name: www.ipv6.local
            Type: IPv6 address
            Class: inet
    Authoritative nameservers
        ipv6.local: type SOA, class inet, mname ipv6-4
            Name: ipv6.local
            Type: Start of zone of authority
            Class: inet
            Time to live: 1 hour
            Data length: 40
            Primary name server: ipv6-4
            Responsible authority's mailbox: hostmaster
            Serial number: 2
            Refresh interval: 15 minutes
            Retry interval: 10 minutes
            Expiration limit: 1 day
            Minimum TTL: 1 hour

4 DNS-Query
10.0.1.3 \(\rightarrow\) 10.0.1.30
Domain Name System (query)
    Transaction ID: 0xb33c
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.ipv6.local: type A, class inet
            Name: www.ipv6.local
            Type: Host address
            Class: inet

5 DNS-Response
10.0.1.30 \(\rightarrow\) 10.0.1.3
Domain Name System (response)
    Transaction ID: 0xb33c
    Flags: 0x8580 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... ..0. .... = Answer auth.: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 1
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.ipv6.local: type A, class inet
            Name: www.ipv6.local
            Type: Host address
            Class: inet
    Answers
        www.ipv6.local: type A, class inet, addr 10.0.1.31
            Name: www.ipv6.local
            Type: Host address
            Class: inet
            Time to live: 1 hour
            Data length: 4
            Addr: 10.0.1.31

6 DNS-Response
fec0::1 \(\rightarrow\) fec0::201:2ff:fe87:179c
Domain Name System (response)
    Transaction ID: 0x07f9
    Flags: 0x8580 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... ..0. .... = Answer auth.: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 1
    Authority RRs: 0
    Additional RRs: 0
    Queries
        www.ipv6.local: type AAAA, class inet
            Name: www.ipv6.local
            Type: IPv6 address
            Class: inet
    Answers
        www.ipv6.local: type AAAA, class inet, addr fec1::a00:11f
            Name: www.ipv6.local
            Type: IPv6 address
            Class: inet
            Time to live: 1 hour
            Data length: 16
            Addr: fec1::a00:11f

DNS-Lookup PTR fec1::a00:11f

1 DNS-Query
fec0::201:2ff:fe87:179c \(\rightarrow\) fec0::1
Domain Name System (query)
    Transaction ID: 0x07fb
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int: type PTR, class inet
            Name: f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int
            Type: Domain name pointer
            Class: inet

2 DNS-Query
10.0.1.3 \(\rightarrow\) 10.0.1.30
Domain Name System (query)
    Transaction ID: 0xb53c
    Flags: 0x0100 (Standard query)
        0... .... .... .... = Response: Message is a query
        .000 0... .... .... = Opcode: Standard query (0)
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... ...0 .... = Non-authenticated data OK: Non-authenticated data is unacceptable
    Questions: 1
    Answer RRs: 0
    Authority RRs: 0
    Additional RRs: 0
    Queries
        31.1.0.10.in-addr.arpa: type PTR, class inet
            Name: 31.1.0.10.in-addr.arpa
            Type: Domain name pointer
            Class: inet

3 DNS-Response
10.0.1.30 \(\rightarrow\) 10.0.1.3
Domain Name System (response)
    Transaction ID: 0xb53c
    Flags: 0x8580 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... ..0. .... = Answer auth.: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 1
    Authority RRs: 0
    Additional RRs: 0
    Queries
        31.1.0.10.in-addr.arpa: type PTR, class inet
            Name: 31.1.0.10.in-addr.arpa
            Type: Domain name pointer
            Class: inet
    Answers
        31.1.0.10.in-addr.arpa: type PTR, class inet, ptr www.ipv6.local
            Name: 31.1.0.10.in-addr.arpa
            Type: Domain name pointer
            Class: inet
            Time to live: 1 hour
            Data length: 16
            Domain name: www.ipv6.local

4 DNS-Response
fec0::1 \(\rightarrow\) fec0::201:2ff:fe87:179c
Domain Name System (response)
    Transaction ID: 0x07fb
    Flags: 0x8580 (Standard query response, No error)
        1... .... .... .... = Response: Message is a response
        .000 0... .... .... = Opcode: Standard query (0)
        .... .1.. .... .... = Authoritative: Server is an authority for domain
        .... ..0. .... .... = Truncated: Message is not truncated
        .... ...1 .... .... = Recursion desired: Do query recursively
        .... .... 1... .... = Recursion available: Server can do recursive queries
        .... .... ..0. .... = Answer auth.: Answer/authority portion was not authenticated by the server
        .... .... .... 0000 = Reply code: No error (0)
    Questions: 1
    Answer RRs: 1
    Authority RRs: 0
    Additional RRs: 0
    Queries
        f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int: type PTR, class inet
            Name: f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int
            Type: Domain name pointer
            Class: inet
    Answers
        f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int: type PTR, class inet, 
                                                                                     ptr www.ipv6.local
            Name: f.1.1.0.0.0.a.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.1.c.e.f.ip6.int
            Type: Domain name pointer
            Class: inet
            Time to live: 1 hour
            Data length: 16
            Domain name: www.ipv6.local

TCP-Connection

Anhand der verschiedenen Sequenznummern und der unterschiedlichen Source-Ports ist gut zu erkennen, dass es sich hier um zwei eigenständige TCP-Verbindungen handelt, eine im IPv4- und eine im IPv6-Netz.

1 TCP [SYN]
[fec0::201:2ff:fe87:179c]:52686 \(\rightarrow\) [fec1::a00:11f]:80
Transmission Control Protocol, Src Port: 52686 (52686), Dst Port: www (80), Seq: 2354797643, Ack: 0, Len: 0
    \textbf{Source port: 52686 (52686)}
    Destination port: www (80)
    \textbf{Sequence number: 2354797643}
    Header length: 40 bytes
    Flags: 0x0002 (SYN)
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set
        ...0 .... = Acknowledgment: Not set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..1. = Syn: Set
        .... ...0 = Fin: Not set
    Window size: 5760
    Checksum: 0x61e9 (correct)
    Options: (20 bytes)
        Maximum segment size: 1440 bytes
        SACK permitted
        Time stamp: tsval 69202183, tsecr 0
        NOP
        Window scale: 0 bytes

2 TCP [SYN]
10.0.1.3:33693 \(\rightarrow\) 10.0.1.31:80
Transmission Control Protocol, Src Port: 33693 (33693), Dst Port: www (80), Seq: 1415605631, Ack: 0, Len: 0
    \textbf{Source port: 33693 (33693)}
    Destination port: www (80)
    \textbf{Sequence number: 1415605631}
    Header length: 40 bytes 
    Flags: 0x0002 (SYN)
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set
        ...0 .... = Acknowledgment: Not set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..1. = Syn: Set
        .... ...0 = Fin: Not set
    Window size: 5840
    Checksum: 0x1e29 (correct)
    Options: (20 bytes)
        Maximum segment size: 1460 bytes
        SACK permitted
        Time stamp: tsval 8763034, tsecr 0
        NOP
        Window scale: 0 bytes

3 TCP [SYN, ACK]
10.0.1.31:80 \(\rightarrow\) 10.0.1.3:33693
Transmission Control Protocol, Src Port: www (80), Dst Port: 33693 (33693), Seq: 3192154803, Ack: 1415605632, Len: 0
    Source port: www (80)
    Destination port: 33693 (33693)
    \textbf{Sequence number: 3192154803}
    \textbf{Acknowledgement number: 1415605632}
    Header length: 40 bytes
    Flags: 0x0012 (SYN, ACK)
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set
        ...1 .... = Acknowledgment: Set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..1. = Syn: Set
        .... ...0 = Fin: Not set
    Window size: 33304
    Checksum: 0xeb05 (correct)
    Options: (20 bytes)
        Maximum segment size: 1460 bytes
        NOP
        Window scale: 0 bytes
        NOP
        NOP
        Time stamp: tsval 3160991081, tsecr 8763034

4 TCP [SYN, ACK]
[fec1::a00:11f]:80 \(\rightarrow\) [fec0::201:2ff:fe87:179c]:52686
Transmission Control Protocol, Src Port: www (80), Dst Port: 52686 (52686), Seq: 65536, Ack: 2354797644, Len: 0
    Source port: www (80)
    \textbf{Destination port: 52686 (52686)}
    \textbf{Sequence number: 65536}
    Acknowledgement number: 2354797644
    Header length: 24 bytes
    Flags: 0x0012 (SYN, ACK)
        0... .... = Congestion Window Reduced (CWR): Not set
        .0.. .... = ECN-Echo: Not set
        ..0. .... = Urgent: Not set 
        ...1 .... = Acknowledgment: Set
        .... 0... = Push: Not set
        .... .0.. = Reset: Not set
        .... ..1. = Syn: Set 
        .... ...0 = Fin: Not set
    Window size: 65535
    Checksum: 0xbe7d (correct)
    Options: (4 bytes)
        Maximum segment size: 1216 bytes


next up previous contents
Nächste Seite: 10 Access Control Lists Aufwärts: Inhalt Vorherige Seite: 8 NAT-PT   Inhalt
Beat Graf / Daniel Werner