KEA DHCP DDNS Netzwerk und Serveradministration: Unterschied zwischen den Versionen

Aus Xinux Wiki
Zur Navigation springen Zur Suche springen
 
(8 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
= Dynamisches DNS mit Kea und BIND9 =
+
=Dynamic DNS mit Kea und BIND9=
  
Diese Anleitung beschreibt die Verknüpfung von Kea DHCPv4 mit einem BIND9 Nameserver (10.88.213.21) über den Kea-DHCP-DDNS Daemon unter Verwendung von TSIG-Keys.
+
==Technischer Ablauf (Theorie)==
 +
;1. DHCP-Request
 +
*Der Client sendet beim Request seinen Hostnamen (Option 12).
 +
*Kea-DHCP4 weist eine IP zu und prüft die DDNS-Konfiguration.
  
== Technischer Ablauf und Theorie ==
+
;2. NCR (Name Change Request)
 +
*Kea-DHCP4 generiert eine Update-Anfrage.
 +
*Durch "ddns-qualifying-suffix" wird aus dem Hostnamen "client" der FQDN "client.it213.int".
 +
*Diese Anfrage geht intern an den Kea-DDNS-Daemon (Port 53001).
  
Das Dynamic DNS (DDNS) Update sorgt für die automatische Synchronisation zwischen DHCP-Leases und DNS-Records.
+
;3. TSIG-Signierung
 +
*Der Kea-DDNS-Daemon nimmt das Paket entgegen.
 +
*Er nutzt den "it213.key" (HMAC-SHA256), um die Anfrage kryptografisch zu signieren.
 +
*Dies stellt sicher, dass nur autorisierte Dienste den DNS-Server manipulieren dürfen.
  
* Der Client sendet beim DHCP-Request seinen Hostnamen (Option 12).
+
;4. DNS-Update (BIND9)
* Kea-DHCPv4 weist eine IP zu und generiert einen Name Change Request (NCR).
+
*BIND9 (10.88.213.21) empfängt das signierte Paket.
* Durch das qualifying-suffix wird der Hostname zum Fully Qualified Domain Name (FQDN) ergänzt (z.B. client.it213.int).
+
*Dank "allow-update" wird die Signatur akzeptiert.
* Der Kea-DHCP-DDNS Daemon empfängt den NCR auf Port 53001, signiert ihn mit dem TSIG-Key und sendet ein Update-Paket an den BIND9-Server.
+
*BIND schreibt den A-Record (Forward) und den PTR-Record (Reverse) in die Zonen-Dateien.
* BIND9 prüft die Signatur (allow-update) und aktualisiert Forward-Zone (A-Record) sowie Reverse-Zone (PTR-Record).
 
  
== Konfiguration des Nameservers ==
+
;Wichtiger Hinweis
 +
*Der DHCP-Server schreibt NICHT direkt in den DNS, sondern delegiert dies an den Kea-DDNS-Daemon.
  
Auf dem Nameserver (ns.it213.int) wird der TSIG-Key erstellt und den Zonen zugewiesen.
+
==Auf unserem Nameserver (10.88.213.21)==
 
+
;Key erzeugen
* Key erzeugen:
+
*cd /etc/bind
cd /etc/bind
+
*tsig-keygen -a HMAC-SHA256 it213.key >> /etc/bind/named.conf.local
tsig-keygen -a HMAC-SHA256 it213.key >> /etc/bind/named.conf.local
 
 
 
* Zonenkonfiguration anpassen:
 
cat /etc/bind/named.conf.local
 
  
 +
;Zonen und Key konfigurieren
 +
*cat /etc/bind/named.conf.local
 +
<syntaxhighlight lang="text">
 
key "it213.key" {
 
key "it213.key" {
    algorithm hmac-sha256;
+
    algorithm hmac-sha256;
    secret "Y8zioRKf3L0lWlhZ5FReSdegcnWVD53IIqT9PPle5cU=";
+
    secret "Y8zioRKf3L0lWlhZ5FReSdegcnWVD53IIqT9PPle5cU=";
};
+
};  
  
 
zone "it213.int" {
 
zone "it213.int" {
    type master;
+
    type master;
    file "/var/cache/bind/it213.int";
+
    file "/var/cache/bind/it213.int";
    allow-update { key "it213.key"; };
+
    allow-update { key "it213.key"; };
};
+
};  
  
 
zone "213.88.10.in-addr.arpa" {
 
zone "213.88.10.in-addr.arpa" {
    type master;
+
    type master;
    file "/var/cache/bind/213.88.10.in-addr.arpa";
+
    file "/var/cache/bind/213.88.10.in-addr.arpa";
    allow-update { key "it213.key"; };
+
    allow-update { key "it213.key"; };
};
+
};  
  
 
zone "213.26.172.in-addr.arpa" {
 
zone "213.26.172.in-addr.arpa" {
    type master;
+
    type master;
    file "/var/cache/bind/213.26.172.in-addr.arpa";
+
    file "/var/cache/bind/213.26.172.in-addr.arpa";
    allow-update { key "it213.key"; };
+
    allow-update { key "it213.key"; };
 
};
 
};
 +
</syntaxhighlight>
  
* Dienst neu starten:
+
;Nameserver neustarten
systemctl restart bind9
+
*systemctl restart named
 
 
== Konfiguration des Kea Servers ==
 
  
* Installation des DDNS-Dienstes:
+
==Auf dem Kea Server==
sudo apt update
+
;Installation DDNS-Server
sudo apt install kea-dhcp-ddns-server
+
*sudo apt update
 +
*sudo apt install kea-dhcp-ddns-server
  
* Konfiguration DHCPv4 (/etc/kea/kea-dhcp4.conf):
+
;kea-dhcp4.conf anpassen
 +
*cat /etc/kea/kea-dhcp4.conf
 +
<syntaxhighlight lang="json">
 
{
 
{
 
   "Dhcp4": {
 
   "Dhcp4": {
 
     "interfaces-config": {
 
     "interfaces-config": {
 
       "interfaces": [ "enp0s3" ]
 
       "interfaces": [ "enp0s3" ]
 +
    },
 +
    "control-socket": {
 +
      "socket-type": "unix",
 +
      "socket-name": "/run/kea/kea4-ctrl-socket"
 +
    },
 +
    "lease-database": {
 +
      "type": "memfile",
 +
      "persist": true,
 +
      "name": "/var/lib/kea/kea-leases4.csv"
 
     },
 
     },
 
     "dhcp-ddns": {
 
     "dhcp-ddns": {
Zeile 72: Zeile 91:
 
     "ddns-update-on-renew": true,
 
     "ddns-update-on-renew": true,
 
     "ddns-qualifying-suffix": "it213.int",
 
     "ddns-qualifying-suffix": "it213.int",
 +
    "valid-lifetime": 7200,
 +
    "option-data": [
 +
      { "name": "domain-name-servers", "data": "10.88.213.21" },
 +
      { "name": "domain-name", "data": "it213.int" },
 +
      { "name": "domain-search", "data": "it213.int" }
 +
    ],
 
     "subnet4": [
 
     "subnet4": [
 
       {
 
       {
Zeile 77: Zeile 102:
 
         "subnet": "172.26.213.0/24",
 
         "subnet": "172.26.213.0/24",
 
         "pools": [ { "pool": "172.26.213.100 - 172.26.213.200" } ],
 
         "pools": [ { "pool": "172.26.213.100 - 172.26.213.200" } ],
 +
        "option-data": [ { "name": "routers", "data": "172.26.213.1" } ],
 
         "reservations": [
 
         "reservations": [
 
           {
 
           {
Zeile 84: Zeile 110:
 
           }
 
           }
 
         ]
 
         ]
 +
      },
 +
      {
 +
        "id": 2,
 +
        "subnet": "10.88.213.0/24",
 +
        "pools": [ { "pool": "10.88.213.50 - 10.88.213.100" } ],
 +
        "option-data": [ { "name": "routers", "data": "10.88.213.1" } ]
 +
      },
 +
      {
 +
        "id": 3,
 +
        "subnet": "10.213.1.0/24",
 +
        "pools": [ { "pool": "10.213.1.50 - 10.213.1.100" } ],
 +
        "option-data": [ { "name": "routers", "data": "10.213.1.1" } ]
 
       }
 
       }
 
     ],
 
     ],
Zeile 95: Zeile 133:
 
   }
 
   }
 
}
 
}
 +
</syntaxhighlight>
  
* Konfiguration DDNS-Daemon (/etc/kea/kea-dhcp-ddns.conf):
+
;kea-dhcp-ddns.conf erstellen
 +
*cat /etc/kea/kea-dhcp-ddns.conf
 +
<syntaxhighlight lang="json">
 
{
 
{
 
   "DhcpDdns": {
 
   "DhcpDdns": {
 
     "ip-address": "127.0.0.1",
 
     "ip-address": "127.0.0.1",
 
     "port": 53001,
 
     "port": 53001,
 +
    "control-socket": {
 +
      "socket-type": "unix",
 +
      "socket-name": "/run/kea/kea-ddns-ctrl-socket"
 +
    },
 
     "tsig-keys": [
 
     "tsig-keys": [
 
       {
 
       {
Zeile 140: Zeile 185:
 
   }
 
   }
 
}
 
}
 +
</syntaxhighlight>
  
== Restart und Debugging ==
+
==Restart und Debuggen==
 
+
;Dienste-Management
* Dienste neu starten:
+
*systemctl restart kea-dhcp4-server kea-dhcp-ddns-server
systemctl restart kea-dhcp4-server kea-dhcp-ddns-server
 
 
 
* Fehleranalyse:
 
Bei Problemen das Logging auf "severity": "DEBUG" und "debuglevel": 99 setzen.
 
Logs live einsehen:
 
tail -f /var/log/kea/kea-dhcp4.log
 
tail -f /var/log/kea/kea-ddns.log
 
 
 
* Überprüfung der Einträge im DNS:
 
dig @10.88.213.21 client.it213.int
 
dig @10.88.213.21 -x 172.26.213.99
 
 
 
== Wichtige Hinweise ==
 
  
* Schreibrechte: BIND benötigt Schreibrechte im Verzeichnis /var/cache/bind/ für die Journal-Dateien (.jnl).
+
;Debugging-Hinweise
* Suffix: Ohne ddns-qualifying-suffix in der kea-dhcp4.conf schlägt der Zonen-Match im DDNS-Daemon fehl.
+
*'''Logs prüfen:''' tail -f /var/log/kea/kea-ddns.log
* AppArmor: Bei Zugriffsproblemen (Unable to open file) AppArmor-Profile prüfen oder deaktivieren.
+
*'''Eintrag prüfen:''' dig @10.88.213.21 client.it213.int
 +
*'''AppArmor:''' Falls Dateien nicht geöffnet werden können, Profile unter /etc/apparmor.d/disable/ prüfen.
 +
*'''Schreibrechte:''' BIND benötigt Schreibrechte für /var/cache/bind/ für die .jnl Dateien.
 +
*'''Wartung:''' Nach dem Debugging Log-Level von DEBUG auf INFO zurückstellen.

Aktuelle Version vom 31. März 2026, 14:09 Uhr

Dynamic DNS mit Kea und BIND9

Technischer Ablauf (Theorie)

1. DHCP-Request
  • Der Client sendet beim Request seinen Hostnamen (Option 12).
  • Kea-DHCP4 weist eine IP zu und prüft die DDNS-Konfiguration.
2. NCR (Name Change Request)
  • Kea-DHCP4 generiert eine Update-Anfrage.
  • Durch "ddns-qualifying-suffix" wird aus dem Hostnamen "client" der FQDN "client.it213.int".
  • Diese Anfrage geht intern an den Kea-DDNS-Daemon (Port 53001).
3. TSIG-Signierung
  • Der Kea-DDNS-Daemon nimmt das Paket entgegen.
  • Er nutzt den "it213.key" (HMAC-SHA256), um die Anfrage kryptografisch zu signieren.
  • Dies stellt sicher, dass nur autorisierte Dienste den DNS-Server manipulieren dürfen.
4. DNS-Update (BIND9)
  • BIND9 (10.88.213.21) empfängt das signierte Paket.
  • Dank "allow-update" wird die Signatur akzeptiert.
  • BIND schreibt den A-Record (Forward) und den PTR-Record (Reverse) in die Zonen-Dateien.
Wichtiger Hinweis
  • Der DHCP-Server schreibt NICHT direkt in den DNS, sondern delegiert dies an den Kea-DDNS-Daemon.

Auf unserem Nameserver (10.88.213.21)

Key erzeugen
  • cd /etc/bind
  • tsig-keygen -a HMAC-SHA256 it213.key >> /etc/bind/named.conf.local
Zonen und Key konfigurieren
  • cat /etc/bind/named.conf.local
key "it213.key" {
     algorithm hmac-sha256;
     secret "Y8zioRKf3L0lWlhZ5FReSdegcnWVD53IIqT9PPle5cU=";
}; 

zone "it213.int" {
     type master;
     file "/var/cache/bind/it213.int";
     allow-update { key "it213.key"; };
}; 

zone "213.88.10.in-addr.arpa" {
     type master;
     file "/var/cache/bind/213.88.10.in-addr.arpa";
     allow-update { key "it213.key"; };
}; 

zone "213.26.172.in-addr.arpa" {
     type master;
     file "/var/cache/bind/213.26.172.in-addr.arpa";
     allow-update { key "it213.key"; };
};
Nameserver neustarten
  • systemctl restart named

Auf dem Kea Server

Installation DDNS-Server
  • sudo apt update
  • sudo apt install kea-dhcp-ddns-server
kea-dhcp4.conf anpassen
  • cat /etc/kea/kea-dhcp4.conf
{
  "Dhcp4": {
    "interfaces-config": {
      "interfaces": [ "enp0s3" ]
    },
    "control-socket": {
      "socket-type": "unix",
      "socket-name": "/run/kea/kea4-ctrl-socket"
    },
    "lease-database": {
      "type": "memfile",
      "persist": true,
      "name": "/var/lib/kea/kea-leases4.csv"
    },
    "dhcp-ddns": {
      "enable-updates": true,
      "server-ip": "127.0.0.1",
      "server-port": 53001
    },
    "ddns-send-updates": true,
    "ddns-override-no-update": true,
    "ddns-override-client-update": true,
    "ddns-update-on-renew": true,
    "ddns-qualifying-suffix": "it213.int",
    "valid-lifetime": 7200,
    "option-data": [
      { "name": "domain-name-servers", "data": "10.88.213.21" },
      { "name": "domain-name", "data": "it213.int" },
      { "name": "domain-search", "data": "it213.int" }
    ],
    "subnet4": [
      {
        "id": 1,
        "subnet": "172.26.213.0/24",
        "pools": [ { "pool": "172.26.213.100 - 172.26.213.200" } ],
        "option-data": [ { "name": "routers", "data": "172.26.213.1" } ],
        "reservations": [
          {
            "hw-address": "08:00:27:5d:76:5d",
            "ip-address": "172.26.213.99",
            "hostname": "client"
          }
        ]
      },
      {
        "id": 2,
        "subnet": "10.88.213.0/24",
        "pools": [ { "pool": "10.88.213.50 - 10.88.213.100" } ],
        "option-data": [ { "name": "routers", "data": "10.88.213.1" } ]
      },
      {
        "id": 3,
        "subnet": "10.213.1.0/24",
        "pools": [ { "pool": "10.213.1.50 - 10.213.1.100" } ],
        "option-data": [ { "name": "routers", "data": "10.213.1.1" } ]
      }
    ],
    "loggers": [
      {
        "name": "kea-dhcp4",
        "output_options": [ { "output": "/var/log/kea/kea-dhcp4.log" } ],
        "severity": "INFO"
      }
    ]
  }
}
kea-dhcp-ddns.conf erstellen
  • cat /etc/kea/kea-dhcp-ddns.conf
{
  "DhcpDdns": {
    "ip-address": "127.0.0.1",
    "port": 53001,
    "control-socket": {
      "socket-type": "unix",
      "socket-name": "/run/kea/kea-ddns-ctrl-socket"
    },
    "tsig-keys": [
      {
        "name": "it213.key",
        "algorithm": "HMAC-SHA256",
        "secret": "Y8zioRKf3L0lWlhZ5FReSdegcnWVD53IIqT9PPle5cU="
      }
    ],
    "forward-ddns": {
      "ddns-domains": [
        {
          "name": "it213.int.",
          "key-name": "it213.key",
          "dns-servers": [ { "ip-address": "10.88.213.21" } ]
        }
      ]
    },
    "reverse-ddns": {
      "ddns-domains": [
        {
          "name": "213.88.10.in-addr.arpa.",
          "key-name": "it213.key",
          "dns-servers": [ { "ip-address": "10.88.213.21" } ]
        },
        {
          "name": "213.26.172.in-addr.arpa.",
          "key-name": "it213.key",
          "dns-servers": [ { "ip-address": "10.88.213.21" } ]
        }
      ]
    },
    "loggers": [
      {
        "name": "kea-dhcp-ddns",
        "output_options": [ { "output": "/var/log/kea/kea-ddns.log" } ],
        "severity": "INFO"
      }
    ]
  }
}

Restart und Debuggen

Dienste-Management
  • systemctl restart kea-dhcp4-server kea-dhcp-ddns-server
Debugging-Hinweise
  • Logs prüfen: tail -f /var/log/kea/kea-ddns.log
  • Eintrag prüfen: dig @10.88.213.21 client.it213.int
  • AppArmor: Falls Dateien nicht geöffnet werden können, Profile unter /etc/apparmor.d/disable/ prüfen.
  • Schreibrechte: BIND benötigt Schreibrechte für /var/cache/bind/ für die .jnl Dateien.
  • Wartung: Nach dem Debugging Log-Level von DEBUG auf INFO zurückstellen.