<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="de">
	<id>https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=IPv6_DNS64</id>
	<title>IPv6 DNS64 - Versionsgeschichte</title>
	<link rel="self" type="application/atom+xml" href="https://www.xinux.net/index.php?action=history&amp;feed=atom&amp;title=IPv6_DNS64"/>
	<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=IPv6_DNS64&amp;action=history"/>
	<updated>2026-10-15T18:17:59Z</updated>
	<subtitle>Versionsgeschichte dieser Seite in Xinux Wiki</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://www.xinux.net/index.php?title=IPv6_DNS64&amp;diff=73587&amp;oldid=prev</id>
		<title>Thomas.will: Die Seite wurde neu angelegt: „=DNS64=  =Worum geht es?= Stell dir ein Netz vor, in dem die Clients '''nur noch IPv6''' haben. Kein IPv4 mehr, keine privaten 192.168er-Adressen, nichts.  Das…“</title>
		<link rel="alternate" type="text/html" href="https://www.xinux.net/index.php?title=IPv6_DNS64&amp;diff=73587&amp;oldid=prev"/>
		<updated>2026-10-07T07:58:00Z</updated>

		<summary type="html">&lt;p&gt;Die Seite wurde neu angelegt: „=DNS64=  =Worum geht es?= Stell dir ein Netz vor, in dem die Clients &amp;#039;&amp;#039;&amp;#039;nur noch IPv6&amp;#039;&amp;#039;&amp;#039; haben. Kein IPv4 mehr, keine privaten 192.168er-Adressen, nichts.  Das…“&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Neue Seite&lt;/b&gt;&lt;/p&gt;&lt;div&gt;=DNS64=&lt;br /&gt;
&lt;br /&gt;
=Worum geht es?=&lt;br /&gt;
Stell dir ein Netz vor, in dem die Clients '''nur noch IPv6''' haben. Kein IPv4 mehr, keine privaten 192.168er-Adressen, nichts.&lt;br /&gt;
&lt;br /&gt;
Das funktioniert wunderbar, solange das Ziel ebenfalls IPv6 kann. Ein großer Teil des Internets ist aber immer noch '''nur über IPv4''' erreichbar. Ein reiner IPv6-Client kann mit einer IPv4-Adresse nichts anfangen: Er hat gar keinen IPv4-Stack, über den er das Paket schicken könnte.&lt;br /&gt;
&lt;br /&gt;
Genau dieses Problem lösen '''DNS64''' und '''NAT64''' gemeinsam:&lt;br /&gt;
*DNS64 sorgt dafür, dass der Client für ein reines IPv4-Ziel trotzdem eine '''IPv6-Adresse''' bekommt.&lt;br /&gt;
*NAT64 sorgt dafür, dass Pakete an diese IPv6-Adresse '''tatsächlich beim IPv4-Ziel ankommen'''.&lt;br /&gt;
&lt;br /&gt;
Keiner der beiden ist alleine sinnvoll. DNS64 ohne NAT64 liefert Adressen, die ins Leere führen. NAT64 ohne DNS64 hat keine Clients, die es benutzen.&lt;br /&gt;
&lt;br /&gt;
=Die Grundidee in einem Satz=&lt;br /&gt;
Der DNS-Server '''versteckt die IPv4-Adresse in einer IPv6-Adresse''', und das NAT64-Gateway '''holt sie wieder heraus'''.&lt;br /&gt;
&lt;br /&gt;
=Das Präfix 64:ff9b::/96=&lt;br /&gt;
Eine IPv6-Adresse hat 128 Bit, eine IPv4-Adresse 32 Bit. Es bleiben also 96 Bit übrig. Diese 96 Bit werden mit einem festen Präfix gefüllt, die IPv4-Adresse kommt in die letzten 32 Bit.&lt;br /&gt;
&lt;br /&gt;
Für diesen Zweck ist ein Präfix offiziell reserviert, das sogenannte '''Well-Known Prefix''' (RFC 6052):&lt;br /&gt;
*64:ff9b::/96&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
|&amp;lt;-------------- 96 Bit Präfix -------------&amp;gt;|&amp;lt;-- 32 Bit IPv4 --&amp;gt;|&lt;br /&gt;
  64:ff9b:0000:0000:0000:0000                     c000:020a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Man kann auch ein eigenes Präfix verwenden. Wichtig ist nur, dass DNS64 und NAT64 '''dasselbe Präfix''' kennen.&lt;br /&gt;
