2014/02/06

ISC BIND (DNS)

Introduccion:

Instalar ISC BIND.

Requerimientos:

* FreeBSD instalado
* Conexion a Internet
* Leer este tutorial

El proceso:

Actualizar el arbol de ports

# portsnap update

Instalar el port de bind

# cd /usr/ports/dns/bind99
# make install clean

bind99-9.9.5
(dejo las opciones por defecto)
...
Installing bind99-9.9.5... done

Hacer que inicie con el equipo

# echo '# ISC BIND' >> /etc/rc.conf
# echo 'named_enable="YES"' >> /etc/rc.conf

Activar la tarjeta de red que va a nuestra LAN con la IP 192.168.1.1/24

# edit /etc/rc.conf

Agregamos la linea con los datos de nuestra segunda tarjeta de red

#Segunda tarjeta de red que va hacia la LAN
ifconfig_em1="inet 192.168.1.1 netmask 255.255.255.0"

Levantamos manualmente la segunda tarjeta sin reiniciar

# ifconfig em1 inet 192.168.1.1 netmask 255.255.255.0 up

Editar el archivo de configuracion de bind para crear nuestras zonas

# edit /usr/local/etc/namedb/named.conf

Ajustamos las lineas originales

...
        listen-on       { 127.0.0.1; };
...
        forwarders {
                127.0.0.1;
        };
...
zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
...

por

...
        listen-on       { 127.0.0.1; 192.168.1.1; };
...
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
...
//zone "example.com" { type master; file "/etc/namedb/master/empty.db"; };
...

