en el artículo anterior de esta serie de dos partes, Introducción al DNS (Domain Name System), describí cómo se estructura la base de datos DNS y cómo configurar los servicios de nombres en un cliente. También enumeré y describí algunos de los registros DNS más comunes que es probable que encuentre al construir un servidor de nombres o simplemente intentar interpretar los resultados de un comando dig.

en este artículo, te muestro cómo construir tu propio servidor de nombres usando BIND (Berkeley Internet Name Domain)., No es tan difícil como podrías pensar, especialmente porque puedes hacerlo en dos etapas.

en este artículo, comenzará aprendiendo cómo crear un servidor de nombres de almacenamiento en caché, luego continuará y aprenderá cómo actualizarlo a un servidor de nombres de dominio primario (maestro) completo para su red, completo con archivos de zona hacia adelante y hacia atrás.

configurar un servidor DNS usando BIND

configurar un servidor de nombres usando BIND es bastante sencillo, así que te mostraré cómo hacerlo en cualquier computadora que puedas tener disponible para experimentar., Este pequeño proyecto de laboratorio le mostrará cómo instalar y configurar BIND en su computadora como un servidor de nombres de almacenamiento en caché, probarlo y luego configurarlo como un servidor de nombres primario con un archivo de zona que puede usar como un solucionador de nombres para su red o simplemente para probar.

configurar un servidor de nombres en cualquier computadora GNU/Linux que tenga disponible es técnicamente posible porque no interferirá con otros hosts en la red ni con su funcionamiento. Sin embargo, probablemente no debería hacer esto en un equipo que no sea de su propiedad o que no tenga derecho a modificar a menos que tenga permiso explícito para hacerlo.,

mi configuración

solo necesita un equipo para realizar todas las tareas menos una de este proyecto de laboratorio. Uso esta configuración en mi ThinkPad mucho más potente porque los servidores de nombres proporcionados por DHCP (Dynamic Host Configuration Protocol) cuando me conecto a redes no domésticas usando conexiones cableadas o inalámbricas a veces pueden ser poco confiables. Para mostrar que casi cualquier host puede funcionar bien como un servidor de nombres, he probado este proyecto en un antiguo netbook ASUS EeePC 900.,

voy a utilizar la dirección IP privada de mi ASUS para este proyecto, pero debe utilizar la dirección IP del host que está utilizando.

el archivo hosts

primero, echemos un vistazo al archivo /etc/hosts. En su estado predeterminado, solo debe haber dos líneas en el archivo hosts, las dos primeras líneas que se ven en el listado 1, a continuación.

Listado 1: puede mantener un archivo hosts simple para realizar la función de un solucionador en redes pequeñas.,

aunque puede agregar nombres de host y sus respectivas direcciones IP como se muestra en el listado 1, Esta no es una solución óptima para nombrar servicios, especialmente cuando viaja. Si hay otras entradas en el archivo hosts, puede que necesite comentario ellos durante la duración de este proyecto si interfieren con nombres o direcciones IP. La mayoría de ustedes no tendrá ninguna entrada aparte de las dos líneas predeterminadas.,

preparación

un servidor de nombres de almacenamiento en caché no puede reemplazar su uso de/etc / hosts para resolver nombres de host en la red interna; sin embargo, en comparación con el uso de un ISP u otro servidor de nombres público, un servidor de nombres de almacenamiento en caché puede mejorar el rendimiento al resolver nombres externos www.cnn.com. la mejor parte es que configurar un servidor de nombres en caché es bastante fácil.

antes de comenzar, debe prepararse realizando los siguientes pasos.

Primero, haga copias de seguridad de los archivos/etc /hosts,/etc / named.conf, resolv.conf, y/etc/sysconfig / iptables.,

Si aún no están instalados, utilice el gestor de paquetes de su distribución para instalar los siguientes RPMs de BIND: bind, bind-chroot y bind-utils. Para permitir que su host de laboratorio use el servidor de nombres de almacenamiento en caché, debe agregar una línea de servidor de nombres que apunte a su propio host en /etc / resolv.conf. Por ejemplo, si su dirección IP del host de laboratorio es 192.168.0.203, al igual que mi epc, agregue la siguiente línea a la parte superior de la lista de servidores de nombres en /etc/resolv.conf:

