Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dns_isc_bind_centos_6_-_master-slave_und_tsig

Dies ist eine alte Version des Dokuments!


DNS ISC bind CentOS 6 - Master-Slave und TSIG

DNS ISC bind ist ein DNS-Server, welcher die Namensauflösung in einem Netzwerk realisieren kann. Der DNS-Server des ISC (Internet System Consortium) ist einer der meist eingesetzten Namensserver weltweit und ebenfalls der bei den aktuell 13 weltweiten Root-Nameservern verwendete DNS-Server.

:!: HINWEIS - Die gezeigten Ausführungen basieren auf dem nachfolgenden internen DokuWiki-Eintrag: DNS ISC bind CentOS 6

Ab hier werden zur Ausführung nachfolgender Befehle root-Rechte benötigt. Um der Benutzer root zu werden, melden Sie sich bitte als root-Benutzer am System an, oder wechseln mit nachfolgendem Befehl zum Benutzer root:

$ su -
Password:

Konstellationsbeschreibung

Nachfolgend soll ein Überblick gegeben werden, wie sich die Beziehung zwischen Master-Server und Slave-Server in der nachfolgend gezeigten Konstellation darstellt:

 +-------------------+                                                                                         +---------------------+
 |                   |                                                                                         |                     |
 |   MASTER-Server   |                                                                                         |   SLAVE-Server      |
 |   =============   |                                                                                         |   ============      |
 |                   |                                                                                         |                     | 
 |   Präsenz:        |                                                                                         |   Präsenz:          | 
 |   DMZ             |                                                                                         |   DMZ, Intranet     | 
 |                   |                                                                                         |                     | 
 +-------------------+                                                                                         +---------------------+
 |                   |                                                                                         |                     |
 |   DMZ-IP-Adresse: |                                                                                         |   DMZ-IP-Adresse:   |
 |   192.168.0.20    | -------> Transfer der Zone DMZ   <------> Anfrage des Transfers der Zone DMZ   <------- |   192.168.0.10      |     
 |                   |                                                                                         |                     |
 |   DMZ-IP-Adresse: |                                                                                         |   intra-IP-Adresse: |
 |   192.168.0.20    | -------> Transfer der Zone intra <------> Anfrage des Transfers der Zone intra <------- |   192.168.1.1       |
 |                   |                                                                                         |                     |
 +-------------------+                                                                                         +---------------------+

:!: WICHTIG - Die Zone DMZ - muss - über die IP-Adressen - 192.168.0.20 ←→ 192.168.0.10 transferiert werden!
:!: WICHTIG - Die Zone intra - muss - über die IP-Adressen - 192.168.0.20 ←→ 192.168.1.1 transferiert werden!

:!: HINWEIS - Falls die Zone intra auch über die IP-Adresse 192.168.0.10 des Slave-Servers transferiert wird, ist der Inhalt FALSCH und entspricht dem Inhalt der Zone DMZ !!!

Es wird ein Zonen-Transfer durchgeführt, wobei die

  • gleichen Zonen-Definitionen, z.B. dmz.tachtler.net, intra.tachtler.net uvm. in
  • unterschiedlichen View-Definitionen, localhost, DMZ, intra

verwendet werden.

:!: WICHTIG - Dabei können die Inhalte der Zonen-Definitionen durchaus unterschiedlich sein !!!

Beispiel::

Abfrage der IP-Adresse von –> mx1.tachtler.net in der View - DMZ

# dig mx1.tachtler.net
...
;; ANSWER SECTION:
mx1.tachtler.net.       10800   IN      A       192.168.0.60
...

Abfrage der IP-Adresse von –> mx1.tachtler.net in der View - intra

# dig mx1.tachtler.net
...
;; ANSWER SECTION:
mx1.tachtler.net.       10800   IN      A       88.217.171.167
...

Master-Konfiguration

Nachfolgende Konfiguration ist eine Beispielkonfiguration, welche auf bestimmte Ansichten und Bedürfnisse zugeschnitten ist. Dies Konfiguration erhebt keinen Anspruch auf Vollständigkeit.

Nachfolgend soll die Konfigurationsdatei

  • /etc/named.conf

zu einer Master-Konfigurationsdatei angepasst werden.

:!: WICHTIG - Nachfolgend wird beschrieben, welche ZIELE die HIER nachstehende Konfigurationsdatei hat bzw. erfüllen soll!!!

