Anterior Siguiente Indice

4. Un dominio simple.

Como configurar su propio dominio.

4.1 Pero primero algo de teoría a secas.

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.

4.2 Nuestro propio dominio

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 N del T
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.

4.3 Relajémonos

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.


Anterior Siguiente Indice