name server 192.168.0.203

asegúrese de utilizar la Dirección IP del host en el que está haciendo este proyecto.,

Puede utilizar la dirección IP de su localhost, 127.0.0.1 en lugar de la dirección IP externa. También debe comentar cualquier línea que apunte a otros hosts como servidores de nombres. Asegúrese de guardar la resolución revisada.archivo conf.

estos cambios entrarán en vigor inmediatamente y no se requiere reinicio o reinicio del servicio. Ahora intente hacer ping a un host público común que no bloquee los paquetes ICMP (Internet Control Message Protocol); siéntase libre de usar mi firewall, que es una Raspberry Pi.,

ping wally2.both.org

debe obtener un error de «host desconocido» o «nombre o servicio no conocido» porque actualmente no tiene definido un servicio o solucionador DNS que funcione en el resolv.archivo conf. Ahora use el comando dig para ver si name services está funcionando.

dig wally2.both.com

debería aparecer el error, «Tiempo de espera de conexión; no se pudo llegar a ningún servidor.»

configurar un servidor de nombres de almacenamiento en caché

un servidor de nombres de almacenamiento en caché no es una fuente autorizada para ningún dominio., Simplemente almacena en caché los resultados de todas las solicitudes de resolución de nombres de la red que sirve para acelerar las respuestas a futuras solicitudes para el mismo host remoto.

Nota: El nombre.conf file es muy particular sobre la sintaxis y especialmente la puntuación. El punto y coma se usa para delinear el final de una entrada y el final de una estrofa, así como el final de una línea. Asegúrese de agregarlos correctamente como se muestra en las muestras.

para la configuración inicial del servidor de nombres de almacenamiento en caché haciendo un par de modificaciones al /etc/named predeterminado.el archivo conf es necesario, así que edite ese archivo usando su editor favorito., Primero, agregue la dirección IP de su host de prueba local a la línea» listen-on port 53 » como se muestra en el listado 2, a continuación. Esto permite que named escuche en la dirección IP externa de su host, de modo que otros equipos también puedan usarlo como servidor de nombres.

de forma predeterminada, BIND se refiere a los servidores de nombres raíz de Internet para localizar los servidores de nombres autoritativos de un dominio. Es posible especificar otros servidores que se llaman «Reenviadores» a los que la instancia local de BIND enviará solicitudes en lugar de los servidores raíz. Esto aumenta la posibilidad de secuestro de DNS.,

agregue una línea «forwarders» como se muestra a continuación. Esto le indica a su servidor DNS de almacenamiento en caché dónde obtener direcciones IP cuando aún no están almacenadas en caché localmente. Las direcciones IP en la lista a continuación son para los servidores DNS públicos de Google que podría usar su ISP local u OpenDNS o algún otro servidor de nombres públicos como su reenviador. No es necesario definir ningún reenviador y, en ese caso, BIND usaría los servidores raíz de Internet definidos en el archivo / var/named / named.ca para localizar los servidores de nombres autoritativos para dominios si no se definen reenviadores., Pero para este ejercicio, por favor defina los transitarios como lo he hecho en la lista 2.

comenta la línea IPV6 porque no estamos usando IPV6 en el entorno de laboratorio. Tenga en cuenta que las dos barras inclinadas «//» denotan comentarios en named.archivo conf.

listado 2: el/etc / named.el archivo conf proporciona la configuración simple necesaria para configurar un servidor de nombres de almacenamiento en caché. Las líneas que necesitan ser agregadas o cambiadas están resaltadas en negrita.

agregue la dirección de red local, 192.168.0.0 / 24, a la línea allow-query., Esta línea especifica las redes desde las que este servidor DNS aceptará las consultas DNS.

inicie el servicio de nombre

ahora inicie el servicio con nombre y configure el servicio con nombre para que se inicie en cada arranque. Yo uso el comando systemctl en mi host Fedora 25, pero el comando puede ser diferente en su host, dependiendo de la distribución que esté usando. Tenga en cuenta que el nombre del servicio de resolución BIND se denomina.,