Folgende Zielsetzung hat die nachstehende Konfigurationsdatei /etc/named.conf:

  1. Master Nameserver
  2. für die Zonen
    • dmz.tachtler.net
    • intra.tachtler.net
  3. nicht für die Zone
    • tachtler.net
  4. Namensauflösung forward und reverse
  5. nur für ein internes Netzwerk, keine externen Anfragen zur Beantwortung
  6. Es sollen immer die root-Server für nicht autoritativen Anfragen benutzt werden
  7. Der Einsatz von views, welche aktuell jedoch auf identische Dateien verweisen!
  8. Vorerst noch kein DNSSEC

/etc/named.conf

Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):

//
// Tachtler - named.conf
//
 
// acl -----------------------------------------------------------------
 
acl masterlist {
        127.0.0.1/32;
        192.168.0.20/32;
};
 
acl slavelist {
        192.168.0.10/32;
        192.168.1.1/32;
}
 
acl dmz {
        192.168.0.0/24;
};
 
acl intra {
        192.168.1.0/24;
};
 
// options -------------------------------------------------------------
 
options {
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        /*
         * With problems while censorship with ISP no forwards will
         * be defined. Asking the root-server!
         *
         * // DNS-Server which will asked when local answers not found.
         * forwarders { 212.18.3.5; 212.18.0.5; };
         * // Route the questions to the Forwarders first, not only.
         * forward first;
         */
        // Allow notification form this DNS-Server to slave DNS-Server.
        notify yes;
        also-notify { 192.168.0.10; 192.168.1.1; };
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        query-source address * port *;
        // No answer, when asking for bind-version.
        version "";
        // Accept no old questions and configurations.
        auth-nxdomain no;
        // Allow these HOSTs to ask ordinary DNS questions.     
        allow-query { localhost; dmz; intra; edmz; };
        // Allow these HOSTs to ask recursiv DNS questions.
        allow-recursion { localhost; dmz; intra; edmz; };
        // Local interfaces to listen on
        listen-on port 53 { masterlist; };
        // Enable zonetransfer to these HOSTs.
        allow-transfer { masterlist; slavelist; };
        // Local address for zone transfers.
        transfer-source 192.168.0.20;
        // The maximum number of outbound zone transfers running concurrently.
        transfers-out 999;        
        // Warn only, if names not correct, like DKIM for e-mail.
        check-names master warn;
        // Recursion to other nameserver and reslovers.
        recursion yes;
        // Enable zones with no zone files.
        empty-zones-enable yes;
 
        // DNSSEC-Options first set to no!
        // TODO
        // default: dnssec-enable yes;
        dnssec-enable no;
        // TODO
        //default: dnssec-validation yes;
        dnssec-validation no;
        // TODO
        //default: dnssec-lookaside auto;
        dnssec-lookaside auto;
 
        /* Path to ISC DLV key */
        // TODO
        bindkeys-file "/etc/named.iscdlv.key";
 
        /* Path to dynamic content */
        managed-keys-directory "/var/named/dynamic";
};
 
// logging -------------------------------------------------------------
 
logging {
        channel default_debug {
                file "data/named.run";
                severity info;
                print-severity yes;
                print-time yes;
                print-category yes;
        };
        category default {
                default_debug;
        };
};
 
// TSIG ----------------------------------------------------------------
 
key "intra." {
        algorithm hmac-sha256;
        secret "kfgHKkh27TApI3pD+z2GIB==";
};
 
// zones ---------------------------------------------------------------
 
