viernes, 29 de abril de 2011

Cómo configurar un servidor DNS para que responda una cosa a la lan y otra distinta a internet

Voy a pasaros las configuraciones que a mi me funcionan con BIND9 en Ubuntu 10.04 LTS.
Parto de un DNS master y un DNS slave.
Caso midominio.es:
En el caso de preguntar desde redes internas deben responder con IPs internas cuando preguntan por midominio.es, además estos 2 DNS deben realizar forward, es decir, deben resolver cualquier nombre dns (Ej: www.google.com).
En el caso de preguntar desde redes externas deben responder con IPs externas cuando preguntan por midominio.es y no responder nada para el resto de dominios (por seguridad, así nadie en internet utilizará nuestros DNS en su configuración de red).

Hay que configurar 3 archivos en cada servidor, están en /etc/bind:
named.conf (Este es igual en el master y en el esclavo)

include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";

//Comentamos este include por que ahora va a depender de cada view en /etc/bind/named.conf.local
//include "/etc/bind/named.conf.default-zones";

named.conf.options (DNS master)

acl "dns_slaves" {
    192.168.3.102;                        # IPs de los servidores DNS esclavos
};

acl "lan_hosts" {
    127.0.0.1;                            # allow loop back
    192.168.1.0/24;                        # lan1
    192.168.2.0/24;                        # lan2
    192.168.3.0/24;                        # lan dns servers
    192.168.4.0/24;                        # lan4
};

options {
    directory "/var/cache/bind";
    forwarders {
        8.8.8.8;                        #DNS publico 1 de google
        8.8.4.4;                        #DNS publico 2 de google
        192.168.2.127;                    #DNS interno Active directory lan2
        192.168.1.127;                    #DNS interno Active directory lan1
        192.168.4.127;                    #DNS interno Active directory lan4
    };
    listen-on {            #IPs en las que este DNS escucha las peticiones
        192.168.3.101;
        127.0.0.1;
    };
    auth-nxdomain no;                    #RFC1035
    allow-query { any; };                # permitir que cualquiera haga peticiones
    allow-recursion { lan_hosts; };        # permitir recursion dns
    allow-query-cache { lan_hosts; };    # permitir hacer uso del DNS cache para dominios no alojados en este DNS
    recursion no;                        # Deshabilitar decursion DNS a nivel general
    version "0";                        # Ocultar la version de este software
};

named.conf.options (DNS esclavo) (lo único que cambia es listen-on)


acl "dns_slaves" {
    192.168.3.102;                        # IPs de los servidores DNS esclavos
};

acl "lan_hosts" {
    127.0.0.1;                            # allow loop back
    192.168.1.0/24;                        # lan1
    192.168.2.0/24;                        # lan2
    192.168.3.0/24;                        # lan dns servers
    192.168.4.0/24;                        # lan4
};

options {
    directory "/var/cache/bind";
    forwarders {
        8.8.8.8;                        #DNS publico 1 de google
        8.8.4.4;                        #DNS publico 2 de google
        192.168.2.127;                    #DNS interno Active directory lan2
        192.168.1.127;                    #DNS interno Active directory lan1
        192.168.4.127;                    #DNS interno Active directory lan4
    };
    listen-on {            #IPs en las que este DNS escucha las peticiones
        192.168.3.102;
        127.0.0.1;
    };
    auth-nxdomain no;                    #RFC1035
    allow-query { any; };                # permitir que cualquiera haga peticiones
    allow-recursion { lan_hosts; };        # permitir recursion dns
    allow-query-cache { lan_hosts; };    # permitir hacer uso del DNS cache para dominios no alojados en este DNS
    recursion no;                        # Deshabilitar decursion DNS a nivel general
    version "0";                        # Ocultar la version de este software
};


named.conf.local (DNS master) Aquí es donde realmente son diferentes el master del esclavo