systemctl enable named
systemctl start named

la primera prueba que puede realizar para asegurarse de que su servidor de nombres de almacenamiento en caché está funcionando es usar dig para localizar la información de la base de datos DNS para wally2.both.org. para probar aún más su servidor de nombres de almacenamiento en caché, use el comando dig para obtener la dirección IP de algunos sitios web comunes, como www.opensource.com, CNN, Wired, y cualquier otro que te guste. Los resultados ahora deben mostrar su host como el servidor que responde.,

en este punto, su servidor de nombres de almacenamiento en caché resolverá correctamente los hosts en Internet y eso se debe a que las solicitudes de DNS para hosts públicos se reenvían a los servidores de nombres públicos de Google, consulte la línea «reenviadores» en named.conf. Sin embargo, sigue dependiendo del archivo /etc/hosts para los servicios de nombres internos. Crear un servidor de nombres primario puede resolver ese problema.

crear un servidor de nombres primario

Una vez que cree un servidor de nombres de almacenamiento en caché, convertirlo en un servidor de nombres primario completo no es demasiado difícil., Un servidor de nombres primario es la fuente autorizada para el dominio que representa.

necesitas cambiar el nombre.conf de nuevo y crear un par de archivos nuevos. Crearás un dominio llamado Example.com, que es un nombre de dominio reservado para fines de ejemplo en documentos como este. Las Example.com domain tiene una dirección IP en Internet y un sitio web muy escaso, pero puede usar el nombre en el resto de su proyecto de laboratorio sin causar problemas a nadie. Usarás el Example.com dominio como nombre de dominio interno para el resto de este ejercicio.,

los dos archivos nuevos que crearás son los archivos de zona hacia adelante y hacia atrás, que colocarás en el directorio /var/named. Esta ubicación es especificada por la directiva» directory » en named.archivo de configuración conf.

crear el archivo de zona forward

el archivo de zona forward contiene registros «A» que emparejan los nombres de los hosts en la zona, también conocido como dominio, con sus respectivas direcciones IP. También puede contener registros CNAME, que son alias para los nombres de host reales en los registros A, y registros MX para servidores de correo.

crear un archivo de zona directa básico, / var/named / example.com.,zona, y añadir las siguientes líneas a la misma. Su archivo de zona debe verse como el archivo de zona de ejemplo en el listado 3, a continuación, cuando haya terminado.

