Configuración de vistas en el servidor DNS con Bind9

Índice

En un escenario formado por dos máquinas, en el que una de ellas contiene dos contenedores LXC, se configura un servidor DNS con diferentes vistas.

El servidor DNS se configura en uno de los contenedores alojados en la máquina que funciona como router del escenario. Para ello, en primer lugar se accede al conetenedor y se instala el servidor DNS Bind9.

apt install bind9

En el fichero /etc/bind/named.conf.options se configuran las opciones del servidor. En principio, se puede usar el parámetro allow-query para permitir consultas desde todas las redes del escenario y desactivar el sistema dnssec-validation.

dnssec-validation no;

allow-query {172.22.0.0/16; 192.168.0.0/24; 172.16.0.0/16; };

A continuación, se definen las zonas sobre las que el servidor DNS tiene dominio en el fichero /etc/bind/named.conf.local. Para ello se van a usar dos vistas diferentes según si la consulta al DNS llega desde la red intra (192.168.0.0/24) o desde la red DMZ (172.16.0.0/16).

view red_intra {
    match-clients { 192.168.0.0/24; };
    allow-recursion { any; };

        zone "javi.gonzalonazareno.org"
	{
		type master;
		file "db.javiintra.gonzalonazareno.org";
	};
	zone "0.168.192.in-addr.arpa"
	{
		type master;
		file "db.192.168.0";
	};
	zone "16.172.in-addr.arpa"
	{
		type master;
		file "db.172.16";
	};
	include "/etc/bind/zones.rfc1918";
	include "/etc/bind/named.conf.default-zones";
};

view red_DMZ {
    match-clients { 172.16.0.0/16; 127.0.0.1; };
    allow-recursion { any; };
	zone "javi.gonzalonazareno.org"
	{
		type master;
		file "db.javidmz.gonzalonazareno.org";
	};
	zone "0.168.192.in-addr.arpa"
	{
		type master;
		file "db.192.168.0";
	};
	zone "16.172.in-addr.arpa"
	{
		type master;
		file "db.172.16";
	};
	include "/etc/bind/zones.rfc1918";
    include "/etc/bind/named.conf.default-zones";
};

Además, hay que comentar las zonas que se han declarado en este fichero en los otros ficheros incluidos en él. Así, en el fichero /etc/bind/zones.frc1918 se comentan las siguientes líneas:

//zone "16.172.in-addr.arpa"  { type master; file "/etc/bind/db.empty"; };
//zone "168.192.in-addr.arpa" { type master; file "/etc/bind/db.empty"; };

Y en el fichero /etc/bind/named.conf se comenta la línea que incluye el fichero de zonas por defecto.

//include "/etc/bind/named.conf.default-zones";

Después, hay que rellenar los ficheros de de zona para las zonas declaradas previamente. Primero, se configura la zona javi.gonzalonazareno.org

cp /etc/bind/db.empty /var/cache/bind/db.javiintra.gonzalonazareno.org

En este fichero se configura la resolución directa de los nombres de las máquinas y servicios del escenario.

$TTL	86400
@	IN	SOA	nami.javi.gonzalonazareno.org. root.javi.gonzalonazareno.org. (
			      1		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			  86400 )	; Negative Cache TTL
;
@	IN	NS	nami.javi.gonzalonazareno.org.

$ORIGIN javi.gonzalonazareno.org.

nami			IN	A	192.168.0.2
sanji			IN	A	192.168.0.3
luffy			IN	A	192.168.0.1
zoro			IN	A	172.16.0.200
www			IN	CNAME	zoro
bd			IN	CNAME	sanji

A partir de este fichero de zona, se puede generar el fichero para la otra zona definida anteriormente.

cp /var/cache/bind/db.javiintra.gonzalonazareno.org /var/cache/bind/db.javidmz.gonzalonazareno.org

En este caso, sólo cambia la línea para la resolución de luffy, que es la única máquina del escenario que cuenta con dos direcciones IP diferentes.

luffy			IN	A	172.16.0.1

También hay que rellenar la información para los ficheros de resolución inversa. En este escenario hay dos redes y, por tanto, se usan dos ficheros de resolución inversa diferentes. Primero, se rellena el fichero para la resolución inversa de la red 192.168.0.0/24.

