guifi.net

DNS. DNSMasq y PowerDNS.

Instalación de servicios en guifi.net bajo plataforma GNU/Linux.

Apreta la tecla para avanzar.

DNS

Domain Name System.

Pulsa para continuar.

Introducción

El DNS es probablemente el servicio más infravalorado de Internet, ya que es absolutamente necesario para que todo funcione de la manera que lo conocemos, pero nadie tiene muy claro cómo funciona. Veamos un resumen de sus características.

  • Se encarga de asociar nombres a IP's: www.google.es -> 209.85.148.147.
  • Conceptualmente simple.
  • Complejidad técnica importante, según lo que queramos hacer.
Arquitectura del DNS
  • Arquitectura jerárquica y distribuida.
  • Sistema de caché definido en el propio RFC.
  • La organización ICANN regula los registradores de dominio.
  • Los registradores de dominio nos gestionan el alta de nuevos dominios.
  • Si damos de alta un dominio, nosotros somos los encargados de que la zona funcione bien.
  • Tipos de registro: NS, A, CNAME.
Tipos de servidores DNS
  • DNS forwarder.
  • DNS recursor.
  • DNS cache.
  • Primary DNS.
  • Secondary DNS.
Implementaciones: DNSMasq
  • DNS forwarder.
  • Muy sencillo, funciona sin configuración.
  • Delega la resolución a otro servidor.

La instalación y puesta en marcha es muy sencilla.

        # apt-get install dnsmasq
        

Quien realmente resolverá las consultas es el DNS que tengamos configurado en /etc/resolv.conf

        # cat /etc/resolv.conf
        nameserver 150.128.98.10
        
Implementaciones: BIND
  • Implementación más utilizada de servidor DNS.
  • Desarrollada desde 1988.
  • Puede actuar como DNS: recursivo, cache, primario y secundario.
  • La última versión permite compilar el software y utilizar diferentes backends.
  • Ventajas: Muy extendido.
  • Handicap: gigante con pies de barro, complejo.
Implementaciones: PowerDNS
  • Implementación más moderna de un servidor DNS.
  • Modular.
  • Diferentes tipos de Backends: mysql, oracle, ldap, texto, odbc, geo, berkeleydb, etc.
  • Fácil de montar en su version recursiva.
  • Mucho más fácil de montar que Bind en su versión completa.
pdns-recursor
  • Es una implementación completa de servidor DNS recursivo y caché
  • Muy sencillo de instalar.
        # apt-get install pdns-recursor
        

Nuestro servidor local ya responde por sí mismo a las consultas DNS:

        $ host www.google.es localhost
        www.google.es is an alias for www.google.com.
        www.google.com is an alias for www.l.google.com.
        www.l.google.com has address 74.125.39.104
        ...
        www.l.google.com has address 74.125.39.106
        www.l.google.com has address 74.125.39.105
        
Implementaciones: PowerDNS

Si alguna vez queremos servir nuestro propio dominio de una manera más personaliza que la que nos ofrecen los hostings gratuitos, deberemos hacer funcionar PowerDNS en modo DNS primario.

  • Los datos de la zona los podemos almacenar en una base de datos MySQL.
  • Gestionar una zona es complicado, si podemos evitarlo nos libraremos de muchos problemas.
Ejemplo de uso: Integración con la web

En castello.guifi.net gestionamos la zona nosotros con PowerDNS, lo que nos da la posibilidad de permitir que los usuarios añadan sus propios registros a la zona DNS.

  • Cada usuario gestiona sólo sus registros.
  • Automáticamente se actualiza la zona con la nueva información
  • Simplemente es añadir/quitar un registro a la base de datos MySQL.
Herramientas de diagnóstico

Veamos qué herramientas tenemos a nuestra disposición para diagnosticar un problema de DNS.

  • Recordemos: el DNS está especificado en /etc/resolv.conf.
  • Ante un problema disponemos de las siguientes herramientas: nslookup, dig, host y dnstracer.
  • Un problema de DNS puede ser difícil de diagnosticar. Debemos averiguar cuál es el DNS que falla: el directamente conectado, el intermedio, la raiz, el del dominio que consultamos, etc.
DIG&HOST
  • Herramientas muy completas de consulta de DNS.
  • Dig es un poco liosa al principio, muy útil cuando la entiendes.
	$ dig @server hostname type
	# server: dirección IP del servidor al que queremos consultar
	# hostname: registro que queremos consultar
	# type: tipo de registro que queremos consultar (A, CNAME, NS)

	$ host -t type hostname server
	# server: dirección IP del servidor al que queremos consultar
	# hostname: registro que queremos consultar
	# type: tipo de registro que queremos consultar (A, CNAME, NS)
        