; Authoritative data for example.com zone
;
$TTL 1D
@ IN SOA epc.example.com root.epc.example.com. (
2017031301 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
$ORIGIN example.com.
example.com. IN NS epc.example.com.
epc IN A 127.0.0.1
server IN A 192.168.25.1
www IN CNAME server
mail IN CNAME server
test1 IN A 192.168.25.21
t1 IN CNAME test1
test2 IN A 192.168.25.22
test3 IN A 192.168.25.23
test4 IN A 192.168.25.24
; Mail server MX record
example.com. IN MX 10 mail.example.com.

Listing 3: el archivo de zona de reenvío para el Example.com domain contiene los nombres de host y sus direcciones IP para este dominio.

la primera línea Sin comentarios en el listado 3 es el especificador Time To Live, que en este caso es un día para todos los registros que no se especifican de otra manera. D significa día. Los especificadores en la línea SOA (inicio de Autoridad) son igualmente obvios., Los detalles de los parámetros en el registro SOA se describen con cierto detalle aquí.

el registro NS debe tener el FQDN (nombre de dominio completo) del host en el que está realizando este proyecto de laboratorio. También debe haber un registro A en el archivo con una dirección IP válida para el host. En este caso, debe utilizar la dirección IP localhost de 127.0.0.1.

las entradas mostradas arriba le darán algunos nombres de host con los que experimentar.

asegúrese de usar la fecha de hoy y agregar un contador que comience en 01 para el número de serie. El número de serie anterior es el primer cambio del 4 de marzo de 2017., El número de serie se incrementa cada vez que se cambia el archivo de zona. Si hubiera servidores de nombres secundarios que usaran este para un primario, no se actualizarían a menos que se incremente el número de serie.

agregue los archivos de zona de reenvío a named.conf

antes de que su servidor DNS funcione, sin embargo, necesita crear una entrada en /etc/named.conf que apuntará a su nuevo archivo de zona. Agregue las siguientes líneas debajo de la entrada para la zona de sugerencias de nivel superior, pero antes de las líneas «incluir».

zone "example.com" IN {
type master;
file "example.com.zone";
};

Listing 4: Agregue estas líneas a named.archivo conf para añadir el ejemplo.,archivo de zona com a la configuración del solucionador.

ahora reinicia named para que estos cambios surtan efecto. Pruebe su servidor de nombres utilizando los comandos dig y nsloookup para obtener las direcciones IP de los hosts que ha configurado en el archivo de zona de reenvío. Tenga en cuenta que el host no tiene que existir en la red para que los comandos dig y nslookup devuelvan una dirección IP.

tenga en cuenta que el uso del FQDN para estos comandos es necesario, excepto para el comando nslookup, siempre y cuando el dominio y las entradas de búsqueda de Example.com se proporcionan en/etc / resolv.archivo conf., En este caso, probablemente no lo son, así que simplemente use los FQDNs para todas las pruebas en este proyecto.

usando los servidores de nombres raíz

observe que los servidores de nombres raíz se dan como los servidores autoritativos para Amazon.com buscar. Pero recuerde que está utilizando los servidores de nombres públicos de Google como reenviadores. Ahora comenta la línea de forwarders en named.conf y reiniciar named. Ejecute los comandos anteriores de nuevo para comparar los resultados que se devuelven. Los resultados deben ser similares a los de abajo en la lista 5.

listado 5: los resultados de una búsqueda en www.Amazon.,com tiene alguna información interesante, incluyendo tiempos para vivir para los diversos tipos de Registros.

Cuando hice esto, la primera llamada para resolver la dirección externa de Amazon tomó 3857ms mientras se localizaban y devolvían los datos. Los resultados posteriores para realizar la misma consulta fueron 1ms, lo que muestra la ventaja de almacenar en caché los resultados del solucionador localmente. Observe los números 1800, 300 y 60 en las líneas de la sección de respuesta y 1831 en las líneas de la sección de autoridad—estos son TTL (tiempos de vida) en segundos., Si realiza la búsqueda varias veces, estos números cambiarán, mostrando la cantidad de tiempo que los registros tienen restante para vivir en la caché local.

crear el archivo de zona inversa

una zona inversa para su dominio proporcionará la capacidad de hacer búsquedas inversas. Muchas organizaciones no lo hacen internamente, pero las búsquedas inversas pueden ser útiles para determinar el problema. Muchas configuraciones de lucha contra el spam, como SpamAssassin, buscan búsquedas inversas para verificar servidores de correo electrónico válidos.

cree el archivo de zona inversa, / var / named / example. com. rev y agregue los siguientes contenidos., Asegúrese de usar un número de serie apropiado.

; Authoritative data for example.com reverse zone
;
$TTL 1D
@ IN SOA test1.example.com root.test1.example.com. (
2017031501 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS epc.example.com.
example.com. IN NS epc.example.com.
1 IN PTR mail.example.com.
1 IN PTR server.example.com.
21 IN PTR test1.example.com.
22 IN PTR test2.example.com.
23 IN PTR test3.example.com.
24 IN PTR test4.example.com.

Listado 6: Utilice este archivo de zona inversa, por ejemplo.com.rev, para su servidor de nombre.

También puede nombrar su archivo de zona inversa / var / named / 25.168.192.in-addr.arpa, que sigue convenciones anteriores. En realidad se puede nombrar lo que quieras porque se apunta explícitamente en el named.Conf, pero usando una de las dos convenciones hará que sea más fácil para otros seguir su trabajo.

agregue la zona inversa a named.conf:

zone "25.168.192.in-addr.arpa" IN {
type master;
file "example.com.rev";
};

Listing 7: Agregar esta estrofa a named.,el archivo conf habilita búsquedas inversas.

agregue la estrofa en el listado 7 al /etc / named.archivo conf para apuntar a la nueva zona inversa. Ahora recarga named y prueba tu zona inversa usando los comandos en Listing 8. Sus resultados deben ser similares a los de abajo.

Listing 8: Después de reiniciar named, debería ver resultados similares a estos cuando realiza una búsqueda inversa en una dirección IP en la zona inversa.

asegúrese de probar algunas de las otras entradas inversas en su red y también pruebe lo siguiente, así como otras búsquedas inversas con las que desea experimentar., La opción-x significa búsqueda inversa.

dig -x 192.168.25.23
dig -x 192.168.25.1

tenga en cuenta que no todos los hosts que tienen entradas en la zona forward necesitan tener entradas en la zona reverse, pero esto hace que los resultados sean más consistentes si lo hacen.

en este punto, tiene un servidor de nombres que funciona usando BIND. Sin embargo, los hosts externos aún no pueden usar este servidor de nombres porque el firewall aún no debe configurarse para permitir las solicitudes DNS.

configurar IPTables para DNS

puede realizar este paso si desea que otros hosts de su red local utilicen su host como su servidor de nombres.,

el firewall de su host de prueba probablemente bloquea el acceso a su host para servicios de nombres. IPTables debe estar configurado para permitir la entrada de paquetes UDP (User Datagram Protocol) en su servidor de nombres para que otros hosts lo usen para la resolución de nombres. Utilice los siguientes comandos para agregar las entradas necesarias y guardarlas.

agregue una regla a su cortafuegos IPTables o firewalld que permita paquetes entrantes en el puerto 53 (dominio) para UDP y guarde el nuevo conjunto de reglas., Asegúrese de insertar la nueva regla después de la línea-A INPUT-m state RELATED state RELATED,ESTABLISHED-j ACCEPT, por lo que tendrá que contar el número de líneas de entrada en la tabla filter para hacer eso. El número 7 en el siguiente comando significa que esta regla se insertará en la posición número 7 en las reglas de entrada existentes.

iptables -t filter -I INPUT 7 -p udp -m conntrack --ctstate NEW -m udp --dport 53 -j ACCEPT

Puede guardar sus nuevas reglas de firewall si lo desea, y lo haría si esto fuera una instalación permanente y no un proyecto de laboratorio. Luego prueba esto desde uno de tus otros hosts usando el comando en Listing 9, abajo., El argumento @ epc le dice al comando dig que use el servidor de nombres especificado con el nombre de host epc. Debe sustituir la dirección IP del servidor DNS que acaba de crear o un nombre de host resoluble en su red que apunte a su nuevo servidor de nombres. Por supuesto, siempre puede agregar ese nombre de host con su dirección IP al archivo/etc / hosts del host que está utilizando para la prueba remota.

Listing 9: probar el solucionador de nombres que ha creado desde un host diferente en la misma red.,

Cleanup

para la limpieza, debe realizar las siguientes tareas utilizando las herramientas adecuadas para su distribución. Es posible que desee mantener este servidor de nombres para su red si aún no tiene uno.

  1. restaurar el archivo /etc/hosts original.
  2. Stop nombrado en el host de resolución utilizado para este proyecto de lab.
  3. desactivar el servicio con nombre.
  4. eliminar los archivos de zona.
  5. restaurar el nombre original.archivo conf.
  6. restaurar la resolución original.archivo conf.,

Pensamientos finales

el funcionamiento de los servicios de nombres me parecía muy oscuro hasta que realmente creé un servidor de nombres para mi red usando BIND. Es bastante sencillo y puede mejorar el rendimiento de búsqueda de DNS. Tener su propio servidor de nombres también puede evitar muchas de las interrupciones del servicio de nombres relativamente menores pero molestas causadas por servidores de nombres ISP mal mantenidos.

tenga en cuenta que, a pesar de que mi pequeño EeePC se ejecuta con un uso de CPU del 100% para Seti@Home, responde extremadamente rápido a las solicitudes de resolución., Debería poder probar este proyecto en cualquier host Linux que tenga disponible con un impacto minúsculo. Espero que muchos de ustedes intenten configurar su propio servidor de nombres y experimenten con él. Los detalles de la instalación de su servidor de nombres dependerán de los detalles de su host y red.