view "localhost" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "localhost"; };
        // Only following destination can resolv the zon informations.
        match-destinations { "localhost"; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type master; 
                file "dynamic/master/dmz.tachtler.net.zone.db";
                allow-update { none; };
        };
 
        zone "intra.tachtler.net" IN {
                type master; 
                file "dynamic/master/intra.tachtler.net.zone.db";
                allow-update { none; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/0.168.192.zone.db";
                allow-update { none; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/1.168.192.zone.db";
                allow-update { none; };
        };
 
};
 
view "dmz" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "dmz"; };
        // Only following destination can resolv the zon informations.
        match-destinations { "dmz"; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type master; 
                file "dynamic/master/dmz.tachtler.net.zone.db";
                allow-update { none; };
        };
 
        zone "intra.tachtler.net" IN {
                type master; 
                file "dynamic/master/intra.tachtler.net.zone.db";
                allow-update { none; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/0.168.192.zone.db";
                allow-update { none; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/1.168.192.zone.db";
                allow-update { none; };
        };
 
};
 
view "intra" {
 
        // Only following clients can resolv the zone informations.
        match-clients { key intra. ; "intra"; };
        // Only following destination can resolv the zon informations.
        match-destinations { key intra. ; "intra"; };
 
        // Allow transfer for server with key.
        server 192.168.0.1 { keys intra. ; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type master; 
                file "dynamic/master/dmz.tachtler.net.zone.db";
                allow-update { none; };
        };
 
        zone "intra.tachtler.net" IN {
                type master; 
                file "dynamic/master/intra.tachtler.net.zone.db";                
                allow-update { none; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/0.168.192.zone.db";
                allow-update { none; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type master;
                file "dynamic/master/1.168.192.zone.db";
                allow-update { none; };
        };
 
};
 
// keys ----------------------------------------------------------------
 
include "/etc/rndc.key";
 
// controls ------------------------------------------------------------
 
controls {
        inet 127.0.0.1 port 953
                allow { masterlist; } keys { rndc-key; };
};

Nachfolgend sollen die wichtigen Bestandteile der voranstehenden Konfigurationsdatei /etc/named.conf veranschaulicht werden.

Definitionen der beteiligten Server: Master- und Slave-Server

...
acl masterlist {
        127.0.0.1/32;
        192.168.0.20/32;
};
 
acl slavelist {
        192.168.0.10/32;
        192.168.1.1/32;
}
...

Es werden die IP-Adressen des Master-Servers und des Slave-Servers in ACL-Gruppen definiert, die später zum Einsatz kommen.

Definitionen zum Benachrichtigungssystem

...
        // Allow notification form this DNS-Server to slave DNS-Server.
        notify yes;
        also-notify { 192.168.0.10; 192.168.1.1; };
...

Es sollen Benachrichtigungen vom Master-Server zum Slave-Server bei Zonenänderungen Versand werden, so dass ein Zonen-Transfer ausgelöst wird.

:!: WICHTIG - Da unterschiedliche Netz-Segmente verwendet werden, müssen alle entsprechenden IP-Adressen des Slave-Servers aufgeführt werden, für die ein Zonen-Transfer durchgeführt werden soll !!!

Definitionen Server-Benachrichtigungen

...
        // Enable zonetransfer to these HOSTs.
        allow-transfer { masterlist; slavelist; };
...        

Hier werden die ACL-Gruppen verwendet, hinter denen sich die IP-Adresse befinden, auf die Server auf die ein Zonen-Transfer erlaubt ist.

Definition der Master-Server transfer IP-Adresse

...
        // Local address for zone transfers.
        transfer-source 192.168.0.20;
...

Hier wird die IP-Adresse festgelegt, mit der der Master-Server den Zonen-Transfer durchführt (Absender IP-Adresse).

Definition der gleichzeitig erlaubten Zonen-Transfers

...
        // The maximum number of outbound zone transfers running concurrently.
        transfers-out 999;
...

Der Standard-Wert liegt beim Transfer von 10 Zonen, was als Lastbeschränkung gedacht ist. Die Anzahl kann jedoch erhöht werden, was aber zu Lasten der Performance des Master-Servers und des Slave-Servers führen kann.

Definition eines TSIG-Schlüsses

...
// TSIG ----------------------------------------------------------------
 
key "intra." {
        algorithm hmac-sha256;
        secret "kfgHKkh27TApI3pD+z2GIB==";
};
...

Dies ist die Definition eines TSIG-Schlüssels, welcher für bestimmte Konstellationen von Zonen-Transfers maßgeblich entscheidend ist!

:!: WICHTIG - Der Einsatz eines TSIG-Schlüssels ist bei der hier vorgestellten Konstellation des Zonen-Transfers entscheidend und wird nachfolgend behandelt:

Definitionen der "Views"

...
view "localhost" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "localhost"; };
...
view "dmz" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "dmz"; };
...
view "intra" {
 
        // Only following clients can resolv the zone informations.
        match-clients { key intra. ; "intra"; };
        // Only following destination can resolv the zon informations.
        match-destinations { key intra. ; "intra"; };
 
        // Allow transfer for server with key.
        server 192.168.0.1 { keys intra. ; };
...       

:!: WICHTIG - Es kommen unterschiedliche View-Definitionen zum Einsatz !!!

Bei den View-Definitionen

  • localhost und
  • dmz

kommt eine Definition zum Einsatz die einem Slave-Server mit dem TSIG-Schlüssel

  • intra.

den Zonen-Transfer - NICHT ERLAUBT !!!

... !key intra. ; ...

Bei der View-Definition

  • intra

kommt eine Definition zum Einsatz die einem Slave-Server mit dem TSIG-Schlüssel

  • intra.

den Zonen-Transfer - ERLAUBT !!!

... key intra. ; ...

:!: WICHTIG - Die Definition des Slave-Servers mit dem dazugehörigen Key - intra. !!!

... server 192.168.1.1 { keys intra. ; };

Definitionen der "Zonen"

...
        zone "dmz.tachtler.net" IN {
                type master;
                file "dynamic/master/dmz.tachtler.net.zone.db";
                allow-update { none; };
        };
...

:!: HINWEIS - Diese Definitionen gelten für alle Zonen, lediglich der

  • Name der Zone - hier z.B. dmz.tachtler.net und die
  • Datei der Zone - hier z.B. dynamic/master/dmz.tachtler.net.zone.db

sind entsprechend der einzelnen verwendeten Zonen unterschiedlich.

Slave-Konfiguration

Nachfolgende Konfiguration ist eine Beispielkonfiguration, welche auf bestimmte Ansichten und Bedürfnisse zugeschnitten ist. Dies Konfiguration erhebt keinen Anspruch auf Vollständigkeit.

Nachfolgend soll die Konfigurationsdatei

  • /etc/named.conf

zu einer Slave-Konfigurationsdatei angepasst werden.

:!: WICHTIG - Nachfolgend wird beschrieben, welche ZIELE die HIER nachstehende Konfigurationsdatei hat bzw. erfüllen soll!!!

Folgende Zielsetzung hat die nachstehende Konfigurationsdatei /etc/named.conf:

  1. Slave Nameserver
  2. für die Zonen
    • dmz.tachtler.net
    • intra.tachtler.net
  3. nicht für die Zone
    • tachtler.net
  4. Namensauflösung forward und reverse
  5. nur für ein internes Netzwerk, keine externen Anfragen zur Beantwortung
  6. Es soll immer der Master-Server für nicht autoritativen Anfragen benutzt werden
  7. Der Einsatz von views, welche aktuell jedoch auf identische Dateien verweisen!
  8. Vorerst noch kein DNSSEC

/etc/named.conf

Die jeweiligen Kommentare erklären die nachfolgend durchgeführten Einstellung (komplette Konfigurationsdatei):

//
// Tachtler - named.conf
//
 
// acl -----------------------------------------------------------------
 
acl masterlist {
        192.168.0.20/32;
};
 
acl slavelist {
        127.0.0.1/32;
        192.168.0.10/32;
        192.168.1.1/32;
}
 
acl dmz {
        192.168.0.0/24;
};
 
acl intra {
        192.168.1.0/24;
};
 
// options -------------------------------------------------------------
 
options {
        directory               "/var/named";
        dump-file               "/var/named/data/cache_dump.db";
        statistics-file         "/var/named/data/named_stats.txt";
        memstatistics-file      "/var/named/data/named_mem_stats.txt";
        /*
         * With problems while censorship with ISP no forwards will
         * be defined. Asking the root-server!
         *
         * // DNS-Server which will asked when local answers not found.
         * forwarders { 212.18.3.5; 212.18.0.5; };
         * // Route the questions to the Forwarders first, not only.
         * forward first;
         */
        // No notification form this DNS-Server to anyone.
        notify no;
        /*
         * If there is a firewall between you and nameservers you want
         * to talk to, you might need to uncomment the query-source
         * directive below.  Previous versions of BIND always asked
         * questions using port 53, but BIND 8.1 uses an unprivileged
         * port by default.
         */
        query-source address * port *;
        // No answer, when asking for bind-version.
        version "";
        // Accept no old questions and configurations.
        auth-nxdomain no;
        // Allow these HOSTs to ask ordinary DNS questions.     
        allow-query { localhost; dmz; intra; edmz; };
        // Allow these HOSTs to ask recursiv DNS questions.
        allow-recursion { localhost; dmz; intra; edmz; };
        // Local interfaces to listen on
        listen-on port 53 { masterlist; };
        // Enable zonetransfer to these HOSTs.
        allow-transfer { slavelist; };
        // Local address for zone transfers.
        transfer-source 192.168.0.10;
        // The maximum number of inbound zone transfers running concurrently.
        transfers-in 999;       
        // Warn only, if names not correct, like DKIM for e-mail.
        check-names master warn;
        // Recursion to other nameserver and reslovers.
        recursion yes;
        // Enable zones with no zone files.
        empty-zones-enable yes;
 
        // DNSSEC-Options first set to no!
        // TODO
        // default: dnssec-enable yes;
        dnssec-enable no;
        // TODO
        //default: dnssec-validation yes;
        dnssec-validation no;
        // TODO
        //default: dnssec-lookaside auto;
        dnssec-lookaside auto;
 
        /* Path to ISC DLV key */
        // TODO
        bindkeys-file "/etc/named.iscdlv.key";
 
        /* Path to dynamic content */
        managed-keys-directory "/var/named/dynamic";
};
 
// logging -------------------------------------------------------------
 
logging {
        channel default_debug {
                file "data/named.run";
                severity info;
                print-severity yes;
                print-time yes;
                print-category yes;
        };
        category default {
                default_debug;
        };
};
 
// TSIG ----------------------------------------------------------------
 
key "intra." {
        algorithm hmac-sha256;
        secret "kfgHKkh27TApI3pD+z2GIB==";
};
 
// zones ---------------------------------------------------------------
 
view "localhost" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "localhost"; };
        // Only following destination can resolv the zon informations.
        match-destinations { "localhost"; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/dmz.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "intra.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/intra.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/0.168.192.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/1.168.192.zone.db";
                masters { 192.168.0.20; };
        };
 
};
 