view "internal" {
        match-clients { lan_hosts; };            # Esta vista es para los equipos de la acl lan_hosts
        recursion yes;                            # Permitir consultas recursivas
        notify no;                                # Deshabilitar notificaciones AA

        // prime the server with knowledge of the root servers
        zone "." {
                type hint;
                file "/etc/bind/db.root";
        };
        // Ser autorizado para zona localhost, forward y zonas inversas, y para
        // zonas broadcast asi como para RFC 1912
        zone "localhost" {
                type master;
                file "/etc/bind/db.local";
        };
        zone "127.in-addr.arpa" {
                type master;
                file "/etc/bind/db.127";
        };
        zone "0.in-addr.arpa" {
                type master;
                file "/etc/bind/db.0";
        };
        zone "255.in-addr.arpa" {
                type master;
                file "/etc/bind/db.255";
        };
       
        //Configuracion de los dominios mantenidos en este DNS master (vista interna)
        zone "midominio.es" {
                type master;
                file "/etc/bind/internal/db.midominio.es";
        };
       
};

view "external" {
        match-clients { any; };                        # Esta vista es para el resto de equipos que no estén en la view internal
        recursion no;                                # deshabilitar consultas DNS recursivas
        allow-transfer { dns_slaves; };                    #Permitr a los equipos de la acl "dns_slaves" transferecias de zona
       
        //Configuracion de los dominios mantenidos en este DNS master (vista externa)
        zone "midominio.es" {
                type master;
                file "/etc/bind/external/db.midominio.es";
        };
};

named.conf.local (DNS esclavo) Aquí es donde realmente son diferentes el master del esclavo

view "internal" {
        match-clients { lan_hosts; };            # Esta vista es para los equipos de la acl lan_hosts
        recursion yes;                            # Permitir consultas recursivas
        notify no;                                # Deshabilitar notificaciones AA

        // prime the server with knowledge of the root servers
        zone "." {
                type hint;
                file "/etc/bind/db.root";
        };
        // Ser autorizado para zona localhost, forward y zonas inversas, y para
        // zonas broadcast asi como para RFC 1912
        zone "localhost" {
                type master;
                file "/etc/bind/db.local";
        };
        zone "127.in-addr.arpa" {
                type master;
                file "/etc/bind/db.127";
        };
        zone "0.in-addr.arpa" {
                type master;
                file "/etc/bind/db.0";
        };
        zone "255.in-addr.arpa" {
                type master;
                file "/etc/bind/db.255";
        };

        //Configuracion de los dominios para los que este servidor es esclavo
        zone "midominio.es" {
                type slave;
                masters { 192.168.3.101; };
                file "db-int.midominio.es";
        };
};

view "external" {
        match-clients { any; };                        # Esta vista es para el resto de equipos que no estén en la view internal
        recursion no;                                # deshabilitar consultas DNS recursivas
       
        //Configuracion de los dominios para los que este servidor es esclavo
        zone "midominio.es" {
                type slave;
                masters { 192.168.3.101; };
                file "db-ext.midominio.es";
        };
};

Editado posteriormente:
En el DNS master existirán dos archivos, que definen la zona midominio.es


/etc/bind/external/db.midominio.es
$TTL    604800
@    IN    SOA    midominio.es. dnsmaster.midominio.es. (
        12345678    ; Serial
        3600        ; Refresh
        600        ; Retry
        43200        ; Expire
        60 )    ; Negative Cache TTL
;
@    IN    NS    dns1.midominio.es.
@    IN    NS    dns2.midominio.es.
@    IN    MX    5    smtp1.midominio.es.
@    IN    MX    10    smtp2.midominio.es.
@    IN    TXT    "v=spf1 +mx +ptr -all"
@    IN    A    1.1.1.1
dns1    IN    A    1.1.1.1
dns2    IN    A    1.1.1.2
www    IN    A    1.1.1.1
ftp    IN    CNAME    www.midominio.es.
smtp1    IN    A    1.1.1.1
smtp2    IN    A    1.1.1.2

/etc/bind/internal/db.midominio.es

$TTL    604800
@    IN    SOA    midominio.es. dnsmaster.midominio.es. (
        12345678    ; Serial
        3600        ; Refresh
        600        ; Retry
        43200        ; Expire
        60 )    ; Negative Cache TTL
;
@    IN    NS    dns1.midominio.es.
@    IN    NS    dns2.midominio.es.
@    IN    MX    5    smtp1.midominio.es.
@    IN    MX    10    smtp2.midominio.es.
@    IN    TXT    "v=spf1 +mx +ptr -all"
@    IN    A    192.168.3.103
dns1    IN    A    192.168.3.101
dns2    IN    A    192.168.3.102
www    IN    A    192.168.3.103
ftp    IN    CNAME    www.midominio.es.
smtp1    IN    A    192.168.3.38
smtp2    IN    A    192.168.3.38