Pseudo top level domain DNSSEC: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
=DNSSEC für Pseudo Top Level Domain (.int)=
+
=Schaubild=
 +
==Forward Zonen==
 +
{{#drawio:top-level-1}}
 +
==Reverse Zonen==
 +
{{#drawio:rev-top-level-1}}
  
=Ziel=
+
=Script=
*Der Server 192.168.6.88 ist der gefakte Root für .int
+
*[[Einrichtungs Script PSEUDO Top level]]
*Die Zone int wird kryptografisch signiert
+
*[[Media:Pseudeo-dns.sh]]
*Der Server validiert nicht – er liefert nur signierte Daten
 
*Die Validierung erfolgt später auf einem Resolver mit Trust-Anker
 
  
=Voraussetzungen=
+
=Die Idee=
*BIND9 läuft
+
*Wir faken einen Top Level Domain Nameserver.
*bind9-utils ist installiert
+
*Dieser hat zur Aufgabe zu wissen wer die Second Level Domains verwaltet.
*Zone int funktioniert ohne DNSSEC
+
*Wir delegieren diese Domains an die Teilnehmer.
 +
*Durch das Einstellen des gefakten Top Level Domain Servers als Forwarder wird jeder Anfragende an den richtigen Nameserver geleitet.
 +
*Die Zone .int wird zusätzlich mit DNSSEC signiert.
 +
*Der Trust-Anker wird später auf validierenden Resolvern gesetzt.
  
 
=Auf dem Rechner 192.168.6.88=
 
=Auf dem Rechner 192.168.6.88=
Zeile 18: Zeile 23:
 
<pre>
 
<pre>
 
options {
 
options {
        directory "/var/cache/bind";
+
directory "/var/cache/bind";
        dnssec-validation no;
+
dnssec-validation no;
        listen-on-v6 { none; };
+
listen-on-v6 { none; };
        allow-recursion { any; };
+
allow-recursion { any; };
 
         allow-query  { any; };
 
         allow-query  { any; };
         allow-transfer { none; };
+
         allow-transfer { 127.0.0.1; };
 
};
 
};
 +
 
</pre>
 
</pre>
  
==Schlüssel für die Zone int erzeugen==
+
==Die Zonenfestlegung==
;ZSK erzeugen
+
*cat /etc/bind/named.conf.local
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
+
<pre>
 +
zone "int" {
 +
    type master;
 +
    forwarders {};
 +
    file "int.signed";
 +
};
 +
 
 +
zone "88.10.in-addr.arpa" {
 +
    type master;
 +
    forwarders {};
 +
    file "88.10.in-addr.arpa";
 +
};
 +
</pre>
 +
 
 +
==Die Zonen selbst (unsigniert)==
 +
*cat /var/cache/bind/int
 +
<pre>
 +
$TTL 300
 +
@        IN SOA  dnsgw.int. technik.kit.lab. (
 +
                2023022010 14400 3600 3600000 86400)
 +
            IN NS    dnsgw
 +
dnsgw      IN A      192.168.6.88
  
;KSK erzeugen
+
$GENERATE 201-213 ns.it$ A 10.88.$.21
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int
+
$GENERATE 201-213 it$ NS ns.it$
 +
</pre>
  
;Beispielausgabe
+
*cat /var/cache/bind/88.10.in-addr.arpa
 
<pre>
 
<pre>
Kint.+008+12345.key
+
$TTL 300
Kint.+008+12345.private
+
@        IN SOA  dnsgw.int. technik.kit.lab. (
Kint.+008+67890.key
+
                2023022010 14400 3600 3600000 86400)
Kint.+008+67890.private
+
            IN NS    dnsgw.int.
 +
$GENERATE 201-213  $  NS ns.it$.int.
 
</pre>
 
</pre>
  
==DNSKEY in die Zone einbinden==
+
==DNSSEC Schlüssel erzeugen==
;In die Datei /var/cache/bind/int einfügen
+
 
 +
;Für die Zone int
 +
*dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
 +
*dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int
 +
 
 +
==DNSKEY in die Zonen einbinden==
 +
 
 +
;int
 
*for k in Kint*.key ; do echo "\$INCLUDE /var/cache/bind/$k" >> /var/cache/bind/int; done
 
*for k in Kint*.key ; do echo "\$INCLUDE /var/cache/bind/$k" >> /var/cache/bind/int; done
  
==Zone signieren==
+
==Zonen signieren==
 +
 
 
*dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int
 
*dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int
 +
  
 
;Erzeugt
 
;Erzeugt
 
<pre>
 
<pre>
 
/var/cache/bind/int.signed
 
/var/cache/bind/int.signed
</pre>
 
 
==BIND auf signierte Zone umstellen==
 
*cat /etc/bind/named.conf.local
 
<pre>
 
zone "int" {
 
    type master;
 
    file "/var/cache/bind/int.signed";
 
};
 
 
</pre>
 
</pre>
  
Zeile 69: Zeile 98:
 
*dig @192.168.6.88 int DNSKEY +dnssec
 
*dig @192.168.6.88 int DNSKEY +dnssec
  
;Es müssen DNSKEY und RRSIG Einträge erscheinen
+
;DNSKEY und RRSIG Einträge müssen sichtbar sein
  
=Trust-Anker auf dem Resolver=
+
=Trust-Anker auf einem validierenden Resolver=
  
;DNSKEY ermitteln
+
;KSK ermitteln
 
*dig DNSKEY int @192.168.6.88 +short
 
*dig DNSKEY int @192.168.6.88 +short
  
 
;Nur der Key mit Kennung 257 3 13 wird verwendet
 
;Nur der Key mit Kennung 257 3 13 wird verwendet
  
;Auf dem validierenden Resolver eintragen
+
;Auf dem Resolver eintragen
 
*cat /etc/bind/named.conf.options
 
*cat /etc/bind/named.conf.options
 
<pre>
 
<pre>
Zeile 90: Zeile 119:
 
=Ergebnis=
 
=Ergebnis=
 
*Der Fake Root .int ist signiert
 
*Der Fake Root .int ist signiert
*Der Resolver vertraut dem KSK von int
+
*Delegationen funktionieren wie zuvor
*Die Vertrauenskette beginnt im Resolver
+
*DNSSEC beginnt beim Resolver durch expliziten Trust-Anker
*Der Fake Root arbeitet wie eine echte TLD mit eigenem Trust-Anker
 

Aktuelle Version vom 18. März 2026, 07:11 Uhr

Schaubild

Forward Zonen

Reverse Zonen

Script

Die Idee

  • Wir faken einen Top Level Domain Nameserver.
  • Dieser hat zur Aufgabe zu wissen wer die Second Level Domains verwaltet.
  • Wir delegieren diese Domains an die Teilnehmer.
  • Durch das Einstellen des gefakten Top Level Domain Servers als Forwarder wird jeder Anfragende an den richtigen Nameserver geleitet.
  • Die Zone .int wird zusätzlich mit DNSSEC signiert.
  • Der Trust-Anker wird später auf validierenden Resolvern gesetzt.

Auf dem Rechner 192.168.6.88

Optionen

  • cat /etc/bind/named.conf.options
options {
	directory "/var/cache/bind";
	dnssec-validation no;
	listen-on-v6 { none; };
	allow-recursion { any; };
        allow-query   { any; };
        allow-transfer { 127.0.0.1; };
};

Die Zonenfestlegung

  • cat /etc/bind/named.conf.local
zone "int" {
    type master;
    forwarders {};
    file "int.signed";
};

zone "88.10.in-addr.arpa" {
    type master;
    forwarders {};
    file "88.10.in-addr.arpa";
};

Die Zonen selbst (unsigniert)

  • cat /var/cache/bind/int
$TTL 300
@         IN SOA  dnsgw.int. technik.kit.lab. (
                2023022010 14400 3600 3600000 86400)
             IN NS     dnsgw
dnsgw       IN A      192.168.6.88

$GENERATE 201-213 ns.it$ A 10.88.$.21
$GENERATE 201-213 it$ NS ns.it$
  • cat /var/cache/bind/88.10.in-addr.arpa
$TTL 300
@         IN SOA  dnsgw.int. technik.kit.lab. (
                2023022010 14400 3600 3600000 86400)
             IN NS     dnsgw.int.
$GENERATE 201-213   $  NS ns.it$.int.

DNSSEC Schlüssel erzeugen

Für die Zone int
  • dnssec-keygen -a RSASHA256 -b 2048 -n ZONE int
  • dnssec-keygen -a RSASHA256 -b 4096 -f KSK -n ZONE int

DNSKEY in die Zonen einbinden

int
  • for k in Kint*.key ; do echo "\$INCLUDE /var/cache/bind/$k" >> /var/cache/bind/int; done

Zonen signieren

  • dnssec-signzone -A -N INCREMENT -o int -t /var/cache/bind/int


Erzeugt
/var/cache/bind/int.signed

Dienst neu starten

  • systemctl restart bind9

Überprüfung

  • dig @192.168.6.88 int DNSKEY +dnssec
DNSKEY und RRSIG Einträge müssen sichtbar sein

Trust-Anker auf einem validierenden Resolver

KSK ermitteln
  • dig DNSKEY int @192.168.6.88 +short
Nur der Key mit Kennung 257 3 13 wird verwendet
Auf dem Resolver eintragen
  • cat /etc/bind/named.conf.options
managed-keys {
   int. initial-key 257 3 13 "BASE64-KSK-HIER-EINFÜGEN";
};
  • systemctl restart bind9

Ergebnis

  • Der Fake Root .int ist signiert
  • Delegationen funktionieren wie zuvor
  • DNSSEC beginnt beim Resolver durch expliziten Trust-Anker