&lt;br /&gt;
=Umrechnung einer IPv4-Adresse=&lt;br /&gt;
Beispiel: 192.0.2.10&lt;br /&gt;
&lt;br /&gt;
Jedes Oktett wird in Hex umgerechnet:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
192 -&amp;gt; c0&lt;br /&gt;
  0 -&amp;gt; 00&lt;br /&gt;
  2 -&amp;gt; 02&lt;br /&gt;
 10 -&amp;gt; 0a&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Zusammengesetzt ergibt das c000:020a, verkürzt c000:20a. Die vollständige IPv6-Adresse lautet:&lt;br /&gt;
*64:ff9b::c000:20a&lt;br /&gt;
&lt;br /&gt;
IPv6 erlaubt für genau solche Fälle auch eine gemischte Schreibweise. Diese Adresse ist identisch mit der oben:&lt;br /&gt;
*64:ff9b::192.0.2.10&lt;br /&gt;
&lt;br /&gt;
=Der Ablauf Schritt für Schritt=&lt;br /&gt;
Ausgangslage:&lt;br /&gt;
*Der Client hat nur IPv6.&lt;br /&gt;
*Der Client benutzt einen DNS64-fähigen Resolver.&lt;br /&gt;
*Der Webserver ipv4only.example hat nur einen A-Record: 192.0.2.10&lt;br /&gt;
*Im Netz steht ein NAT64-Gateway mit einer öffentlichen IPv4-Adresse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
 +--------+        +--------+        +-------------+        +-----------+&lt;br /&gt;
 | Client |        | DNS64  |        | NAT64       |        | Webserver |&lt;br /&gt;
 | (v6)   |        | Server |        | Gateway     |        | (nur v4)  |&lt;br /&gt;
 +--------+        +--------+        +-------------+        +-----------+&lt;br /&gt;
     |                  |                   |                      |&lt;br /&gt;
     |-- AAAA? --------&amp;gt;|                   |                      |&lt;br /&gt;
     |                  |-- AAAA? ins Internet: keine Antwort      |&lt;br /&gt;
     |                  |-- A?    ins Internet: 192.0.2.10         |&lt;br /&gt;
     |&amp;lt;- AAAA ----------|                   |                      |&lt;br /&gt;
     |   64:ff9b::c000:20a                  |                      |&lt;br /&gt;
     |                                      |                      |&lt;br /&gt;
     |-- IPv6-Paket an 64:ff9b::c000:20a --&amp;gt;|                      |&lt;br /&gt;
     |                                      |-- IPv4-Paket -------&amp;gt;|&lt;br /&gt;
     |                                      |   an 192.0.2.10      |&lt;br /&gt;
     |                                      |&amp;lt;-- Antwort ----------|&lt;br /&gt;
     |&amp;lt;-- Antwort als IPv6 -----------------|                      |&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==1. Der Client fragt nach einer IPv6-Adresse==&lt;br /&gt;