cp /etc/bind/db.empty /var/cache/bind/db.192.168.0

Con el siguiente contenido:

$TTL    86400
@       IN      SOA     nami.javi.gonzalonazareno.org. root.javi.gonzalonazaren>
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      nami.javi.gonzalonazareno.org.

$ORIGIN 0.168.192.in-addr.arpa.

1               IN      PTR     luffy.javi.gonzalonazareno.org.
2               IN      PTR     nami.javi.gonzalonazareno.org.
3               IN      PTR     sanji.javi.gonzalonazareno.org.

Después se repite la operación con el fichero para la zona 172.16.0.0/16.

cp /etc/bind/db.empty /var/cache/bind/db.172.16

Este fichero tiene el siguiente contenido:

$TTL    86400
@       IN      SOA     nami.javi.gonzalonazareno.org. root.javi.gonzalonazaren>
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      nami.javi.gonzalonazareno.org.

$ORIGIN 16.172.in-addr.arpa.

1.0               IN      PTR     luffy.javi.gonzalonazareno.org.
200.0             IN      PTR     zoro.javi.gonzalonazareno.org.

Configuración del DNS en los clientes

Para que el resto de máquinas de la red se refieran a nami como servidor DNS, hay que configurar su dirección como DNS por defecto en los clientes. En este escenario nami y sanji son contenedores Ubuntu, con un direccionamiento estático y que usan netplan para su configuración de red. Así, un ejemplo de configuración de una de estas máquinas contendo con nami como servidor DNS es el siguiente:

network:
  version: 2
  ethernets:
    eth0: 
      dhcp4: false
      addresses:
      - 192.168.0.3/24
      routes:
      - to: default
        via: 192.168.0.1
      mtu: 1442
      nameservers:
        addresses:
        - 192.168.0.2

En ambos contenedores se aplican los cambios.

netplan apply

La otra máquina del escenario, zoro usa el sistema operativo Rocky Linux 9. En esta distribución se establece la configuración de red a través de NetworkManager usando algunos de sus clientes para terminal, ya sea nmcli (línea de comandos) o nmtui (interfaz de texto). En este caso, usando nmtui se accede al menú edit connection y se edita la única conexión configurada en la máquina para añadir la IP de nami como DNS por defecto.

┌───────────────────────────┤ Edit Connection ├───────────────────────────┐
│                                                                        ↑│ 
│         Profile name Wired connection 1______________________          ▮│ 
│               Device eth0 (FA:16:3E:67:F3:1E)________________          ▒│ 
│                                                                        ▒│ 
│ ═ ETHERNET                                                    <Show>   ▒│ 
│ ═ 802.1X SECURITY                                             <Show>   ▒│ 
│                                                                        ▒│ 
│ ╤ IPv4 CONFIGURATION <Manual>                                 <Hide>   ▒│ 
│ │          Addresses 172.16.0.200/32__________ <Remove>                ▒│ 
│ │                    <Add...>                                          ▒│ 
│ │            Gateway 172.16.0.1_______________                         ▒│ 
│ │        DNS servers 192.168.0.4______________ <Remove>                ▒│
│ │                    <Add...>                                          ▒│ 
│ │     Search domains <Add...>                                          ▒│ 
│ │                                                                      ▒│ 
│ │            Routing (No custom routes) <Edit...>                      ▒│ 
│ │ [ ] Never use this network for default route                         ▒│ 
│ │ [ ] Ignore automatically obtained routes                             ▒│ 
│                                                                        ↓│ 
└─────────────────────────────────────────────────────────────────────────┘

Por último, luffy toma el servidor DNS por defecto de la configuración DHCP y, además, usa systemd para gestionar la configuración de red. Así, se puede configurar su servidor DNS modificando el contenido del fichero de configuración /etc/systemd/resolved.conf.

[Resolve]
DNS=192.168.0.2

Para aplicar el cambio, se reinicia el servicio.

sudo systemctl restart systemd-resolved.service

Configuración del parámetro search para poder usar los nombres cortos del escenario

Para poder usar los nombres cortos de las máquinas del escenario, se debe configurar en todos los clientes el nombre de dominio de las máquinas en el parámetro search en la configuración del DNS.

