Como configurar su propio dominio.
Antes de comenzar realmente con esta sección, voy a dar un poco de teoría
sobre cómo funciona DNS. Y lo va a leer porque será mejor para Vd. Si no
quiere, al menos debería echar un vistazo rápido. Deje el repaso cuando
sepa lo que debe incluir en su archivo named.boot
.
El DNS es un sistema jerárquico. La raíz se escribe como `.
' y se
denomina `root'. Debajo hay cierto número de Dominios de Nivel
Superior (Top Level Domains, TLDs), los más conocidos son
ORG, COM, EDU
y NET
, pero hay muchos más.
Cuando se busca una máquina, la pregunta procede recursivamente en la
jerarquía comenzando desde arriba. Si quiere localizar la dirección de
prep.ai.mit.edu
, su servidor de nombres ha de encontrar primero
un servidor de nombres que sirva a edu
. Pregunta al servidor
.
(ya conoce los servidores .
, es para lo que se utiliza el
archivo root.cache
), y el servidor .
proporcionará una lista
de servidores edu
:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
Comienza preguntando a un servidor raíz.
> server c.root-servers.net.
Default Server: c.root-servers.net
Address: 192.33.4.12
Pone el tipo de petición (Query) a NS
(Name Server
records).
> set q=ns
Pregunta por edu
.
> edu.
El punto (".") final aquí es significativo, indica al servidor que le
pedimos un edu
que está justo debajo de ".", y esto reduce la
búsqueda un poco.
edu nameserver = A.ROOT-SERVERS.NET
edu nameserver = H.ROOT-SERVERS.NET
edu nameserver = B.ROOT-SERVERS.NET
edu nameserver = C.ROOT-SERVERS.NET
edu nameserver = D.ROOT-SERVERS.NET
edu nameserver = E.ROOT-SERVERS.NET
edu nameserver = I.ROOT-SERVERS.NET
edu nameserver = F.ROOT-SERVERS.NET
edu nameserver = G.ROOT-SERVERS.NET
A.ROOT-SERVERS.NET internet address = 198.41.0.4
H.ROOT-SERVERS.NET internet address = 128.63.2.53
B.ROOT-SERVERS.NET internet address = 128.9.0.107
C.ROOT-SERVERS.NET internet address = 192.33.4.12
D.ROOT-SERVERS.NET internet address = 128.8.10.90
E.ROOT-SERVERS.NET internet address = 192.203.230.10
I.ROOT-SERVERS.NET internet address = 192.36.148.17
F.ROOT-SERVERS.NET internet address = 192.5.5.241
G.ROOT-SERVERS.NET internet address = 192.112.36.4
Esto nos dice que *.root-servers.net
sirve a edu.
, y así
podemos seguir preguntando a C
. Ahora queremos saber quién sirve el
siguiente nivel del nombre de dominio: mit.edu.
> mit.edu.
Server: c.root-servers.net
Address: 192.33.4.12
Non-authoritative answer:
mit.edu nameserver = STRAWB.mit.edu
mit.edu nameserver = W20NS.mit.edu
mit.edu nameserver = BITSY.mit.edu
Authoritative answers can be found from:
STRAWB.mit.edu internet address = 18.71.0.151
W20NS.mit.edu internet address = 18.70.0.160
BITSY.mit.edu internet address = 18.72.0.3
steawb, w20ns
y bitsy
sirven a mit
, selecciona uno
y pregunta por ai.mit.edu
:
> server W20NS.mit.edu.
Los nombres de máquina no son sensibles a mayúsculas/minúsculas, pero como yo uso el ratón para cortar y pegar, obtengo una copia tal y como aparece en la pantalla.
Server: W20NS.mit.edu
Address: 18.70.0.160
> ai.mit.edu.
Server: W20NS.mit.edu
Address: 18.70.0.160
Non-authoritative answer:
ai.mit.edu nameserver = WHEATIES.AI.MIT.EDU
ai.mit.edu nameserver = ALPHA-BITS.AI.MIT.EDU
ai.mit.edu nameserver = GRAPE-NUTS.AI.MIT.EDU
ai.mit.edu nameserver = TRIX.AI.MIT.EDU
ai.mit.edu nameserver = MUESLI.AI.MIT.EDU
Authoritative answers can be found from:
AI.MIT.EDU nameserver = WHEATIES.AI.MIT.EDU
AI.MIT.EDU nameserver = ALPHA-BITS.AI.MIT.EDU
AI.MIT.EDU nameserver = GRAPE-NUTS.AI.MIT.EDU
AI.MIT.EDU nameserver = TRIX.AI.MIT.EDU
AI.MIT.EDU nameserver = MUESLI.AI.MIT.EDU
WHEATIES.AI.MIT.EDU internet address = 128.52.32.13
WHEATIES.AI.MIT.EDU internet address = 128.52.35.13
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.32.5
ALPHA-BITS.AI.MIT.EDU internet address = 128.52.37.5
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.32.4
GRAPE-NUTS.AI.MIT.EDU internet address = 128.52.36.4
TRIX.AI.MIT.EDU internet address = 128.52.32.6
TRIX.AI.MIT.EDU internet address = 128.52.38.6
MUESLI.AI.MIT.EDU internet address = 128.52.32.7
MUESLI.AI.MIT.EDU internet address = 128.52.39.7
Entonces weaties.ai.mit.edu
es un servidor de nombres para
ai.mit.edu
:
> server WHEATIES.AI.MIT.EDU.
Default Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
Ahora cambia el tipo de solicitud; ha encontrado el servidor de nombres y
va a preguntar todo lo que queremos saber sobre prep.ai.mit.edu
.
> set q=any
> prep.ai.mit.edu.
Server: WHEATIES.AI.MIT.EDU
Addresses: 128.52.32.13, 128.52.35.13
prep.ai.mit.edu CPU = dec/decstation-5000.25 OS = unix
prep.ai.mit.edu
inet address = 18.159.0.42, protocol = tcp
#21 #23 #25 #79
prep.ai.mit.edu preference = 1, mail exchanger = life.ai.mit.edu
prep.ai.mit.edu internet address = 18.159.0.42
ai.mit.edu nameserver = alpha-bits.ai.mit.edu
ai.mit.edu nameserver = wheaties.ai.mit.edu
ai.mit.edu nameserver = grape-nuts.ai.mit.edu
ai.mit.edu nameserver = mini-wheats.ai.mit.edu
ai.mit.edu nameserver = trix.ai.mit.edu
ai.mit.edu nameserver = muesli.ai.mit.edu
ai.mit.edu nameserver = count-chocula.ai.mit.edu
ai.mit.edu nameserver = life.ai.mit.edu
ai.mit.edu nameserver = mintaka.lcs.mit.edu
life.ai.mit.edu internet address = 128.52.32.80
alpha-bits.ai.mit.edu internet address = 128.52.32.5
wheaties.ai.mit.edu internet address = 128.52.35.13
wheaties.ai.mit.edu internet address = 128.52.32.13
grape-nuts.ai.mit.edu internet address = 128.52.36.4
grape-nuts.ai.mit.edu internet address = 128.52.32.4
mini-wheats.ai.mit.edu internet address = 128.52.32.11
mini-wheats.ai.mit.edu internet address = 128.52.54.11
mintaka.lcs.mit.edu internet address = 18.26.0.36
De esta forma comenzando en .
ha encontrado los sucesivos servidores
de nombre para el siguiente nivel en el nombre de dominio. Si ha usado su
propio servidor DNS en lugar de usar todos esos otros servidores, su
named
, desde luego, habrá almacenado en el caché toda la
información que haya encontrado mientras profundizaba en la búsqueda, y en
consecuencia no tendrá que preguntar de nuevo durante un tiempo.
Se habla mucho menos sobre él, pero un dominio importante es
in-addr.arpa
. También está anidado como los dominios
'normales'. in-addr.arpa
nos permite determinar el
nombre de la máquina cuando conocemos su dirección IP. Una cosa importante
aquí es observar que que las direcciones IP están escritas en orden
inverso en el dominio in-addr.arpa
. Si tiene la dirección de
máquina 192.128.52.43
, named
procede como para el ejemplo de
prep.ai.mit.edu
: Busca los servidores arpa.
. Busca los
servidores in-addr.arpa.
, los servidores
192.in-addr.arpa.
, los servidores 128.192.in-addr.arpa.
, y
los servidores 52.128.192.in-addr.arpa.
y finalmente, los registros
necesarios para 43.52.128.192.in-addr.arpa.
¿Inteligente? (Diga
`sí'). La inversión de números puede ser confusa los 2 primeros años.
He contado una mentira. DNS no funciona como he dicho de forma literal. Pero es bastante parecido.
Ahora vamos a definir nuestro propio dominio. Vamos a crear el dominio
linux.bogus
y definir máquinas en él. Uso un nombre de dominio
totalmente falso para estar seguro de que no molestamos a nadie de fuera.
Ya hemos comenzado esta parte con la siguiente línea en
named.boot
:
primary 0.0.127.in-addr.arpa pz/127.0.0
Por favor tome nota de la ausencia de `.' al final de los nombres de
dominio en este archivo. La primera línea nombra al archivo
pz/127.0.0
como definición de 0.0.127.in-addr.arpa
. Ya hemos
configurado este archivo, en él podremos leer:
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
1 ; Numero de Serie
28800 ; Tasa de Refresco
7200 ; Tasa de Reintento
604800 ; Caducidad para secundario
86400) ; Tiempo de Validez para Clientes
NS ns.linux.bogus.
1 PTR localhost.
Por favor observe los `.
' al final de los nombres de dominio completo
en contraste con el archivo named.boot
anterior. A algunas
personas les gusta iniciar cada zona del archivo con una directiva
$ORIGIN
, pero esto es superfluo. El origen (lugar de la
jerarquía DNS a donde pertenece) de un fichero de zona se especifica en la
columna dominio
del archivo named.boot
; en este caso es
0.0.127.in-addr.arpa.
Este ``fichero de zona'' contiene tres registros de recursos
(RRs): Un RR SOA
, Un RR NS
y un RR PTR
.
SOA
es una abreviatura de Start Of Authority. La
`@
' es una notación especial que simboliza el origen, y como
la columna dominio
para este archivo indica
0.0.127.in-addr.arpa
. La primera línea realmente significa:
0.0.127.IN-ADDR.ARPA. IN SOA ...
NS
es el RR Name Server
(Servidor de Nombres), e indica
a DNS qué máquina es el servidor de nombres del dominio. Y finalmente el
registro PTR
tiene valor 1
(igual a
1.0.0.127.IN-ADDR.ARPA
, esto es, 127.0.0.1
) que es el
localhost
de named
.
El registro SOA
es el preámbulo de todos los archivos de zona y
debe haber uno exactamente en cada archivo de zona, como primer registro
de todos. El registro SOA
describe la zona, de dónde proviene
(una máquina llamada linux.bogus
), quién es el responsable de su
contenido (hostmaster@linux.bogus
), qué versión del
archivo de zona es (Numero de Serie
, 1
), y otras cosas que
tienen que ver con el caché y los servidores secundarios DNS. Para el
resto de los campos (Tasa de Refresco
, Tasa de
Reintento
, Caducidad para secundario
y Tiempo de Validez
para Clientes
) use los valores que aparecen aquí para mayor
seguridad.
El registro NS
nos indica quién efectúa el servicio DNS para
0.0.127.in-addr.arpa
, que es ns.linux.bogus
. El registro
PTR
nos dice que 1.0.0.127.in-addr.arpa
(aka
127.0.0.1
) es conocido como localhost
.
Ahora reiniciamos named
(el comando es ndc restart
) y
usamos nslookup
para examinar lo que ha hecho:
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> 127.0.0.1
Server: localhost
Address: 127.0.0.1
Name: localhost
Address: 127.0.0.1
así obtiene localhost
de 127.0.0.1
, bien. Ahora para
nuestra tarea principal, el dominio linux.bogus
, inserte una
nueva línea, primary
, en named.boot
:
primary linux.bogus pz/linux.bogus
Observe que continúa la ausencia de ".
" final en el nombre de dominio
del archivo named.boot
.
En el archivo de zona de linux.bogus
pondremos algunos datos
totalmente falsos
Por si no lo ha notado todavía,
bogus en inglés significa precisamente falso.
;
; Fichero de zona para linux.bogus
;
; Minimo indspensable para tener funcionando un dominio
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199511301 ; Numero de serie, fecha de hoy + n. de serie de hoy
28800 ; Tasa de Refresco, en segundos
7200 ; Tasa de Reintento, en segundos
3600000 ; Caducidad para secundario, en segundos
86400 ) ; Tiempo de Validez para Clientes, en segundos
NS ns.linux.bogus.
NS ns.friend.bogus.
MX 10 mail.linux.bogus ; Intercambiador de Correo Primario
MX 20 mail.friend.bogus. ; Intercambiador de Correo Secundario
localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4
Deben de observarse dos cosas sobre los registros SOA
.
ns.linux.bogus
debe ser una máquina actual con un registro
A
. No es legal tener un registro CNAME
para la máquina
mencionada en el registro SOA
. Su nombre no necesita ser
ns
, podría ser cualquier nombre legal de máquina. A continuación,
en hostmaster.linux.bogus
deberá aparecer algo como
hostmaster@linux.bogus
; esto sería un alias de email, o
una cuenta de correo, donde la(s) persona(s) que realizan el mantenimiento
de DNS deberían leer con frecuencia el correo. Cualquier email respecto
del dominio será mandado a la dirección aquí indicada. El nombre no tiene
por que ser hostmaster
, puede ser cualquier dirección email
legal, pero la dirección email hostmaster
funcionará bien.
Hay un nuevo tipo de RR
en este archivo, el MX
, o
Mail eXchanger. Este indica el sistema de correo a donde mandar
el correo dirigido a alguien@linux.bogus
, pudiendo ser
también mail.linux.bogus
o mail.friend.bogus
. El número
que precede a cada nombre de máquina es la prioridad del RR MX
.
El RR
con el número más bajo (10
) es aquel al que el correo será
enviado primero. Si este falla, puede ser mandado a otro con un número
más alto, que será gestor secundario de correo, como
mail.friend.bogus
que tiene una prioridad 20
aquí.
Reinicie named
ejecutando ndc restart
. Examine los
resultados con nslookup
:
$ nslookup
> set q=any
> linux.bogus
Server: localhost
Address: 127.0.0.1
linux.bogus
origin = linux.bogus
mail addr = hostmaster.linux.bogus
serial = 199511301
refresh = 28800 (8 hours)
retry = 7200 (2 hours)
expire = 604800 (7 days)
minimum ttl = 86400 (1 day)
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
linux.bogus preference = 20, mail exchanger = mail.friend.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 127.0.0.2
mail.linux.bogus internet address = 127.0.0.4
Con un examen cuidadoso podrá descubrir un error. La línea
linux.bogus preference = 10, mail exchanger = mail.linux.bogus.linux.bogus
está equivocada. Debería ser
linux.bogus preference = 10, mail exchanger = mail.linux.bogus
Cometí el error de forma deliberada para que aprenda de él :-)
Mirando en el archivo de zona podemos ver que la línea
@ MX 10 mail.linux.bogus ; Intercambiador de Correo Primario
no tiene punto. O tiene demasiados linux.bogus
. Si un nombre de
máquina no termina en punto en un archivo de zona, el origen es añadido a
su final. Así,
@ MX 10 mail.linux.bogus. ; Intercambiador de Correo Primario
o
@ MX 10 mail ; Primary Mail Exchanger
serán correctos. Yo prefiero la última forma, hay que escribir menos. En
un archivo de zona el dominio debería ser escrito y terminado con un
punto, o no debe ser incluido, en cuyo caso se referirá al origen por
defecto. Debo hacer hincapié que en el archivo named.boot
no
debería haber puntos después de los nombres de dominio. No tiene ni idea
de cuantas veces un '.' por estar o por no estar ha hecho fallar toda una
configuración y ha confundido horrorosamente a la gente...
Una vez hecha esta puntualización, he aquí el nuevo archivo de zona, con algo de información extra también:
;
; Archivo de zona para linux.bogus
;
; minimo indispensable para hacer funcionar un dominio
;
@ IN SOA ns.linux.bogus. hostmaster.linux.bogus. (
199511301 ; Numero de Serie, fecha de hoy + n. de serie de hoy
28800 ; Tasa de Refresco, en segundos
7200 ; Tasa de Reintento, en segundos
604800 ; Caducidad para secundario, en segundos
86400 ) ; Validez para Clientes, en segundos
NS ns ; Direccion de Internet del servidor de nombres
NS ns.friend.bogus.
MX 10 mail ; Intercambiador de Correo Primario
MX 20 mail.friend.bogus. ; Intercambiador de Correo Secundario
localhost A 127.0.0.1
ns A 127.0.0.2
mail A 127.0.0.4
;
; Extras
;
@ TXT "Linux.Bogus, your DNS consultants"
ns MX 10 mail
MX 20 mail.friend.bogus.
HINFO "Pentium" "Linux 1.2"
TXT "RMS"
richard CNAME ns
www CNAME ns
donald A 127.0.0.3
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "i486" "Linux 1.2"
TXT "DEK"
mail MX 10 mail
MX 20 mail.friend.bogus.
HINFO "386sx" "Linux 1.0.9"
ftp A 127.0.0.5
MX 10 mail
MX 20 mail.friend.bogus.
HINFO "P6" "Linux 1.3.59"
Puede que quiera desplazar los tres primeros registros tipo A
(localhost, ns
y mail
) junto con los otros registros de su mismo
tipo (donald
, mail
, y ftp
), en vez de colocarlos separados
al principio como aquí.
Hay varios registros nuevos aquí: HINFO
(Host
INFOrmation), tiene dos partes, es una buena costumbre poner comillas
a cada uno. La primera parte es el hardware o CPU de la máquina, y la
segunda parte corresponde al software o Sistema Operativo de la misma.
ns
tiene una CPU Pentium con Linux 1.2. El registro TXT
es
un texto en formato libre que puede usar para cualquier cosa que le
interese. CNAME
(Canonical NAME) es una forma de dar a
cada máquina varios nombres. Por tanto richard
y www
son
alias para ns
. Es importante observar que los registros
A
, MX
, CNAME
y SOA
nunca deben
hacer referencia al registro CNAME
, sólo pueden referirse a
registros A
.
fulanito CNAME richard ; ¡¡¡NO!!!
siendo correcto tener
fulanito CNAME ns ; ¡¡¡SI!!!
También es importante observar que CNAME
no es un nombre de
máquina legal para direcciones de correo:
webmaster@www.linux.bogus
es una dirección email ilegal
dada en la configuración anterior. Encontrará muy pocos administradores de
correo de Ahí Afuera que recomienden esta regla, incluso si a Vd. le
funciona. La forma de evitar esto es usar un registro A
(y
quizás algunos otros también, como un registro MX
) en su lugar:
www A 127.0.0.2
Paul Vixie, el principal gurú de named
recomienda no usar CNAME.
Por tanto considere el no utilizarlo seriamente.
Cargue la nueva base de datos ejecutando ndc reload
, esto provoca
la lectura de sus archivos de nuevo.
$ nslookup
Default Server: localhost
Address: 127.0.0.1
> ls -d linux.bogus
Esto haría que todos los registros fuesen listados.
[localhost]
linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400)
linux.bogus. NS ns.linux.bogus
linux.bogus. NS ns.friend.bogus
linux.bogus. MX 10 mail.linux.bogus
linux.bogus. MX 20 mail.friend.bogus
linux.bogus. TXT "Linux.Bogus, your DNS consultants"
localhost A 127.0.0.1
mail A 127.0.0.4
mail MX 10 mail.linux.bogus
mail MX 20 mail.friend.bogus
mail HINFO 386sx Linux 1.0.9
donald A 127.0.0.3
donald MX 10 mail.linux.bogus
donald MX 20 mail.friend.bogus
donald HINFO i486 Linux 1.2
donald TXT "DEK"
www CNAME ns.linux.bogus
richard CNAME ns.linux.bogus
ftp A 127.0.0.5
ftp MX 10 mail.linux.bogus
ftp MX 20 mail.friend.bogus
ftp HINFO P6 Linux 1.3.59
ns A 127.0.0.2
ns MX 10 mail.linux.bogus
ns MX 20 mail.friend.bogus
ns HINFO Pentium Linux 1.2
ns TXT "RMS"
linux.bogus. SOA ns.linux.bogus hostmaster.linux.bogus. (199511301 28800 7200 604800 86400)
Esto está bien. Comprobemos qué dice para www
sólo:
> set q=any
> www.linux.bogus.
Server: localhost
Address: 127.0.0.1
www.linux.bogus canonical name = ns.linux.bogus
...En otras palabras, el nombre real de
www.linux.bogus
es ns.linux.bogus
linux.bogus nameserver = ns.linux.bogus
linux.bogus nameserver = ns.friend.bogus
ns.linux.bogus internet address = 127.0.0.2
y ns.linux.bogus
tiene la dirección 127.0.0.2
. Parece
correcto también.
Desde luego, este dominio es falso, y como tal son todas sus direcciones, y quizás, desafortunadamente sea un poco confuso. Para un ejemplo real de dominio vea la siguiente sección.