view "dmz" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "dmz"; };
        // Only following destination can resolv the zon informations.
        match-destinations { "dmz"; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type slave;
                file "dynamic/slave/dmz.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "intra.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/intra.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/0.168.192.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/1.168.192.zone.db";
                masters { 192.168.0.20; };
        };
 
};
 
view "intra" {
 
        // Only following clients can resolv the zone informations.
        match-clients { key intra. ; "intra"; };
        // Only following destination can resolv the zon informations.
        match-destinations { key intra. ; "intra"; };
 
        // Allow transfer for server with key.
        server 192.168.0.20 { keys intra. ; };
 
        // Recursion to other nameserver and reslovers.
        recursion yes;
 
        /*
         * All view MUST contain the root zone with the worldwide root 
         * server definitions.
         * 
         * Updating the root zone could be done with follwing command:
         * # dig NS . @a.root-servers.net > /var/named/named.ca
         */
        zone "." IN {
                type hint;
                file "named.ca";
        };
 
        /*
         * All view MUST contain the definitions for all the localhost
         * names and addresses, as recommended in RFC1912.
         */
        include "/etc/named.rfc1912.zones";
        include "/etc/named.root.key";
 
        zone "dmz.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/dmz.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "intra.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/intra.tachtler.net.zone.db";
                transfer-source 192.168.1.1;                                
                masters { 192.168.0.20; };
        };
 
        zone "0.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/0.168.192.zone.db";
                masters { 192.168.0.20; };
        };
 
        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/1.168.192.zone.db";
                transfer-source 192.168.1.1;                
                masters { 192.168.0.20; };
        };
 
};
 