DIG&HOST
  • Host es una herramienta mucho más sencilla y fácil, también más simple. Muy parecida a nslookup.
	dave@casa:~$ host castello.guifi.net
	castello.guifi.net has address 150.128.97.38

	dave@casa:~$ host -t NS guifi.net 150.128.98.10
	guifi.net name server ns1.guifi.net.
	guifi.net name server ns2.guifi.net.
        
DNSTRACER
  • Esta utilidad vendría a ser una especie de traceroute para DNS.
  • Nos muestra en árbol cómo se realiza la solicitud de consulta de un registro.
	dave@haddock:~$ dnstracer -c -4 -s "." www.rediris.es
	Tracing to www.rediris.es[a] via A.ROOT-SERVERS.NET, maximum of 3 retries
	A.ROOT-SERVERS.NET [.] (198.41.0.4) 
 	|\___ ns15.communitydns.net [es] (194.0.1.15) Got authoritative answer 
 	|\___ ns1.cesca.es [es] (84.88.0.3) 
 	|     |\___ chico.rediris.es [rediris.es] (130.206.1.3) Got authoritative answer 
 	|     |\___ sun.rediris.es [rediris.es] (130.206.1.2) Got authoritative answer 
 	|     |\___ ns02.fccn.pt [rediris.es] (193.136.2.228) Got authoritative answer 
 	|     |\___ ns15.communitydns.net [rediris.es] (194.0.1.15) Got authoritative answer 
 	|      \___ scsnms.switch.ch [rediris.es] (130.59.1.30) Got authoritative answer 
 	|      \___ scsnms.switch.ch [rediris.es] (130.59.10.30) Got authoritative answer 
 	|\___ f.nic.es [es] (130.206.1.2) Got authoritative answer 
 	|\___ a.nic.es [es] (194.69.254.1) 
 	|     |\___ ns15.communitydns.net [rediris.es] (194.0.1.15) Got authoritative answer 
 	|     |\___ ns02.fccn.pt [rediris.es] (193.136.2.228) Got authoritative answer 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.1.30) Got authoritative answer 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.10.30) Got authoritative answer 
 	|     |\___ chico.rediris.es [rediris.es] (130.206.1.3) Got authoritative answer 
 	|      \___ sun.rediris.es [rediris.es] (130.206.1.2) Got authoritative answer 
 	|\___ ns-ext.nic.cl [es] (200.1.123.14) 
 	|     |\___ ns15.communitydns.net [rediris.es] (194.0.1.15) Got authoritative answer 
 	|     |\___ chico.rediris.es [rediris.es] (130.206.1.3) Got authoritative answer 
 	|     |\___ sun.rediris.es [rediris.es] (130.206.1.2) Got authoritative answer 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.1.30) Got authoritative answer 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.10.30) Got authoritative answer 
 	|      \___ ns02.fccn.pt [rediris.es] (193.136.2.228) Got authoritative answer 
 	|\___ sns-pb.isc.org [es] (192.5.4.1) 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.1.30) Got authoritative answer 
 	|     |\___ scsnms.switch.ch [rediris.es] (130.59.10.30) Got authoritative answer 
 	|     |\___ ns02.fccn.pt [rediris.es] (193.136.2.228) Got authoritative answer 
 	|     |\___ ns15.communitydns.net [rediris.es] (194.0.1.15) Got authoritative answer 
 	|     |\___ chico.rediris.es [rediris.es] (130.206.1.3) Got authoritative answer 
 	|      \___ sun.rediris.es [rediris.es] (130.206.1.2) Got authoritative answer 
  	\___ ns3.nic.fr [es] (192.134.0.49) 
       		|\___ ns15.communitydns.net [rediris.es] (194.0.1.15) Got authoritative answer 
       		|\___ sun.rediris.es [rediris.es] (130.206.1.2) Got authoritative answer 
       		|\___ ns02.fccn.pt [rediris.es] (193.136.2.228) Got authoritative answer 
       		|\___ scsnms.switch.ch [rediris.es] (130.59.1.30) Got authoritative answer 
       		|\___ scsnms.switch.ch [rediris.es] (130.59.10.30) Got authoritative answer 
        	\___ chico.rediris.es [rediris.es] (130.206.1.3) Got authoritative answer 

	[...]