Der Client will ipv4only.example erreichen. Da er nur IPv6 kann, fragt er seinen Resolver nach dem AAAA-Record.&lt;br /&gt;
&lt;br /&gt;
==2. Der DNS64-Server findet keinen AAAA-Record==&lt;br /&gt;
Der DNS64-Server fragt ganz normal im Internet nach. Ergebnis: Es gibt keinen AAAA-Record, der Server hat kein IPv6.&lt;br /&gt;
&lt;br /&gt;
==3. Der DNS64-Server holt sich den A-Record==&lt;br /&gt;
Jetzt kommt der Trick: Statt dem Client einfach &amp;quot;gibt es nicht&amp;quot; zu antworten, fragt der DNS64-Server zusätzlich nach dem A-Record und bekommt 192.0.2.10.&lt;br /&gt;
&lt;br /&gt;
==4. Der DNS64-Server baut einen künstlichen AAAA-Record==&lt;br /&gt;
Er setzt die IPv4-Adresse hinter das Präfix und schickt dem Client:&lt;br /&gt;
*ipv4only.example AAAA 64:ff9b::c000:20a&lt;br /&gt;
&lt;br /&gt;
Der Client weiß nicht, dass diese Adresse &amp;quot;erfunden&amp;quot; ist. Für ihn ist das eine ganz normale IPv6-Adresse.&lt;br /&gt;
&lt;br /&gt;
==5. Der Client schickt sein Paket los==&lt;br /&gt;
Der Client schickt ein ganz normales IPv6-Paket an 64:ff9b::c000:20a. Im Netz gibt es eine Route, die dieses Präfix zum NAT64-Gateway führt.&lt;br /&gt;
&lt;br /&gt;
==6. Das NAT64-Gateway übersetzt nach IPv4==&lt;br /&gt;
Das Gateway sieht das Präfix 64:ff9b::/96 und weiß: Die letzten 32 Bit sind eine IPv4-Adresse. Es baut ein neues IPv4-Paket:&lt;br /&gt;
*Ziel: 192.0.2.10&lt;br /&gt;
*Quelle: die eigene öffentliche IPv4-Adresse des Gateways&lt;br /&gt;
Es merkt sich in einer Tabelle, welcher IPv6-Client zu dieser Verbindung gehört. Das ist dasselbe Prinzip wie beim bekannten NAT mit IPv4.&lt;br /&gt;
&lt;br /&gt;
==7. Die Antwort kommt zurück==&lt;br /&gt;
Der Webserver antwortet an die IPv4-Adresse des Gateways. Das Gateway schaut in seiner Tabelle nach, übersetzt das Paket zurück nach IPv6 und schickt es an den Client. Als Absender steht dort wieder 64:ff9b::c000:20a.&lt;br /&gt;
&lt;br /&gt;
=Was passiert, wenn das Ziel IPv6 kann?=&lt;br /&gt;
Dann passiert '''gar nichts Besonderes'''. Findet der DNS64-Server einen echten AAAA-Record, gibt er nur diesen weiter und erfindet nichts. Der Client spricht direkt per IPv6 mit dem Ziel, das NAT64-Gateway wird nicht benutzt.&lt;br /&gt;
&lt;br /&gt;
DNS64 greift also nur dann ein, wenn es wirklich nötig ist.&lt;br /&gt;
&lt;br /&gt;
=Wer macht was?=&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Baustein !! Aufgabe !! Fasst Datenpakete an?&lt;br /&gt;
|-&lt;br /&gt;
| DNS64 || Erzeugt künstliche AAAA-Records aus A-Records || Nein, nur DNS&lt;br /&gt;
|-&lt;br /&gt;
| NAT64 || Übersetzt IPv6-Pakete in IPv4-Pakete und zurück || Ja&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Typische Software:&lt;br /&gt;
*DNS64: BIND9, Unbound, PowerDNS Recursor&lt;br /&gt;
*NAT64: Jool oder Tayga unter Linux, pf unter FreeBSD/OPNsense, viele Router und Firewalls&lt;br /&gt;
&lt;br /&gt;
=Konfiguration=&lt;br /&gt;
==BIND9==&lt;br /&gt;
;In /etc/bind/named.conf.options innerhalb von options&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
options {&lt;br /&gt;
    dns64 64:ff9b::/96 {&lt;br /&gt;
        clients { any; };&lt;br /&gt;
    };&lt;br /&gt;
};&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
;Konfiguration prüfen und neu laden&lt;br /&gt;
*named-checkconf&lt;br /&gt;
*systemctl reload named&lt;br /&gt;
&lt;br /&gt;
==Unbound==&lt;br /&gt;
;In /etc/unbound/unbound.conf im Abschnitt server&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
server:&lt;br /&gt;
    module-config: &amp;quot;dns64 validator iterator&amp;quot;&lt;br /&gt;
    dns64-prefix: 64:ff9b::/96&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