// keys ----------------------------------------------------------------
 
include "/etc/rndc.key";
 
// controls ------------------------------------------------------------
 
controls {
        inet 127.0.0.1 port 953
                allow { slavelist; } keys { rndc-key; };
};

Nachfolgend sollen die wichtigen Bestandteile der voranstehenden Konfigurationsdatei /etc/named.conf veranschaulicht werden.

Definitionen der beteiligten Server: Master- und Slave-Server

...
acl masterlist {
        192.168.0.20/32;
};
 
acl slavelist {
        127.0.0.1/32;
        192.168.0.10/32;
        192.168.1.1/32;
}
...

Es werden die IP-Adressen des Master-Servers und des Slave-Servers in ACL-Gruppen definiert, die später zum Einsatz kommen.

Definitionen zum Benachrichtigungssystem

...
        // No notification form this DNS-Server to anyone.
        notify no;
...

Es sollen keine Benachrichtigungen vom Slave-Server bei Zonenänderungen Versand werden.

Definitionen Server-Benachrichtigungen

...
        // Enable zonetransfer to these HOSTs.
        allow-transfer { slavelist; };
...        

Hier werden die ACL-Gruppen verwendet, hinter denen sich die IP-Adresse befinden, auf die Server auf die ein Zonen-Transfer erlaubt ist. Hier beim Slave-Server, sollte der Slave-Server selbst eingetragen werden.