Note que:
1) En listen-on se agrega la IP interna para que bind responda consultas que le hagan.
2) En forwarders quitamos la IP local y agregamos las de los DNS de Google.
3) Con doble slash (//) comentamos la linea zone "example.com"...

Al final del archivo agregamos nuestras zonas "zona" y "zona inversa"

...
zone "example.com" {
        type master;
        allow-update { none; };
        allow-transfer { localhost; 192.168.1.2; };
        file "/usr/local/etc/namedb/master/example.com";
};

zone "1.168.192.in-addr.arpa" {
        type master;
        allow-update { none; };
        allow-transfer { localhost; 192.168.1.2; };
        file "/usr/local/etc/namedb/master/1.168.192.in-addr.arpa";
};

Creamos el archivo de nuestra "zona"

# edit /usr/local/etc/namedb/master/example.com

$TTL 3600 ; 1 hour default TTL
example.com.                IN          SOA         freebsd.example.com.         admin.example.com.          (
                                            2013021701          ; Serial
                                            10800               ; Refresh (3 hours)
                                            3600                ; Retry (1 hour)
                                            604800              ; Expire (1 week)
                                            300         ; Negative Response TTL (5 minutes)
                                            )
; DNS Servers
                            IN          NS          freebsd.example.com.                 
; MX Records                                                                
                            ;IN         MX          10 mx.example.com.                  
                            ;IN         MX          20 mail.example.com.                
                            IN          A           192.168.1.1                         
; Machine Names                                                             
localhost                   IN          A           127.0.0.1                           
freebsd                      IN          A           192.168.1.1                         
; Aliases                                                                   

Creamos el archivo de nuestra "zona inversa"

# edit /usr/local/etc/namedb/master/1.168.192.in-addr.arpa

$TTL 3600 ; 1 hour default TTL
1.168.192.in-addr.arpa. IN          SOA         freebsd.example.com.         admin.example.com.          (
                                            2013021701          ; Serial
                                            10800               ; Refresh (3 hours)
                                            3600                ; Retry (1 hour)
                                            604800              ; Expire (1 week)
                                            300                 ; Negative Response TTL (5 minutes)
                                            )
; DNS Servers                                                               
                            IN          NS          freebsd.example.com.                 
; Machine IPs                                                               
1                           IN          PTR         freebsd.example.com.

Iniciamos bind

# /usr/local/etc/rc.d/named start

Hacer que nuestro FreeBSD use el bind

# edit /etc/resolv.conf

Comentamos las lineas "nameserver" y agregamos a bind, queda asi

search example.com
nameserver 2001:4860:4860::8888
nameserver 2001:4860:4860::8844
#nameserver 8.8.8.8
#nameserver 8.8.4.4
nameserver 127.0.0.1

Verificamos que bind esta funcionando

Prueba a un host local

# dig @192.168.1.1 freebsd.example.com

; <<>> DiG 9.9.5 <<>> @192.168.1.1 freebsd.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 36043
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;freebsd.example.com.         IN      A

;; ANSWER SECTION:
freebsd.example.com.  3600    IN      A       192.168.16.1

;; AUTHORITY SECTION:
freebsd.example.com.  3600    IN      NS      ns1.freebsd.example.com.
freebsd.example.com.  3600    IN      NS      ns2.freebsd.example.com.

;; ADDITIONAL SECTION:


;; Query time: 0 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Feb 06 13:40:35 COT 2014
;; MSG SIZE  rcvd: 118

Prueba a un host remoto

# dig @192.168.1.1 google.com

; <<>> DiG 9.9.5 <<>> @192.168.1.1 google.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48596
;; flags: qr rd ra; QUERY: 1, ANSWER: 16, AUTHORITY: 4, ADDITIONAL: 5

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;google.com.                    IN      A

;; ANSWER SECTION:
google.com.             300     IN      A       190.248.35.30
google.com.             300     IN      A       190.248.35.45
google.com.             300     IN      A       190.248.35.35
google.com.             300     IN      A       190.248.35.34
google.com.             300     IN      A       190.248.35.24
google.com.             300     IN      A       190.248.35.49
google.com.             300     IN      A       190.248.35.54
google.com.             300     IN      A       190.248.35.40
google.com.             300     IN      A       190.248.35.25
google.com.             300     IN      A       190.248.35.50
google.com.             300     IN      A       190.248.35.59
google.com.             300     IN      A       190.248.35.20
google.com.             300     IN      A       190.248.35.55
google.com.             300     IN      A       190.248.35.44
google.com.             300     IN      A       190.248.35.39
google.com.             300     IN      A       190.248.35.29

;; AUTHORITY SECTION:
google.com.             172742  IN      NS      ns4.google.com.
google.com.             172742  IN      NS      ns1.google.com.
google.com.             172742  IN      NS      ns3.google.com.
google.com.             172742  IN      NS      ns2.google.com.

;; ADDITIONAL SECTION:
ns1.google.com.         172742  IN      A       216.239.32.10
ns2.google.com.         172742  IN      A       216.239.34.10
ns3.google.com.         172742  IN      A       216.239.36.10
ns4.google.com.         172742  IN      A       216.239.38.10

;; Query time: 59 msec
;; SERVER: 192.168.1.1#53(192.168.1.1)
;; WHEN: Thu Feb 06 13:34:11 COT 2014
;; MSG SIZE  rcvd: 431

---------------------------------------------------------------------------------------------------------
Para un bind (slave) que funcione como respaldo del primer bind (master)...

Todo se hace de forma muy similar, pero hay algunos cambios

En named.conf (slave), las zonas al final del archivo quedan asi (vea que en lugar de la carpeta master, quedan en slave) y con la linea masters se especifica la IP del primer bind (master)

...
zone "example.com" {
        type slave;
        file "/usr/local/etc/namedb/slave/example.com";
        masters { 192.168.1.1; };
};

zone "1.168.192.in-addr.arpa" {
        type slave;
        file "/usr/local/etc/namedb/slave/1.168.192.in-addr.arpa";
        masters { 192.168.1.1; };
};

Los archivos "zona" y "zona inversa" no hay que crearlos ya que se importan automaticamente del primer bind (master).

Luego de iniciar bind (slave), los archivos seran transferidos desde el primer bind (master) como por arte de magia

# ls /usr/local/etc/namedb/slave
1.168.192.in-addr.arpa
example.com
---------------------------------------------------------------------------------------------------------