En los contenedores, tanto nami como sanji, este parámetro se puede configurar en el fichero de configuración de red /etc/netplan/10-lxc.yaml.

network:
  version: 2
  ethernets:
    eth0:
      dhcp4: false
      addresses:
      - 192.168.0.2/24
      routes:
      - to: default
        via: 192.168.0.1
      mtu: 1442
      nameservers:
        addresses:
        - 192.168.0.2
        search:
        - javi.gonzalonazareno.org

En el caso de zoro, con Rocky Linux 9, esta configuración se puede añadir a través de la interfaz de texto nmtui, desde la interfaz de la línea de comando nmcli o editando el menú de configuración de la conexión. En este caso, este fichero es /etc/NetworkManager/system-connections/Wired connection 1.nmconnection. En este fichero, la configuración de la conexión para IPv4 es la siguiente:

[ipv4]
address1=172.16.0.200/32,172.16.0.1
dns=192.168.0.2;
method=manual
dns-search=javi.gonzalonazareno.org

Por úlitmo, en la máquina luffy, que usa systemd, una opción para configurar la búsqueda de dominios es uasr usa el parámetro Domains en el fichero /etc/systemd/resolved.conf.

[Resolve]
DNS=192.168.0.2
Domains=javi.gonzalonazareno.org

Para aplicar el cambio, se reinicia el servicio.

sudo systemctl restart systemd-resolved.service

Configuración para acceder al servidor DNS desde el exterior

La máquina router de este escenario, luffy es la única que tiene una dirección IP accesible desde fuera de esta red. Para que se pueda usar el servidor DNS desde fuera de la red hay que configurar una regla DNAT en el router que redirija el tráfico del puerto 53 al DNS. También es necesario contar con una nueva vista que muestre sólo la información que debe ser accesible desde fuera de la red y oculte aquella que no debe ser pública.

Regla DNAT

En el router luffy una regla DNAT debe redirigir el tráfico que llegue al puerto 53 del router a la IP de nami.

iptables -t nat -A PREROUTING -p udp --dport 53 -i ens3 -j DNAT --to 192.168.0.2
iptables-save > /etc/iptables/rules.v4

Creación de una nueva vista

Para que el servidor DNS sólo muestre al exterior la información relevante para el acceso a la red a través de la IP pública, es decir, la IP de luffy y el alias del servicio www, hay que configurar una nueva vista en el servidor DNS. Esta vista se añade al fichero /etc/bind/named.conf.local.

view red_externa {
    match-clients { 172.22.0.0/16; };
    allow-recursion { any; };
        zone "javi.gonzalonazareno.org"
        {
                type master;
                file "db.javiexterna.gonzalonazareno.org";
        };
        include "/etc/bind/named.conf.default-zones";
};

En /var/cache/bind/ se rellena el fichero de zona.

$TTL    86400
@       IN      SOA     luffy.javi.gonzalonazareno.org. root.javi.gonzalonazare>
                              1         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                          86400 )       ; Negative Cache TTL
;
@       IN      NS      luffy.javi.gonzalonazareno.org.

$ORIGIN javi.gonzalonazareno.org.

luffy                   IN      A       172.22.201.28
www                     IN      CNAME   luffy

Configurar el DNS como forwarder

Para que desde dentro del escenario se puedan resolver direcciones de fuera, hay que configurar el servidor DNS como forwarder hacia el servidor DNS principal en la red, que tiene configurada la delegación de dominio a los subdominos del resto de compañeros. Esta configuración se aplica en el fichero /etc/bind/named.conf.options.

forwarders {
        172.22.0.1;
};
comments powered by Disqus

Relacionados

Túneles IPv6: túneles 6to4

En este post se muestra, a través de un ejemplo práctico, el funcionamiento de los túneles IPv6. Estos túneles permiten que el tráfico que va de una a otra dirección IPv6 pase por redes que funcionan usando el portocolo IPv4.

Leer

Configuración de un servidor SAN

En este post se muestran, a través de un caso práctico, algunos ejemplos de configuración de un servidor SAN.

Leer

Manejo y uso del comando mkisofs

En este post se muestrael funcionamiento de la herramienta mkisofs para crear sistemas de fichero de tipo ISO.

Leer