Definition der Slave-Server transfer IP-Adresse

...
        // Local address for zone transfers.
        transfer-source 192.168.0.10;
...

Hier wird die IP-Adresse festgelegt, mit der der Slave-Server den Zonen-Transfer durchführt (Empfänger IP-Adresse).

:!: WICHTIG - Für einen Zonen-Transfer über eine weitere IP-Adresse, kann die Definition auch noch in der View, oder in der Zone angegeben werden !!!

Definition der gleichzeitig erlaubten Zonen-Transfers

...
        // The maximum number of inbound zone transfers running concurrently.
        transfers-in 999;
...

Der Standard-Wert liegt beim Transfer von 10 Zonen, was als Lastbeschränkung gedacht ist. Die Anzahl kann jedoch erhöht werden, was aber zu Lasten der Performance des Master-Servers und des Slave-Servers führen kann.

Definition eines TSIG-Schlüsses

...
// TSIG ----------------------------------------------------------------
 
key "intra." {
        algorithm hmac-sha256;
        secret "kfgHKkh27TApI3pD+z2GIB==";
};
...

Dies ist die Definition eines TSIG-Schlüssels, welcher für bestimmte Konstellationen von Zonen-Transfers maßgeblich entscheidend ist!

:!: WICHTIG - Der Einsatz eines TSIG-Schlüssels ist bei der hier vorgestellten Konstellation des Zonen-Transfers entscheidend und wird nachfolgend behandelt:

Definitionen der "Views"