;Konfiguration prüfen und neu starten&lt;br /&gt;
*unbound-checkconf&lt;br /&gt;
*systemctl restart unbound&lt;br /&gt;
&lt;br /&gt;
=Testen=&lt;br /&gt;
==Funktioniert DNS64?==&lt;br /&gt;
Für Tests gibt es den speziellen Namen ipv4only.arpa. Er hat absichtlich nur A-Records (192.0.0.170 und 192.0.0.171).&lt;br /&gt;
;Ohne DNS64: keine AAAA-Antwort&lt;br /&gt;
;Mit DNS64: eine künstliche Adresse mit dem Präfix&lt;br /&gt;
*dig AAAA ipv4only.arpa @2001:db8:1::53&lt;br /&gt;
;Erwartete Antwort&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
ipv4only.arpa.   IN  AAAA  64:ff9b::c000:aa&lt;br /&gt;
ipv4only.arpa.   IN  AAAA  64:ff9b::c000:ab&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
c000:aa ist 192.0.0.170, c000:ab ist 192.0.0.171.&lt;br /&gt;
&lt;br /&gt;
Clients können über diese Abfrage auch selbst herausfinden, welches Präfix im Netz verwendet wird (RFC 7050).&lt;br /&gt;
&lt;br /&gt;
==Funktioniert NAT64?==&lt;br /&gt;
;Ein bekanntes IPv4-Ziel über das Präfix anpingen (hier 1.1.1.1)&lt;br /&gt;
*ping -6 64:ff9b::1.1.1.1&lt;br /&gt;
;Ein Name, der nur IPv4 hat&lt;br /&gt;
*curl -6 -I http://ipv4.google.com&lt;br /&gt;
&lt;br /&gt;
=Grenzen und Stolperfallen=&lt;br /&gt;
==IPv4-Adressen direkt im Programm==&lt;br /&gt;
DNS64 funktioniert nur, wenn ein '''Name''' aufgelöst wird. Ein Programm, das direkt 192.0.2.10 anspricht, stellt keine DNS-Anfrage, und der reine IPv6-Client kann die Adresse nicht benutzen.&lt;br /&gt;
&lt;br /&gt;
Lösung: '''464XLAT'''. Dabei läuft auf dem Client ein kleiner Übersetzer (CLAT), der dem Betriebssystem eine IPv4-Adresse vortäuscht und die Pakete selbst nach IPv6 übersetzt. So machen es Mobilfunknetze, Android und neuere Windows-, macOS- und iOS-Versionen.&lt;br /&gt;
&lt;br /&gt;
==DNSSEC==&lt;br /&gt;
Ein künstlicher AAAA-Record hat keine gültige DNSSEC-Signatur. Validiert der Client selbst, verwirft er die Antwort. Validiert der DNS64-Resolver, funktioniert es, weil er vor der Synthese prüft.&lt;br /&gt;
&lt;br /&gt;
==Fremde DNS-Server==&lt;br /&gt;
DNS64 funktioniert nur, wenn der Client den DNS64-Resolver tatsächlich benutzt. Ein fest eingetragener öffentlicher DNS-Server oder DNS-over-HTTPS im Browser umgeht ihn. Der Client bekommt dann keine künstlichen Adressen und erreicht IPv4-Ziele nicht mehr.&lt;br /&gt;
&lt;br /&gt;
==Private IPv4-Ziele==&lt;br /&gt;
Das Well-Known Prefix 64:ff9b::/96 ist nur für öffentliche IPv4-Adressen gedacht. Sollen interne Server mit Adressen wie 10.0.0.0/8 oder 192.168.0.0/16 erreichbar sein, braucht man ein eigenes Präfix aus dem eigenen Adressbereich.&lt;br /&gt;
&lt;br /&gt;
=Zusammenfassung=&lt;br /&gt;
*DNS64 erfindet für reine IPv4-Ziele eine IPv6-Adresse, indem es die IPv4-Adresse hinter ein Präfix hängt.&lt;br /&gt;
*NAT64 erkennt dieses Präfix, holt die IPv4-Adresse heraus und übersetzt das Paket.&lt;br /&gt;
*Hat das Ziel einen echten AAAA-Record, wird DNS64 nicht aktiv.&lt;br /&gt;
*Beide Bausteine müssen dasselbe Präfix verwenden, meistens 64:ff9b::/96.&lt;br /&gt;
*Für Programme, die IPv4-Adressen direkt benutzen, braucht man zusätzlich 464XLAT.&lt;/div&gt;</summary>
		<author><name>Thomas.will</name></author>
	</entry>
</feed>