Академический Документы
Профессиональный Документы
Культура Документы
• Max de Mendizábal
• 24 de noviembre de 2008
El servidor de nombres
(DNS)
• El servidor de nombres establece una
relación entre nombres de
máquinas y direcciones IP
• También desempeña un importante
papel en el enrutamiento del correo
electrónico (ahí se definen los
intercambiadores de correo)
• Es una base de datos distribuida en
la que cada sitio almacena
información sobre sus propias
DNS
• Es un espacio de nombres jerárquico para
hosts y direcciones IP
• Una tabla de hosts implementada como una
base de datos distribuida
• Un resolvedor y una serie de bibliotecas que
hacen preguntas a la base de datos
• Un enrutamiento mejorado para el e-mail
• Un mecanismo para encontrar servicios en
una red
• Un protocolo para intercambiar información
de nombres
DNS
• El pedazo de base de datos que uno
mantiene consiste en uno o dos
archivos de texto que contienen los
registros para cada uno de los
hosts, por ejemplo
servidor IN A 192.168.10.1
IN MX 10 correo.cch.unam.mx.
y
1
IN PTR servidor.cch.unam.mx.
DNS
• El DNS es un sistema cliente /
servidor
• Los servidores (servidores de
nombres) cargan la información de
los archivos de DNS en la memoria
y las utilizan para responder
preguntas tanto de los clientes
externos como internos
• Todas las máquinas de la red
deberían ser clientes del DNS
DNS
• Para las organizaciones pequeñas,
basta utilizar un solo servidor de
nombres
• Una organización mediana con varias
subredes pueden utilizar varios
DNS para reducir la latencia de las
consultas y mejorar la fiabilidad
• Un sitio muy grande puede dividir un
dominio en varios subdominios y
tener varios servidores por cada
dominio
El espacio de nombres del
DNS
• El espacio de nombres del DNS es un
árbol de dominios
• Cada dominio representa una porción
distinta del espacio de nombres y
es manejada por una sola entidad
administrativa
• La raíz del árbol se llama punto “.”,
bajo él están los dominios de alto
nivel (top level domains)
El espacio de nombres del
DNS
• Una rama hace el mapeo entre
nombres de host y direcciones IP y
una segunda rama hace el mapeo
entre una dirección IP y el nombre del
host
• La primera rama se llama mapeo hacia
adelante y los archivos asociados de
BIND se llaman los archivos de zona
hacia adelante (forward zone files)
• La segunda rama se llama mapeo en
reversa y sus archivos asociados son
los archivos de zona en reversa
(reverse zone files)
El espacio de nombres del
DNS
• Por razones históricas hay dos tipos
de nombres de dominio de alto
nivel
• En los Estados Unidos, los dominios
de alto nivel describen la estructura
política y organizacional con tres
letras, como .com y .edu. Algunos
de estos dominios, como .com, .org
y .net también se usan fuera de los
EEUU, a estos les llamamos los
dominios de alto nivel genérico o
gTLD
El espacio de nombres del
DNS
(autoridad)
master (amo) Es el repositorio primario de los datos de una zona, obtiene su información de un
archivo en el disco
slave (esclavo) Copia su información desde el master
stub Similar al esclavo, pero sólo copia los datos del nombre del servidor (sin los datos
de los otros hosts)
distribution Un servidor que sólo es visible dentro de un dominio (también se le conoce como
stealth server, o servidor oculto)
nonauthoritative Responde una petición desde un cache, no sabe si la información todavía es válida
(sincaching
autoridad) Almacena los datos de las peticiones anteriores, usualmente no tiene zonas locales
recursive Hace las peticiones a tu nombre hasta que regresa ya sea una respuesta o un error
www
IN A 192.168.0.1
IN A 192.168.0.2
IN A 192.168.0.3
El protocolo DNS extendido
• En la definición original del protocolo
DNS se utilizaban UDP y TCP
• UDP se utilizaba para las preguntas y
respuestas
• TCP se utilizaba para la transferencia
de zonas entre servidores amo y
sus esclavos
El protocolo DNS extendido
• El problema es que el tamaño máximo
garantizado para las
implementaciones UDP es de 512
bytes, que es muy pequeño para
incluir las características de seguridad
actuales del DNS que incluyen firmas
digitales
• Ese límite también afecta el número y
los nombres de los servidores raíz,
para hacer que toda la información de
los servidores raíz quepa en un
paquete UDP de 512 bytes, sólo hay
13 servidores raíz, cada uno con un
nombre limitado a una letra del
El protocolo DNS extendido
• Muchos clientes lanzan una pregunta
UDP primero y luego, si la
respuesta está truncada, vuelven a
hacer la pregunta por TCP, lo cual
es muy ineficiente
• Se podría pensar que lo más fácil es
utilizar TCP para todo, pero esto
también es un desperdicio, puesto
que las conexiones TCP son más
caras
El protocolo DNS extendido
• Una pregunta/respuesta típica puede
ser tan breve como dos paquetes
UDP, el de pregunta y el de
respuesta
• Un intercambio TCP involucra al
menos siete paquetes, un
handshake de tres vías para iniciar
la conversación, una pregunta, una
respuesta, y un handshake final
para cerrar la conexión
El protocolo DNS extendido
• A finales de la década de los 90, el
EDNS0 (Extended DNS versión 0)
resolvió algunas de estas
limitaciones del protocolo DNS
• Permite el reensamble del tamaño
del buffer, opciones soportadas y
protocolos hablados
• Si el servidor de nombres receptor
contesta con un mensaje de error,
el remitente regresa al protocolo
DNS original. BIND9 implementa
Instalación de BIND y
Tarea mantenimiento
Para Frecuencia
Obtener un nombre de Sitio Una vez
dominio
Escoger los servidores de Sitio Una vez o más
nombresuna distribución Sitio
Obtener Una vez, pero es necesario
BIND
Configurar el resolvedor Cliente mantenerla actualizada
Una vez y distribuir
Configurar un resolvedor Cliente Para cada subred y distribuir
eficiente el cambio de Cliente
Configurar Para cada arquitectura y
servicios
Iniciar named durante el Servidor distribuir
Para cada servidor de nombres
inicio
Ajustar el archivo config de Servidor Para cada tipo de servidor
named
Configurar el archivo de Servidor Una sola vez y distribuir a los
hints
Configurar los archivos de Master servidores
Una sola vez
zona
Actualizar los archivos de Master Conforme sea necesario
zona
Revisar bitácoras Bitácora Al menos una vez a la semana
Educar usuarios host
Todos Continuamente
Configuración del
resolvedor
• Cada host de la red debe tener un
archivo llamado /etc/resolv.conf que
enlista los servidores DNS a los que se
les harán las preguntas
• Si el cliente obtiene su dirección IP y
parámetros de red de un servidor
DHCP, el archivo /etc/resolv.conf debe
ponerse automáticamente, de otra
forma, se puede editar a mano, el
formato es
search nombrededominio
nameserver direcciónip
Configuración del
resolvedor
• Se pueden enlistar hasta tres servidores
de nombres, como en este ejemplo
search cs.colorado.edu colorado.edu
ee.colorado.edu
nameserver 128.138.243.151 ; ns
nameserver 128.138.204.4 ; piper
nameserver 128.138.240.1 ; anchor
• S ih a y a lg u n a o tra co sa e n e se a rch ivo ,
sim p le m e n te se ig n o ra , p o r e so se
p u e d e n p o n e r a lfin a ld e la lín e a
n a m e se rve r u n co m e n ta rio , e n la
lín e a se a rch n o se re co m ie n d a p o n e r
n in g ú n co m e n ta rio
Configuración del
resolvedor
• La línea search enlista los dominios
por los que se preguntará si un
hostname no está totalmente
calificado, por ejemplo, si el usuario
hace un ssh foo, el resolvedor
completará el nombre con el primer
dominio de la lista de búsqueda, en
este caso, buscará
foo.cs.colorado.edu, si no lo
encuentra probará también con
foo.colorado.edu y
Configuración del
resolvedor
• Se pueden tener hasta ocho dominios en
una línea search
• Lo s re so lve d o re s e n lista d o s e n e l a rch ivo
re so lv . co n f deben ser recursivos , ya que
u n re so lve d o r n o e n tie n d e re fe re n cia s, y
ca d a u n o d e e llo s d e b e te n e r u n ca ch e
• Lo s se rvid o re s e n la s lín e a s n a m e se rve r se
co n ta cta n e n o rd e n . E n ta n to q u e e l
p rim e ro sig a co n te sta n d o la s p re g u n ta s,
lo s d e m á s se rá n ig n o ra d o s
• S i h a y u n p ro b le m a , la p re g u n ta exp ira y se
p ro b a rá co n e lsig u ie n te se rvid o r d e
n o m b re s. C a d a se rvid o r se p ru e b a p o r
tu rn o s, h a sta cu a tro ve ce s. E lin te rva lo d e
re in te n to se in cre m e n ta co n ca d a fa lla
Configuración del
resolvedor
• Muchos resolvedores permiten un
máximo de tres servidores de
nombres enlistados, si hay más,
simplemente se ignoran
silenciosamente
• Si un host es por sí mismo un
servidor de nombres, debe ser
enlistado al principio en su propio
archivo resolv.conf
•
Configuración del
resolvedor
• Es una buena idea tener servidores
separados para resolver peticiones
internas al dominio
• Los servidores internos deberían ser de
sólo de cache y recursivos
• Un sitio muy grande debería tener
varios servidores de nombres a lo
largo de todo el sitio y utilizar el
archivo resolv.conf para propagar la
carga entre los servidores, para
minimizar el tráfico de red y reducir la
vulnerabilidad de las máquinas a un
solo punto de falla, porque si el
servidor de nombres falla, todo el sitio
Configuración del
resolvedor
• Los forwarders también son una buena
forma de optimizar el servicio de
nombres local
• Los servidores de nombres locales
apuntan a un forwarder que hace
todas las peticiones externas para tu
sitio y construye un cache muy rico
• Esta configuración minimiza el uso de
ancho de banda externo utilizado por
el servidor de nombres y permite a
las máquinas locales compartir un
Configuración del
resolvedor
• En la figura siguiente se ilustran las
recomendaciones de diseño que se
explicaron anteriormente
• Se muestra una jerarquía de dos niveles con
forwarding
• Es necesario ajustar el balance entre los
servidores y manejar las preguntas de
salida y los servidores que manejan las
peticiones hacia adentro, de tal forma que
ninguno de los dos grupos se sobrecargue
• También se muestra el uso de un servidor
esclavo fuera del sitio, que se recomienda
ampliamente si se puede conseguir que
Configuración del
resolvedor
Pruebas para el resolvedor
• En algunos sistemas, para usar un
DNS basta con agregar la línea
nameserver al archivo
/etc/resolv.conf
• En otros, es necesario decirle al
sistema explícitamente que utiliice
el DNS en vez del archivo /etc/hosts
o el NIS en el archivo del sistema,
que se llama /etc/nsswitch.conf
Pruebas para el resolvedor
• Después de configurar el
/etc/resolv.conf, y suponiendo que
todo funciona bien en la red, se
podrán ver las otras máquinas por
nombre en vez de por IP
• Si se intenta ver otra máquina y la
instrucción se tarda, intenta verla a
través de su dirección IP, si eso
funciona, es que la configuración
del DNS tiene algún problema
Impacto en el resto del
sistema
• La configuración del DNS impacta en
varios puntos conforme el sistema
se inicia, por ejemplo, si se tiene un
servidor de correo, y aún no se
resuelve el DNS, puede que no
funcione
• También si se montan unidades de
disco duro a través de NFS, podría
ser que no encontrara la máquina
BIND, el servidor de
nombres
• BIND son las siglas de Berkeley
Internet Name Domain (Nombres
de dominio de Internet, Berkeley) y
es un programa de código abierto
que implementa el protocolo DNS
• Para instalarlo en Debian basta con
escribir lo siguiente
// This is the primary configuration file for the BIND DNS server named.
//
include "/etc/bind/named.conf.options";
type hint;
file "/etc/bind/db.root";
};
BIND, el servidor de
nombres
// be authoritative for the localhost forward and reverse zones, and for
// broadcast zones as per 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;
BIND, el servidor de
nombres
cat /etc/bind/named.conf.options
options {
directory "/var/cache/bind";
// If there is a firewall between you and nameservers you want
// to talk to, you might need to uncomment the query-source
// directive below. Previous versions of BIND always asked
// questions using port 53, but BIND 8.1 and later use an unprivileged
// port by default.
// query-source address * port 53;
// If your ISP provided one or more IP addresses for stable
// nameservers, you probably want to use them as forwarders.
Instrucciones del
named.conf
Instrucció Función
ninclude Interpola un archivo
options Pone las opciones de configuración globales del servidor
server de nombreslas opciones para cada servidor
Especifica
key Define la información de autentificación
acl Define las listas de control de acceso
zone Define una zona de registro de recursos
trusted- Utiliza las llaves preconfiguradas
keys
controls Define canales utilizados para controlar el servidor de
logging nombres
Especificacon
lasndc
categorías de las bitácoras y sus destinos
view Define una vista del espacio de nombres
Lista de coincidencia de
direcciones
• Una lista de coincidencia de
direcciones es una generalización
de una dirección IP y puede incluir
– Una dirección IP (por ejemplo
199.165.145.4)
– Una red IP especificada con una
máscara CIDR (por ejemplo
199.165/16)
– El nombre de una lista de acceso de
control definida con anterioridad
– Una llave criptográfica para
autentificación
Lista de coincidencia de
direcciones
• Ejemplos de listas
– { ! 1.2.3.13; 1.2.3/24; };
– { 128.138/16; 198.11.16/24; 204.228.69/24;
127.0.0.1; };
• Cuando una dirección IP o una red es
comparada con la lista de coincidencias,
la lista se busca en orden hasta que exista
la coincidencia, este algoritmo de “primer
encuentro” hace que el orden de la lista
sea importante
• Por ejemplo, en la primera lista, si
estuvieran al revés las entradas, no se
tendría el efecto deseado, porque nunca
se alcanzaría la dirección 1.2.3.13 y nunca
se encontraría la entrada negada
Instrucciones del named.conf
include
• Para organizar mejor un DNS es
posible poner diferentes porciones
de configuración en distintos
archivos, tal y como se hace en
Debian
• Para incluir un archivo se escribe, por
ejemplo
include "/etc/bind/named.conf.options";
• Nota: la trayectoria es relativa, por
eso es necesario poner las / para
especificarla precisamente
Instrucciones del named.conf
options
• La sentencia options especifica las
opciones globales, algunas de las
cuales pueden ser sobreescritas
para algunas zonas o servidores en
particular, el formato general es
options {
opción;
opción;
…
};
Instrucciones del named.conf
options
• En el caso de Debian, las opciones
globales preconfiguradas son las
siguientes
options {
directory "/var/cache/bind";
auth-nxdomainno; #
conform to #
RFC1035
listen-on-v6 { any; };
};
Instrucciones del named.conf
options
• En BIND9 hay más de 50 opciones
que se pueden consultar en el
manual
• http://www.bind9.net/manuals
• http://www.bind9.net/manual/bind/9.3.2/
• http://www.zytrax.com/books/dns/ch7/sta
•
Instrucciones del named.conf
options
• Los valores por omisión se enlistan en
corchetes cuadrados al final de la
opción, por ejemplo
version “cadena de texto”; [número de versión real del servidor]
Instrucciones del named.conf
zone
• Configuración de un servidor esclavo
para una zona
zone “nombre_de_dominio” {
type slave | stub;
file “ruta”;
ixfr-base “ruta”; [v8 only]
masters { ip_addr; ip_addr; … } [no
default]
allow-query { lista_de_dirs; } [all]
allow-transfer { lista_de_dirs; } [all]
};
Instrucciones del named.conf
zone
• Poniendo los servidores raíz (root hints)
zone “.” {
type hint;
file “ruta”;
};
• Los “hints” son el conjunto de los registros
DNS que enlista los servidores del dominio
raíz (“.”). Es el lugar en donde el se
comienzan las búsquedas de otros
dominios
• Al archivo de hints se le conoce con
frecuencia como el archivo root.cache
•
Instrucciones del named.conf
zone
• Instalando una zona de forwarding
zone “nombre_de_dominio” {
type forward;
forward only | first;
forwarders { ip_addr; … }
};
•
Instrucciones del named.conf
key
• La instrucción key define la llave
criptográfica que será utilizada para
autentificarse con un servidor en
particular
• La llave se representa como una
cadena codificada en base 64 y es un
“secreto compartido”
key key-id {
algorithm cadena;
secret cadena;
};
Instrucciones del named.conf
trusted-keys
• La instrucción trusted-keys se utiliza
para la seguridad con protocolo
DNSSEC, cada entrada es una tupla-5
que identifica el nombre el dominio,
las banderas, el protocolo, el
algoritmo y la llave que son
necesarias para hablar con el servidor
de nombres de ese dominio, el
formato es
trusted-keys {
domain flags protocol algorithm key;
domain flags protocol algorithm key;
…
};
Instrucciones del named.conf
controls
• Permite el control del servidor a
través de la utilería ndc
controls {
inet ip_addr port port# allow { lista_dirs | key
… };
unix permission owner group; [0600 0 0]
};
Ejemplo de configuración de
BIND en
una máquina linux casera
• En una red casera, podríamos instalar
una pequeña red privada, por ejemplo
con la dirección de red siguiente
192.168.77.0/24
y con el dominio
guarida.dyndns.org
• Se necesitan dos archivos, el de
búsqueda directa (forward) y el de
búsqueda inversa (reverse) y
modificar el /etc/bind/named.conf
para que se resuelvan las dos zonas
Ejemplo de configuración de
BIND en
una máquina linux casera
• Modificación del /etc/bind/named.conf
zone “guarida.dyndns.org” {
type master;
file “guarida.dyndns.org.zone”;
};
zone “77.168.192.in-addr.arpa” {
type master;
file “77.168.192.in-
addr.arpa.zone”;
};
Ejemplo de configuración de
BIND en
una máquina linux casera
• El archivo “guarida.dyndns.org.zone”
; guarida.dyndns.org.zone
@ IN SOA ns.guarida.dyndns.org. root.guarida.dyndns.org. (
2009100201 ; Serie
21600 ; Refresco 6 horas
1800 ; Reintentar, 30 min
1209600 ; Expiración 2 semanas
432000 ) ; Mínimo 5 días
IN NS ns
IN MX 10 ns
ns IN A 192.168.77.254
m1 IN A 192.168.77.1
...
m253 IN A 192.168.77.253
Ejemplo de configuración de
BIND en
una máquina linux casera
• El archivo “77.168.192.in-
addr.arpa.zone”
; 77.168.192.in-addr.arpa.zone
@ IN SOA ns.guarida.dyndns.org. root.guarida.dyndns.org. (
2009100201 ; Serie
21600 ; Refresco 6 horas
1800 ; Reintentar, 30 min
1209600 ; Expiración 2 semanas
432000 ) ; Mínimo 5 días
IN NS ns
254 IN PTR ns.guarida.dyndns.org.
1 IN PTR m1.guarida.dyndns.org.
...
cs.colorado.edu. IN NS ns.cs.colorado.edu.
cs.colorado.edu. IN NS anchor.cs.colorado.edu.
cs.colorado.edu. IN NS ns.cs.utah.edu.
•
La base de datos del DNS
Los registros MX
• Los hosts con menor preferencia se
intentan primero: 0 es el más
deseable y 65,535 es el peor
• En este ejemplo el correo enviado a
bob@xterm1 se enviaría primero a
mailhub si está accesible, a anchor
como segunda opción y si mailhub y
anchor están caidos, a boulder
• Observe que el nombre boulder debe
estar completamente calificado
porque no es parte del dominio por
omisión, que aquí es cs.colorado.edu.
La base de datos del DNS
Los registros MX
• La lista de las preferencias y hosts
puede estar en la misma línea, pero
hacerlo en líneas separadas simplifica
la lectura
• Los registros MX son útiles en muchas
situaciones
– Cuando se tiene un concentrador de
correo central
– Cuando el host de destino está caído
– Cuando el destino no es alcanzable
desde Internet
– Cuando el destino no habla SMTP
La base de datos del DNS
Los registros MX
• En el primer caso, el correo se
enrutará a un concentrador de
correo, la máquina en donde la
mayor parte de los usuarios leen su
correo
• En el segundo caso el correo se
enrutará a un host cercano y
reenviado cuando el destino
regrese a la vida
• Los hosts que no están conectados a
Internet no pueden tener registro A,
La base de datos del DNS
Los registros MX
• El dominio en si mismo puede tener
un registro MX para concentrar
todo el correo en una máquina
especial
• Por ejemplo
cs
IN MX 10 mailhub.cs.colorado.edu.
IN MX 20 anchor.cs.colorado.edu.
IN MX 50 boulder.colorado.edu.
La base de datos del DNS
Los registros CNAME
• Los registros CNAME asignan
nombres adicionales a un host
• Estos apodos se utilizan
normalmente para asociar una
función con un host o para acortar
un nombre largo
• Al nombre real se le conoce como el
nombre canónico y por ello el
registro es CNAME
La base de datos del DNS
Los registros CNAME
• Ejemplos
ftp INCNAME anchor
kb INCNAME kibblesnbits
www INCNAME lucrecia
• El formato de un registro CNAME es
apodo [ttl]
IN CNAME hostname
La base de datos del DNS
Los registros CNAME
• Cuando el DNS encuentra un registro
que tiene un CNAME detiene la
búsqueda y trata de encontrar el
nombre real, uno que tenga un
registro A
• Cada nombre que tenga CNAME debe
tener un nombre real con un
registro A
•
La base de datos del DNS
Los registros CNAME
• Algunos sitios utilizan los registros
CNAME como una pobre forma de
balanceo de carga, puesto que
pueden mapear el nombre público
de un servidor web a varias
máquinas distintas
www IN CNAME web1
www IN CNAME web2
www IN CNAME web3
La base de datos del DNS
Los registros CNAME
• También existe el truco inverso, un
solo servidor web para varios sitios
distintos
www IN A 132.248.29.10
wiki IN CNAME www
pedagogia IN CNAME www
matematicas IN CNAME www
fisica IN CNAME www
• E n e la p a ch e e s p o sib le co n fig u ra r
q u e , sise re cib e u n n o m b re d istin to
lle ve a u n sitio e sp e cífico
La base de datos del DNS
El truco del CNAME
• Cuando hay redes que no están
divididas en los límites de byte, se
puede utilizar CNAME para lograr la
resolución inversa
• El truco es el siguiente: para cada
dirección de host posible en una zona
in-addr.arpa natural, se agrega un
CNAME que deflecte la búsqueda a la
zona controlada por el dueño de la
subred apropiada
• Este esquema hace que los archivos de
zona en el padre sean complicados,
pero permite delegar la autoridad a
los usuarios de cada subred
La base de datos del DNS
El truco del CNAME
• La organización padre crea los
registros CNAME para cada
dirección IP posible con un
componente extra falso (un trozo
separado por un punto) que
representa la subred
• Por ejemplo, en el escenario /26
recién descrito, el primer cuarto de
las direcciones tendrían un
componente “0-63”, el segundo
La base de datos del DNS
El truco del CNAME
$ORIGIN 243.138.128.in-addr.arpa.
1 IN CNAME 1.0-63
2 IN CNAME 2.0-63
…
La base de datos del DNS
El truco del CNAME
• Cuando se agrega este componente
extra, se crea un “corte” que hace
la delegación
• Cuando alguien busca el mapeo
inverso para 128.138.243.1, por
ejemplo, el registro CNAME en
1.243.138.128.in-addr.arpa redirige
la búsqueda al nombre 1.0-
63.243.138.128.in-addr.arpa y ese
nombre es controlado por el cliente
La base de datos del DNS
El truco del CNAME
• Los archivos del cliente son bastante
limpios, sólo el ISP debe hacer el
truco con nombres de configuración
poco elegantes
• Las cosas pueden complicarse aún
más si el cliente fuera un ISP que
quisiera dividir a su vez sus
direcciones, pero eso está bien
porque en BIND se pueden
encadenar hasta 8 niveles de
La base de datos del DNS
El truco del CNAME
• En las nuevas versiones de BIND hay
una instrucción nueva, $GENERATE
que facilita la creación de registros
de recursos en la zona padre
• Por ejemplo para producir los
registros de la primera subred,
basta con las siguientes líneas
$ORIGIN 243.138.128.in-addr.arpa.
$GENERATE 0-63 $ CNAME $.0-63
0-63 NS ns1.cliente1.com.
0-63 NS ns2.cliente1.com.
La base de datos del DNS
El truco del CNAME
• El símbolo $ en el comando
$GENERATE itera desde 0 hasta 63
y crea 64 diferentes registros
CNAME
• Las otras tres subredes /26 se
pueden manejar de forma similar
La base de datos del DNS
Revisita de ejemplos
root@u804:/var/cache/bind# cat guarida.dyndns.org.zone
; guarida.dyndns.org.zone
$TTL 3600
@ IN SOA ns.guarida.dyndns.org.
root.guarida.dyndns.org. (
2009100202 ; Serie
21600 ; Refresco 6 horas
1800 ; Reintentar, 30 min
1209600 ; Expiración 2 semanas
300 ) ; Reverse cache expiration
5min
IN NS ns
IN MX 10 ns
ns IN A 192.168.226.129
m1 IN A 192.168.226.1
gateway IN A 192.168.226.2
$GENERATE 3-128 m$ IN A 192.168.226.$
$GENERATE 130-254 m$ IN A 192.168.226.$
La base de datos del DNS
Revisita de ejemplos
root@u804:/var/cache/bind# cat 226.168.192.in-addr.arpa.zone
; 226.168.192.in-addr.arpa.zone
$TTL 3600
@ IN SOA ns.guarida.dyndns.org.
root.guarida.dyndns.org. (
2009100204 ; Serie
21600 ; Refresco 6 horas
1800 ; Reintentar, 30 min
1209600 ; Expiración 2 semanas
3600 ) ; cache inverso 1hr
IN NS ns.guarida.dyndns.org.
1 IN PTR m1.guarida.dyndns.org.
2 IN PTR gateway.guarida.dyndns.org.
$GENERATE 3-128 $ IN PTR m$.guarida.dyndns.org.
//
// Consider adding the 1918 zones here, if they are not used in your
// organization
//include "/etc/bind/zones.rfc1918";
zone "guarida.dyndns.org" {
type master;
file "guarida.dyndns.org.zone";
};
zone "226.168.192.in-addr.arpa" {
type master;
file "226.168.192.in-addr.arpa.zone";
};
La base de datos del DNS
Comandos en los archivos de
zona
• Hay cuatro comandos
– $ORIGIN nombre-del-dominio
– $INCLUDE nombre-de-archivo
– $TTL ttl-por-omisión
– $GENERATE muchos argumentos
• Todos los comandos deben comenzar
en la primera columna y estar
aislados en una sola línea
La base de datos del DNS
$ORIGIN
• En condiciones normales, conforme
named lee un archivo de zona, le
agrega un dominio por omisión u
origen a cualesquiera nombres que
no estén calificados
• El origen se pone inicialmente de
acuerdo con lo que está
especificado en el comando zone
del archivo named.conf
La base de datos del DNS
$ORIGIN
• El comando $ORIGIN permite poner
el origen de forma manual
• Por ejemplo, para los registros
inversos para una subred de clase
B se puede poner con una
instrucción como la siguiente
$ORIGIN 243.138.128.in-addr.arpa.
•
La base de datos del DNS
$INCLUDE
• Muchos sitios utilizan la directiva
$INCLUDE en sus archivos de base
de datos de la zona para separar
registros de encabezado con los de
datos, para separar las partes
lógicas de un archivo de zona o
para mantener las llaves
criptográficas en un archivo con
permisos restringidos
La base de datos del DNS
$INCLUDE
• La sintáxis de la directiva $INCLUDE
es
$INCLUDE nombre-de-archivo
• El archivo especificado es leído en la
base de datos en el punto en el que
encuentra la directiva $INCLUDE
La base de datos del DNS
$TTL
• La directiva $TTL pone un valor por
omisión para el tiempo de vida
(time-to-live) de cada uno de los
registros que le siguen
•
La base de datos del DNS
$GENERATE
• $GENERATE es la forma más simple de
generar series de registros similares
• El formato de la directiva $GENERATE
es
$GENERATE inicio-fin/[paso] lhs tipo rhs [comentario]
•
@
IN SOA cch.unam.mx. root.cch.unam.mx. (
2008101401 ; número de serie
3600 ; refresco
900 ; reintento
3600000 ; expiración
14400 ) ; mínimo
IN NS cch.unam.mx.
1
IN PTR localhost.cch.unam.mx.
ns.cs IN A 128.138.243.151
piper.cs IN A 128.138.204.4
ns.ee IN A 128.138.200.1
Registros de pegamento,
enlaces entre zonas
• Ejemplo en la UNAM
• En el archivo named.conf del
servidor de nombres que resuelve
la zona “unam.mx” se escribe
Transferencias de zona
• Ejemplo para un servidor esclavo
• Si quisiéramos ser servidores esclavos de upn.mx y de
acer.com.mx deberíamos escribir las siguientes líneas en
named.conf
zone "upn.mx" {
type slave;
masters { 200.23.113.1; };
file "upn.mx.zone";
};
zone "acer.com.mx" {
type slave;
masters { 200.23.80.27; };
file "/var/cache/bind/acer.com.mx.zone";
};
Transferencias de zona
• En este caso upn.mx no permite la
transferencia de la zona, por lo que en
/var/log/syslog aparecen los siguientes
mensajes
Sep 5 05:16:43 u804 named[13587]: zone
upn.mx/IN: Transfer started.
Sep 5 05:16:43 u804 named[13587]: transfer of
'upn.mx/IN' from 200.23.113.1#53: connected
using 192.168.226.129#32821
Sep 5 05:16:44 u804 named[13587]: transfer of
'upn.mx/IN' from 200.23.113.1#53: failed
while receiving responses: REFUSED
Sep 5 05:16:44 u804 named[13587]: transfer of
'upn.mx/IN' from 200.23.113.1#53: end of
transfer
Transferencias de zona
• En el caso de la zona acer.com.mx los mensajes son
los siguientes
Sep 5 04:26:13 u804 named[13587]: zone
acer.com.mx/IN: Transfer started.
Sep 5 04:26:13 u804 named[13587]: transfer of
'acer.com.mx/IN' from 200.23.80.27#53:
connected using 192.168.226.129#39431
Sep 5 04:26:15 u804 named[13587]: zone
acer.com.mx/IN: transferred serial 2000221205
Sep 5 04:26:15 u804 named[13587]: transfer of
'acer.com.mx/IN' from 200.23.80.27#53: end of
transfer
Sep 5 04:26:15 u804 named[13587]: zone
acer.com.mx/IN: sending notifies (serial
2000221205)
Actualizaciones dinámicas
• La premisa del DNS es que los
mapeos nombre-a-dirección son
relativamente estables y no
cambian con frecuencia
• En los sitios con DHCP esto no es así
• Hay dos soluciones clásicas: agregar
entradas genéricas a la base de
datos del DNS o editar
continuamente los archivos del
DNS
• Estas dos soluciones podrían no ser
Actualizaciones dinámicas
• La primera solución es conocida para
cualquiera que haya utilizado un ISP
con dial-up, la configuración del DNS
es como sigue
dhcp-host1.dominio.IN A 129.168.0.1
dhcp-host2.dominio.IN A 129.168.0.2
• Aún cuando es una solución simple, los
nombres de las máquinas están
permanentemente asociados a
direcciones IP aún cuando cambien.
Esto podría representar un riesgo de
Actualizaciones dinámicas
• Las últimas versiones de DHCP y BIND
permiten que, desde el DHCP se
notifique cada vez que se asigne una
dirección y se actualice el servidor de
nombres al vuelo
• Las actualizaciones dinámicas pueden
agregar, borrar o modificar los
registros de recursos
• Puesto que es un poco espantoso que
se actualice el DNS con esa
frecuencia, se recomienda para estos
casos utilizar un subdominio
Seguridad en el DNS
• El DNS se concibió como un sistema
abierto
• En condiciones normales, cualquiera
puede explorar un dominio con
peticiones individuales con las
herramientas dig, host o
nslookup, e incluso obtener la
base de datos completa del
dominio
• Las versiones nuevas de BIND
Seguridad en el DNS
Característic Sentencias Qué especifica
a
allow-query options, Quién puede preguntar una zona o un
allow- zone
options, servidor
Quién puede solicitar una transferencia
transfer
allow-update zone de zonapuede hacer actualizaciones
Quién
blackhole options dinámicas
A qué servidores se debe ignorar por
bogus server completo
A qué servidores nunca se debe
acl various preguntar
Listas de control de acceso
Seguridad en el DNS
• Otra forma de mejorar la seguridad
del DNS es ejecutarlo en un
ambiente chroot, en donde se
utilice un UID sin privilegios de tal
forma que se elimine la posibilidad
de explorar los directorios
• También se pueden utilizar firmas de
transacción para controlar las
actualizaciones dinámicas y, por
supuesto el soporte completo de
DNSSEC
Listas de control de acceso
• Las ACL son listas de direcciones que
aparecen como argumentos a las
sentencias tales como allow-query,
allow-transfer y blackhole
• Las ACL pueden servir para mitigar
dos de los mayores problemas de
seguridad de los DNS: el spoofing y
los ataques de denegación de
servicio
Listas de control de acceso
• Cada sitio debería tener un ACL para las direcciones fraudalentas
y un ACL para las direcciones locales
acl bogusnets { // ACL para redes fraudalentas
0.0.0.0/8; // por omisión, direcciones comodín
169.254.0.0/16; // direcciones delegadas de enlace local
192.0.2.0/24; // direcciones de muestra como
example.com
224.0.0.0/3; // espacio de direcciones multicast
10.0.0.0/8; // espacio de direcciones privado (RFC1918)
172.16.0.0/12; // espacio de direcciones privado
(RFC1918)
192.168.0.0/16; // espacio de direcciones privado
(RFC1918)
};
128.138.242.1; // ancla
…
};
acl mediciones {
Address: server-IP-address
> ls cs.colorado.edu.
[server name]
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• Antes de la especificación de
DNSSEC que se verá más adelante,
el IETF desarrolló un sencillo
mecanismo llamado TSIG
(RFC2845) para permitir la
comunicación segura entre
servidores a través del uso de
firmas de transacción
• El control de acceso basado en
firmas de transacción es más
seguro que el control de acceso
basado en direcciones IP
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• Las firmas de transacción utilizan un
esquema de criptografía simétrica
• Esto es, que la llave de codificación
es la misma que la de
descodificación
• Esta llave se llama “secreto
compartido” o shared-secret en
inglés
• Se deben utilizar llaves diferentes
para cada par de servidores que se
quieren comunicar entre sí
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• Desde el punto de vista
computacional, el sistema de
criptografía de TSIG es mucho
menos caro que el uso de
criptografía de llave pública, pero
sólo es apropiado para una red
local en el cual el número de pares
de servidores comunicantes sea
pequeño
• No es escalable al Internet global
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• TSIG también firma las peticiones y
respuestas de DNS
• Sólo puede ser utilizado entre
servidores, pero no entre servidores y
resolvedores
• Las firmas TSIG se revisan en el
momento que se recibe un paquete y
luego son descartadas, no se guardan
ni forman parte de la información del
DNS
• La implementación de TSIG más común
es el algoritmo HMAC-MD5
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• La utilería dnssec-keygen genera una
llave para un par de servidores, por
ejemplo para generar la llave de
secreto compartido entre dos
servidores, serv1 y serv2 se hace
así
# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST serv1-serv2
server direccion-ip-de-serv2 {
keys { serv1-serv2; };
};
En serv2
server direccion-ip-de-serv-1 {
keys {serv1-serv2; };
};
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• También las cláusulas allow-query,
allow-transfer y allow-update en la
sentencia zone deberían referirse a
la llave, por ejemplo
allow-transfer { key serv1-serv2; };
• Es conveniente, cuando se
implemente esto ejecutar named
en nivel de depuración 1 para ver
los mensajes de error que se
generen
Comunicación segura servidor-
a-servidor con TSIG y TKEY
• TKEY es el mismo mecanismo pero
en donde los dos servidores
generan un secreto compartido de
forma automática
• Utiliza el intercambio de llaves de
Diffie-Hellman
Comunicación segura servidor-
a-servidor con TSIG y TKEY
debian:/etc/bind# dnssec-keygen -a hmac-md5 -b 64 -n HOST s1s2
Ks1s2.+157+17079
Private-key-format: v1.2
Key: gp/HvgCV8iY=
•
DNSSEC
• DNSSEC es una extensión del DNS
que autentifica el origen de la
información de la zona y verifica su
integridad utilizando criptografía de
llave pública
• Estas extensiones le permiten al
cliente preguntar cosas como “¿De
verdad esta información de DNS
proviene del dueño de la zona?” y
“¿En verdad la información enviada
proviene del dueño?”
DNSSEC
• DNSSEC tiene tres servicios
– Distribución de llaves por medios de
los registros KEY almacenados en
los archivos de zona
– Verificación de origen para servidores
e información
– Verificación de la integridad de la
información de la zona
DNSSEC
• DNSSEC está basado en la confianza
de la cadena en cascada, los
servidores root proveen de
información para validar los
dominios de alto nivel, los dominios
de alto nivel proveen información
validada para los dominios de
segundo nivel y así sucesivamente
DNSSEC
• Los sistemas de criptografía pública
utilizan dos llaves, uno para
codificar (o firmar) y otro para
descodificar (o verificar)
• Los que publican, firman su
información con una llave privada
secreta
• Cualquiera puede verificar la validez
de una firma con la llave pública,
que se distribuye a todo el mundo
DNSSEC
• Si una llave pública decodifica
correctamente un archivo de zona,
entonces la zona debe haber sido
codificada con la llave privada
correspondiente
• El truco es asegurarse de que las llaves
públicas que se utilicen para verificar
sean auténticas
• Los sistemas de llave pública permiten
a una entidad firmar la llave pública
de otra, para respaldar la legitimidad
de la llave, de ahí el término “cadena
DNSSEC
• La información de una zona de DNS es
demasiado voluminosa como para ser
codificada con criptografía de llave
pública, puesto que la codificación sería
muy lenta
• En cambio, puesto que la información no es
secreta, un hash seguro, como una suma
de verificación MD5, se ejecuta sobre la
información y los resultados de ese hash
son firmados (codificados) por la llave
privada de la zona. Los resultados de ese
has son como la huella digital de los datos
y la huella digital firmada se llama “firma
digital”
DNSSEC
• Las firmas digitales normalmente se
agregan a la información que
autentifican
• Para verificar la firma, se debe
decodificar con la llave pública del
firmante, pasar la información a
través del mismo algoritmo de hash
y comparar el hash calculado con el
valor del hash decodificado
• Si coinciden, se ha autentificado al
firmante y verificado la integridad
DNSSEC
• En un sistema DNSSEC cada zona
tiene sus propias llaves pública y
privada
• La llave privada firma cada conjunto
RR
• La llave pública verifica las firmas y
están incluidas en los datos de la
zona en forma de un registro de
recursos KEY
•
DNSSEC
• Las zonas padre firman las llaves
públicas de las zonas hijas
• Named verifica la autenticidad de un
registro de zona hijo KEY revisándola
contra la firma de la zona padre
• Para verificar la autenticidad de la llave
de la zona padre, named puede
revisar al padre del padre y así
sucesivamente hasta la raíz
• La llave pública para la zona raíz se
incluye en el archivo de hints del root
DNSSEC
• Primero se genera un par de llaves
para la zona
# dnssec-keygen –a DSA –b 768 –n ZONE midominio.com.
Argumento Significado
-a DSA Utiliza el algoritmo DSA
-b 768 Crea un par de llaves de 768-bits
-n ZONE Crea las llaves para una zona llamada
midominio.com. midominio.com
DNSSEC
• Se recibe la siguiente salida
alg = 003
key identifier = 12345
flags = 16641
channel_def;
channel_def;
…
category category_name {
channel_name;
channel_name;
…
};
};
DNS pruebas y depuración
• Una definición de canal es
ligeramente distinta dependiendo si
el canal va a un archivo o al syslog
• Se debe escoger entre file y syslog
para cada canal
• Un canal no puede estar con las dos
opciones al mismo tiempo
DNS pruebas y depuración
channel channel_name {
file ruta [versions numvers | unlimited] [size
tamañoesperado];
syslog facility;
severity severity;
print-category yes | no;
print-severity yes | no;
print-time yes | no;
};
DNS pruebas y depuración
• Para un archivo numvers indica cuántas
versiones de respaldo se deben
mantener
• tamañoesperado especifica qué tanto
se va a permitir que crezca la
bitácora, por ejemplo 2,048, 100k,
20m, 15g, unlimited, default
• En el caso de syslog, facility especifica
el nombre del recurso que se utilizará
para registrar el mensaje
• Puede ser cualquier recurso estándar
• En la práctica sólo daemon y local0 a
local7 son las opciones razonables
DNS pruebas y depuración
• El resto de las sentencias en un
channel_def son opcionales
• severity puede tener los valores, en
orden descendiente, critical, error,
warning, notice, info o debug, con un
nivel numérico opcional, como
severity debug 3
• El valor dynamic también es reconocido
y coincide con el nivel de
depuración especificado
DNS pruebas y depuración
• Los cuatro canales en la tabla
siguiente están predefinidos
• Para la mayor parte de las
instalaciones, estos canales están
bien
Nombre del canal Qué hace
default_syslog Envía desde la severidad info y superiores al
• default_debug syslog con la
Registra hacia el archivo named.run, se pone
default_stderr la severidad
Envía a dynamic
los mensajes a laconsola de error
null estándar de named,
Descarta todos con severidad info
los mensajes
DNS pruebas y depuración
• Para BIND9 simplemente se puede
escribir
•
•
logging {
category default { default_syslog; default_debug; };
};
DNS pruebas y depuración
• Cada vez que haga cambios a BIND
es conveniente revisar las bitácoras
y quizá incrementar el nivel de
depuración
• Luego, reconfigurarlo para conservar
únicamente los mensajes más
serios, una vez que named está
estable
•
DNS pruebas y depuración
• A continuación se enlistan algunos
mensajes comunes
– Lame server. Si se ve este mensaje
sobre alguna de tus propias zonas,
quiere decir que algo está mal
configurado. El mensaje es
relativamente inocuo si es sobre
otra zona de Internet, porque es el
problema de alguien más
– Bad referral. Este mensaje indica una
incomunicación entre los servidores
de nombres de la zona
DNS pruebas y depuración
– Not authoritative for. Un servidor esclavo
no puede tener información con
autoridad para una zona.
Probablemente se está apuntando al
máster incorrecto, o quizá el máster
tiene problemas cargando la zona en
cuestión
– Rejected zone. named rechazó un
archivo de zona debido a que contiene
errores
– No NS RRs found. Un archivo de zona no
tiene registros NS después del registro
SOA. Podría ser que no estuviesen esos
registros, o que no comienzan con un
tabulador o un espacio en blanco. En el
segundo caso, los registros no se
DNS pruebas y depuración
• No default TTL set. La forma
preferida para poner un TTL por
omisión es con una cláusula $TTL al
principio del archivo de zona. Este
mensaje de error indica que el $TTL
está perdido. En Bind9 es requisito
indispensable el $TTL por lo que
named se rehúsa a cargar archivos
de zona que no lo especifiquen
DNS pruebas y depuración
• No root name server for class. Su
servidor tiene problemas para
encontrar los servidores de nombre
raíz. Revise su archivo de hints y la
conectividad a Internet del servidor
• Address already in use. El puerto en el
cual named quiere ejecutarse ya está
siendo utilizado por otro proceso,
probablemente otra copia de named.
Si no hay otro named por ahí,
probablemente se haya estrellado y
haya dejado un socket de control del
rndc abierto que tendrás que buscar y
borrar
DNS pruebas y depuración
• Una buena tabla de errores se puede
encontrar en
http://www.acmebw.com/askmrdns/bind-messages.htm
http://www.jalix.org/ressources/reseaux/misc/bind/~vrac/bind-messages.ht
DNS pruebas y depuración
• Los niveles de depuración de named
van desde el 0 hasta el 11
• Entre más grande sea el número, se
obtendrá mayor información
• El nivel 0 apaga los mensajes de
depuración
• Los niveles 1 y 2 están bien para
depurar la configuración o la base
de datos
• Después del nivel 4 son para los
programadores
DNS pruebas y depuración
• Se puede invocar named desde la
línea de comandos con la bandera –
d, por ejemplo
# named –d2
> amazon.com.
Server: 192.168.226.131
Address: 192.168.226.131#53
Non-authoritative answer:
amazon.com nameserver = udns1.ultradns.net.
amazon.com nameserver = udns2.ultradns.net.
Depuración con nslookup, dig y
host
debian:~# dig amazon.com. any
;; QUESTION SECTION:
;amazon.com. IN ANY
;; QUESTIONS:
; <<>> DiG 9.2.3 <<>> ns . @a.root-servers.net.
;; global options:
printcmd
;; Got answer:
;; QUESTION SECTION:
;.
IN NS
;; ANSWER SECTION:
.
518400 IN NS A.ROOT-SERVERS.NET.
.
518400 IN NS B.ROOT-SERVERS.NET.
.
518400 IN NS C.ROOT-SERVERS.NET.
.
518400 IN NS D.ROOT-SERVERS.NET.
El archivo de hints
;; ADDITIONAL SECTION:
A.ROOT-SERVERS.NET.
3600000 IN A 198.41.0.4
B.ROOT-SERVERS.NET.
3600000 IN A 192.228.79.201
C.ROOT-SERVERS.NET.
3600000 IN A 192.33.4.12
D.ROOT-SERVERS.NET.
3600000 IN A 128.8.10.90
E.ROOT-SERVERS.NET.
3600000 IN A 192.203.230.10
F.ROOT-SERVERS.NET.
3600000 IN A 192.5.5.241
G.ROOT-SERVERS.NET.
3600000 IN A 192.112.36.4
H.ROOT-SERVERS.NET.
3600000 IN A 128.63.2.53
I.ROOT-SERVERS.NET.
3600000 IN A 192.36.148.17
J.ROOT-SERVERS.NET.
3600000 IN A 192.58.128.30
K.ROOT-SERVERS.NET.
3600000 IN A 193.0.14.129
El archivo de hints
• Observe que un punto inicia al
primer conjunto de registros,
puesto que definen al dominio root,
para el cual aplican los registros NS
• Un archivo de hints actualizado
puede obtenerse de
ftp://ftp.nic.mil/domain/named.root
La configuración de
localhost
• El mapeo directo para el nombre
localhost o localhost.dominio se
hace en el archivo directo de zona
para el dominio
• Normalmente, cada servidor es amo
de su propio dominio inverso de
localhost
La configuración de
localhost
• En debian, el archivo de zona es el siguiente
debian:/etc/bind# cat /etc/bind/db.local
;
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache
TTL
;
@ IN NS localhost.
@ IN A 127.0.0.1
La configuración de
localhost
• El mapeo inverso para la dirección
del localhost, 127.0.0.1 nunca
cambia, por lo tanto, los tiempos de
expiración pueden ser muy grandes
La configuración de
localhost
• En debian el archivo es el siguiente
debian:/etc/bind# cat /etc/bind/db.127
;
;
$TTL 604800
@ IN SOA localhost. root.localhost. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS localhost.
1.0.0 IN PTR localhost.
La configuración de
localhost
• Observe que sólo está enlistado el
servidor local
• El significado de @ en este contexto
es "0.0.127.in-addr.arpa."
• Es necesario asegurarse que el mapa
inverso de 127.0.0.1 lo haga hacia
"localhost.domain" y no solamente
a "localhost"
• Esto es porque los servidores raíz
reciben muchas peticiones para
"localhost"