...
view "localhost" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "localhost"; };
...
view "dmz" {
 
        // Only following clients can resolv the zone informations.
        match-clients { !key intra. ; "dmz"; };
...
view "intra" {
 
        // Only following clients can resolv the zone informations.
        match-clients { key intra. ; "intra"; };
        // Only following destination can resolv the zon informations.
        match-destinations { key intra. ; "intra"; };
 
        // Allow transfer for server with key.
        server 192.168.0.20 { keys intra. ; };
...       

:!: WICHTIG - Es kommen unterschiedliche View-Definitionen zum Einsatz !!!

Bei den View-Definitionen

  • localhost und
  • dmz

kommt eine Definition zum Einsatz die einem Master-Server mit dem TSIG-Schlüssel

  • intra.

den Zonen-Transfer - NICHT ERLAUBT !!!

... !key intra. ; ...

Bei der View-Definition

  • intra

kommt eine Definition zum Einsatz die einem Master-Server mit dem TSIG-Schlüssel

  • intra.

den Zonen-Transfer - ERLAUBT !!!

... key intra. ; ...

:!: WICHTIG - Die Definition des Master-Servers mit dem dazugehörigen Key - intra. !!!

... server 192.168.0.20 { keys intra. ; };

Definitionen der "Zonen"

...
        zone "dmz.tachtler.net" IN {
                type slave;
                file "dynamic/slave/dmz.tachtler.net.zone.db";
                masters { 192.168.0.20; };
        };
...

:!: HINWEIS - Diese Definitionen gelten für alle Zonen, lediglich der

  • Name der Zone - hier z.B. dmz.tachtler.net und die
  • Datei der Zone - hier z.B. dynamic/master/dmz.tachtler.net.zone.db

sind entsprechend der einzelnen verwendeten Zonen unterschiedlich.

:!: WICHTIG - Eine Besonderheit genießt jedoch die

  • Zone - intra.tachtler.net

bzw. dessen „reverse“ Auflösung

  • Zone - 1.168.192.in-addr.arpa

Wie nachfolgend gezeigt, wird hier die Definition transfer-source entsprechend angepasst:

...
        zone "intra.tachtler.net" IN {
                type slave; 
                file "dynamic/slave/intra.tachtler.net.zone.db";
                transfer-source 192.168.1.1;                                
                masters { 192.168.0.20; };
        };
...
        zone "1.168.192.in-addr.arpa" IN {
                type slave;
                file "dynamic/slave/1.168.192.zone.db";
                transfer-source 192.168.1.1;                
                masters { 192.168.0.20; };
...

TSIG-Schlüssel

TSIG steht für (Transaction SIGnatures) und stellt eine Möglichkeit dar, die Kommunikation mithilfe eines Schlüssels weiter abzusichern.

Die Original-Dokumentation kann unter nachfolgendem externen Link eingesehen werden

Erstellen

Um einen TSGI-Schlüssel(paar) zu erstellen, kann nachfolgender Befehl genutzt werden:

# dnssec-keygen -a hmac-sha256 -b 128 -n HOST intra.
Kintra.+163+32328

* Die Generierung kann einige Zeit in Anspruch nehmen, je nach Leistungsfähigkeit des Servers.

Anschließend sollten zwei Dateien entstanden sein, was mit nachfolgendem Befehl überprüft werden kann:

# ls -la *intra.*
-rw-r--r-- 1 root root  49 Aug  6 14:15 Kintra.+163+32328.key
-rw------- 1 root root 168 Aug  6 14:15 Kintra.+163+32328.private

Hier ist nur die Datei

  • Kintra.+113+32328.private

interessant, dessen Inhalt mit nachfolgendem Befehl ausgegeben werden kann:

# cat Kintra.+163+32328.private 
Private-key-format: v1.3
Algorithm: 163 (HMAC_SHA256)
Key: kfgHKkh27TApI3pD+z2GIB==
Bits: AAA=
Created: 20120806121239
Publish: 20120806121239
Activate: 20120806121239

:!: HINWEIS - Hier kann nun die „Zeichenkette“, welche nach der Bezeichnung Key: steht verwendet werden.

Die Dateien selbst, können gelöscht werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# rm Kintra.+163+32328.*

Verwenden

Nun muss die jeweilige Konfigurationsdatei

  • /etc/named.conf

des

  • Master-Servers und des
  • Slave-Servers

um nachfolgende Zeilen erweitert werden, damit dem jeweiligen Server der gleiche TSIG-Schlüssel bekannt ist und verwendet werden kann (nur relevanter Ausschnitt):

...
key "intra." {
        algorithm hmac-sha256;
        secret "kfgHKkh27TApI3pD+z2GIB==";
};
...

Log-Datei des Zonen-Transfers

Zur Überprüfung, ob ein Zonen-Transfer erfolgreich durchgeführt wurde, kann nachfolgender Befehl genutzt werden, der die Log-Datei

  • /var/named/data/named.run

auf dem Slave-Server, zur Ausgabe auf den Bildschirm bring (nur relevanter Ausschnitt):

...
06-Aug-2012 14:21:35.719 general: info: zone tachtler.net/IN/intra: Transfer started.
06-Aug-2012 14:21:35.720 xfer-in: info: transfer of 'tachtler.net/IN/intra' from 192.168.0.20#53: connected using 192.168.1.1#57420
06-Aug-2012 14:21:35.723 general: warning: zone tachtler.net/IN/intra: main._domainkey.tachtler.net/A: bad owner name (check-names)
06-Aug-2012 14:21:35.723 general: info: zone tachtler.net/IN/intra: transferred serial 2012080502: TSIG 'intra'
06-Aug-2012 14:21:35.724 xfer-in: info: transfer of 'tachtler.net/IN/intra' from 192.168.0.20#53: Transfer completed: 1 messages, 98 records,
2459 bytes, 0.003 secs (819666 bytes/sec)
06-Aug-2012 14:21:35.218 general: info: zone 171.217.88.in-addr.arpa/IN/intra: Transfer started.
06-Aug-2012 14:21:35.219 xfer-in: info: transfer of '171.217.88.in-addr.arpa/IN/intra' from 192.168.0.20#53: connected using 192.168.1.1#58583
06-Aug-2012 14:21:35.220 general: info: zone 171.217.88.in-addr.arpa/IN/intra: transferred serial 2012080502: TSIG 'intra'
06-Aug-2012 14:21:35.220 xfer-in: info: transfer of '171.217.88.in-addr.arpa/IN/intra' from 192.168.0.20#53: Transfer completed: 1 messages,
6 records, 306 bytes, 0.001 secs (306000 bytes/sec)
...

Fehlersuche

Falls ein Fehler, wie nachfolgend dargestellt (nur relevanter Ausschnitt),

...
06-Aug-2012 13:00:36.510 general: info: zone 171.217.88.in-addr.arpa/IN/intra: refresh: failure trying master 192.168.0.20#53 
(source 192.168.1.1#0): tsig indicates error
...

in der Log-Datei auftreten sollte und der Zonen-Transfer, nicht stattgefunden hat, sollten nachfolgende Konfigurationen überprüft werden:

  1. Ist der generierte Schlüssel korrekt erstellt worden?
  2. Ist der Name des generierten Schlüssels (hier z.B. intra.), auch so in der Konfigurationsdatei konfiguriert? (Punkt am Ende das Namens?)
  3. Sind die Views korrekt konfiguriert?
    1. z.B. Zone - ohne - TSIG, wie z.B. localhost
      1. match-clients { !key intra. ; "localhost"; };
      2. match-destinations { "localhost"; };
    2. z.B. Zone - mit - TSIG, wie z.B. intra
      1. match-clients { key intra. ; "intra"; };
      2. match-destinations { key intra. ; "intra"; };
      3. Master-Server →
        server 192.168.1.1 { keys intra; };
      4. Slave-Server →
        server 192.168.0.20 { keys intra; };

Zonen-Transfer über NAT-Firewall

Um einen Zonen-Transfer über eine Firewall, welche z.B. bei alle ausgehenden Verbindungen, via NAT die Absender-IP-Adresse umschreibt (MASQUERADING), sind nachfolgende iptables-Regeln

  • :!: VOR :!:

der MASQUERADING-Regel einzufügen:

Um die aktuellen iptables-Regeln (CHAIN NAT) erweitern zu können, sollten diese erst einmal aufgelistet werden, was mit nachfolgendem Befehl durchgeführt werden kann:

# iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination          

Chain POSTROUTING (policy ACCEPT 980 packets, 82233 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1     5224  379K SNAT       all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           to:10.0.0.10 

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination         

Nachfolgende Befehle, fügen folgende iptables-Regeln dem iptables-Regelwerk (CHAIN NAT) jeweils ab der Position 1 hinzu, ohne das der Paketfilter angehalten werden muss:

  • -A POSTROUTING -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
  • -A POSTROUTING -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT
  • -A OUTPUT -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
  • -A OUTPUT -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT

und hier die Befehle:

# iptables -I POSTROUTING 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
# iptables -I POSTROUTING 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT
# iptables -I OUTPUT 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p tcp -m tcp --dport 53 -j ACCEPT
# iptables -I OUTPUT 1 -s 192.168.1.1/32 -d 192.168.0.20/32 -o eth0 -p udp -m udp --dport 53 -j ACCEPT

Ein erneute Abfrage des iptables-Regelwerts (CHAIN NAT) , sollte dann nachfolgend dargestellte Ausgabe ergeben, was mit folgendem Befehl durchgeführt werden kann:

# iptables -t nat -nvL --line-numbers
Chain PREROUTING (policy ACCEPT 0 packets, 0 bytes)
num   pkts bytes target     prot opt in     out     source               destination          

Chain POSTROUTING (policy ACCEPT 980 packets, 82233 bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       36  2160 ACCEPT     tcp  --  *      eth0    192.168.1.1          192.168.0.20        tcp dpt:53 
2       82 10989 ACCEPT     udp  --  *      eth0    192.168.1.1          192.168.0.20        udp dpt:53 
3     5224  379K SNAT       all  --  *      eth0    0.0.0.0/0            0.0.0.0/0           to:192.168.0.10 

Chain OUTPUT (policy ACCEPT 3598 packets, 294K bytes)
num   pkts bytes target     prot opt in     out     source               destination         
1       36  2160 ACCEPT     tcp  --  *      eth0    192.168.1.1          192.168.0.20        tcp dpt:53 
2       82 10989 ACCEPT     udp  --  *      eth0    192.168.1.1          192.168.0.20        udp dpt:53

Die neuen Zeilen sind an Position 1 und Postition 2 zu sehen, hier nachfolgend zur Verdeutlichung noch einmal dargestellt (nur relevanter Ausschnitt):

...
1       36  2160 ACCEPT     tcp  --  *      eth0    192.168.1.1          192.168.0.20        tcp dpt:53 
2       82 10989 ACCEPT     udp  --  *      eth0    192.168.1.1          192.168.0.20        udp dpt:53
...
1       36  2160 ACCEPT     tcp  --  *      eth0    192.168.1.1          192.168.0.20        tcp dpt:53 
2       82 10989 ACCEPT     udp  --  *      eth0    192.168.1.1          192.168.0.20        udp dpt:53
...

Um diese iptables-Regel dauerhaft, auch nach einem Neustart des Server, weiterhin im iptables-Regelwerk zu speichern, muss nachfolgend dargestellter Befehl abschließend noch ausgeführt werden:

# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[  OK  ]
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/dns_isc_bind_centos_6_-_master-slave_und_tsig.1344259135.txt.gz · Zuletzt geändert: 2012/08/06 15:18 von klaus