Вы находитесь на странице: 1из 128

CentOS Linux y Servicios de Red

versiones 6 y 7

Antonio Vazquez
Este libro est a la venta en http://leanpub.com/centosserviciosdered

Esta versin se public en 2016-05-17

This is a Leanpub book. Leanpub empowers authors and publishers with the Lean Publishing
process. Lean Publishing is the act of publishing an in-progress ebook using lightweight tools and
many iterations to get reader feedback, pivot until you have the right book and build traction once
you do.

2014 - 2016 Antonio Vazquez


ndice general

1.- Instalacin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.- CentOS 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.1.- CentOS 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15

2.-Administracin bsica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.1.-Comandos bsicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
2.2.-Crear y editar ficheros . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
2.3.- Redirigir la salida de un comando . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.4.- Instalar software . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
2.5.- Entorno grfico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
2.6.- Otros comandos tiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.7.- SELinux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61

3.- Networking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.1.- IPv4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
3.2.- IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
3.3.- Herramientas de red . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

4.- DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.1.- Servicio DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
4.2.- Instalar un servidor DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
4.3.- Instalando un servidor maestro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
4.4.- Configuracin del cliente . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99
4.5.- Servidores esclavos y transferencias de zona . . . . . . . . . . . . . . . . . . . . . . 101
4.6.- DNSSEC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
4.7.- Herramientas de diagnstico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
4.8.- Resolucin de problemas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
4.9.- Ficheros de log . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
1.- Instalacin
1.1.- CentOS 6
Como suele ocurrir con todo, existe ms de una forma de instalar CentOS en un ordenador. Sin
embargo aqui nicamente nos centraremos en la instalacin tpica desde DVD. Lo primero que
hay que hacer es conseguir los DVDs. stos se pueden descargar desde el sitio oficial de CentOS
en https://www.centos.org/. En el momento de escribir este libro, los archivos ISO para Centos
6 se podan descargar desde los enlaces disponibles en http://wiki.centos.org/Download. Podemos
seleccionar la versin exacta que queremos instalar, la arquitectura (32 64 bits) y el tipo de instacin
(por red, mnima, etc). Descargaremos los ficheros CentOS-6.2-i386-bin-DVD1.iso y CentOS-6.2-
i386-bin-DVD2.iso. Una vez que tenemos listos los DVDs la instalacin es bastante sencilla. Nos
aseguramos de que el ordenador est configurado para arrancar desde DVD y lo reiniciamos con el
primer DVD de instalacin insertado. Despus de unos segundos veremos la pantalla de la Fig. 1.

Fig 1:Arrancando con el DVD de instalacin

Elegiremos la primera opcin Install or upgrade an existing system, esto lanzar el programa de
instalacin. Ahora se nos ofrece la posibilidad de comprobar el medio de instalacin (Fig. 2). Si

1
1.- Instalacin 2

estamos seguros de que los DVDs estn bien pulsamos en Skip.

Fig 2:Comprobando los medios de instalacin

Ahora el sistema arrancar el instalador grfico (Fig. 3).


1.- Instalacin 3

Fig 3:El instalador grfico

En las siguientes pantallas tendremos que elegir el idioma y la disposicin del teclado (Fig. 4 y Fig.
5).
1.- Instalacin 4

Fig 4:Idioma
1.- Instalacin 5

Fig 5:Disposicin del teclado

Ahora tenemos que especificar si estamos instalando CentOS en un disco estndar o en un dispositivo
especial como un disco de una SAN, un dispositivo iSCSI, etc La mayora de las veces instalaremos
sobre discos estndar as que seleccionaremos la primera opcin (Fig. 6).
1.- Instalacin 6

Fig 6:Seleccionando el tipo de dispositivo

Nada ms pulsar el botn Next aparecer un mensaje de advertencia (Fig. 7) para informarnos de
que se va a eliminar toda la informacin que pudiera haber en el disco. Como se trata de un disco
vaco, o bien de un disco cuyos datos ya no necesitamos, pulsamos en Yes, discard any data.
1.- Instalacin 7

Fig 7:Advertencia, el disco podra tener datos

El programa ahora nos pide el nombre y el dominio del ordenador que estamos a punto de instalar
(Fig. 8). Podemos introducir esta informacin ahora o hacerlo una vez que la instalacin haya
terminado. Pulsamos Next.
1.- Instalacin 8

Fig 8:Nombre de mquina y dominio

En las siguientes pantallas tendremos que elegir la zona horaria y la contrasea del usuario root (Fig.
9 y Fig 10).
1.- Instalacin 9

Fig 9:Zona horaria


1.- Instalacin 10

Fig 10:Contrasea de root

Ahora se nos presentan varias opciones antes de comenzar con la instalacin tal cual (Fig. 11).
Podemos elegir utilizar todo el disco independientemente de las particiones existentes, usar solo
las particiones Linux, solo el espacio libre, personalizar el particionado, etc Como el particionado
por defecto resulta aceptable elegiremos la primera opcin y utilizaremos todo el disco. Aunque si
tenemos perfectamente claro el papel que va a desempear el servidor en la red sera mejor optar
por un particionamiento personalizado con volmenes o particiones separados para los directorios
/home, /var, etc
1.- Instalacin 11

Fig 11:Opciones de particionado del disco

Veremos otro mensaje de advertencia (Fig. 12) para recordarnos que los cambios se van a escribir a
disco, y acto seguido se nos pedir que especifiquemos qu software queremos instalar.
A la hora de elegir el software tenemos varias opciones predefinidas como servidor de Bases de
Datos, servidor Web, etc Elegiremos inicialmente la opcin Instalacin mnima (Fig. 13) y ms
tarde instalaremos el software adicional segn lo necesitemos.

Fig 12:Escribiendo a disco


1.- Instalacin 12

Fig 13:Seleccin de software

Finalmente comienza la instalacin propiamente dicha (Fig. 14).


1.- Instalacin 13

Fig 14:Instalando los paquetes de software

Despus de unos minutos la instalacin habr finalizado (Fig. 15) y tendremos que reiniciar el
sistema.
1.- Instalacin 14

Fig 15:Felicidades!

Una vez que el sistema arranque ya tenemos un servidor CentOS funcional (Fig. 16).
1.- Instalacin 15

Fig 16:Nuestro flamante servidor

1.1.- CentOS 7
La instalacin de CentOS 7 la realizaremos tambin desde el DVD. En el momento de escribir este
libro la imagen del DVD se puede descargar desde su sitio oficial. DEspus de descargar el fichero
podremos grabarlo en un DVD. Despus de eso ya estamos listos para arrancar el servidor con el
DVD de instalacin, siempre que el ordenador est ya configurado en la BIOS para arrancar desde
un DVD. En unos segundos aparecer la pantalla de la Fig. 17.
http://www.centos.org/download/
1.- Instalacin 16

Fig 17:Arrancando con el DVD de CentOS 7 DVD

Seleccionamos la primera opcin, Install CentOS 7. Ahora se lanzar el instalador grfico y se nos
preguntar qu idioma queremos utilizar durante la instalacin (Fig. 18).
1.- Instalacin 17

Fig 18:Instalando CentOS 7

Despus de hacer click en el botn Continue podemos ver un breve resumen de la instalacin (v.
Fig 19).
1.- Instalacin 18

Fig 19:Instalando CentOS 7

En esta pantalla podemos fijar la zona horaria (Fig. 20) o cambiar la distribucin del teclado (Fig.
21).
1.- Instalacin 19

Fig 20:Eligiendo la zona horaria


1.- Instalacin 20

Fig 21:Seleccionando una distribucin del teclado

Tambie podemos elegir qu paquetes de software queremos instalar (Fig. 22). La opcin selec-
cionada por defecto es la instalacin mnima (Minimal install), pero hay muchas otras opciones
disponibles, como por ejemplo Web Server o Virtualization Host. Mantendremos la opcin por
defecto: Minimal Install.
1.- Instalacin 21

Fig 22:Seleccin de software

Antes de comenzar con la instalacin propiamente dicha, necesitamos elegir el dispositivo donde
vamos a instalar (Fig.23).
1.- Instalacin 22

Fig 23:Destino de la instalacin

En la mayora de los casos la instalacin se realizar sobre el disco local, pero tambin se pueden
seleccionar otros dispositivos como discos de la SAN.
En este punto tambin podramos configurar la red pero, como preferimos hacerlo despus de la
instalacin, podemos omitir este paso y hacer click en el botn Begin Installation.
Mientras el sistema est copiando ficheros (Fig. 24) podemos configurar la contrasea del root y
crear usuarios adicionales (Fig. 25 y 26).
1.- Instalacin 23

Fig 24:Instalando el sistema


1.- Instalacin 24

Fig 25:Configurando la contrasea del root


1.- Instalacin 25

Fig 26:Creando usuarios adicionales

Una vez que termina la instalacin (Fig. 27) podemos reiniciar la mquina y comenzar a usar CentOS
7.
1.- Instalacin 26

Fig 27:Instalacin completa!


2.-Administracin bsica
Una vez que el sistema est instalado y listo es el momento de empezar a hacer un buen uso de l.
Este no es un libro sobre administracin bsica de Linux, pero intentaremos explicar brevemente los
comandos ms importantes que un administrador de sistemas Linux debera conocer.

2.1.-Comandos bsicos

2.1.1.-Directorios y sus contenidos(ls y cd)


Una vez logados en el sistema como root, con la contrasea que especificamos al instalar, se nos
mostrar el prompt. Inicialmente nuestra ubicacin ser el directorio home del root (/root), podemos
confirmar este punto con el comando pwd. Si queremos listar los ficheros y subdirectorios dentro
de /root podemos hacerlo tecleando ls.
Igual que en la vida real es posible disponer de varias carpetas para organizar nuestros documentos,
tambin se puede hacer lo mismo en el ordenador y crear directorios con el comando mkdir
nombre_de_directorio. Ahora, para acceder a este directorio escribiremos cd nombre_de_directorio.
Ms tarde podemos retornar al directorio superior aadiendo dos puntos al comando cd (v. Fig. 28).

Fig 28:Algunos comandos bsicos

27
2.-Administracin bsica 28

2.1.2.-Crear usuarios
Antes nos hemos logado con el usuario root, esto resulta aceptable en un sistema de prueba pero
no es aconsejable hacerlo en un sistema en produccin. En vez de esto, lo mejor es logarse con un
usuario estndar y cambiar al usuario root cuando haya que realizar tareas administrativas. Vamos
a ver cmo hacerlo.
Primero tendremos que crear el usuario estndar con useradd, useradd acepta varios parmetros
en lnea de comandos, pero en este caso solamente usaremos -m para crear el directorio home del
usuario. Si no estamos seguros de la lista de parmetros asociada con cada comando (casi) siempre
podemos teclear comando -h y aparecer un texto de ayuda.
As que tecleamos useradd -m antonio y creamos el usuario. Ahora tenemos que asignarle a este
usuario una contrasea. Lo hacemos con passwd nombre_de_usuario.

1 [root@delphos ~]# useradd -m antonio


2 [root@delphos ~]# passwd antonio
3 Changing password for user antonio.
4 New password:
5 BAD PASSWORD: it is based on a dictionary word
6 BAD PASSWORD: is too simple
7 Retype new password:
8 passwd: all authentication tokens updated successfully.

Ahora que hemos creado el usuario abandonamos la sesin con exit y volvemos a logarnos con el
usuario que acabamos de crear. A partir de ahora si queremos realizar labores de administracin
podemos cambiar a root con el comando su. Cuando terminemos tecleamos exit para volver a la
cuenta estndar. Si en un momento no estamos seguros del usuario con el que estamos logados
actualmente, podemos averiguarlo en cualquier momento con el comando whoami.

1 [antonio@delphos ~]$ pwd


2 /home/antonio
3 [antonio@delphos ~]$ su root
4 Password:
5 [root@delphos antonio]# whoami
6 root
7 [root@delphos antonio]# exit
8 exit
9 [antonio@delphos ~]$ whoami
10 antonio
2.-Administracin bsica 29

2.2.-Crear y editar ficheros


Cuando se administra un servidor, una de las acciones ms habituales y repetidas es editar ficheros
de configuracin. Esto se hace con editores de texto. Linux incluye varios de ellos, tanto en modo
texto como en modo grfico.

2.2.1.-vi
Posiblemente el editor de texto ms extendido en el mundo de Linux y Unix sea vi. Por eso resulta
recomandable que todo administrador de Linux conozca, al menos bsicamente, este editor.
PAra crear un nuevo fichero de texto o editar uno ya existente pasaremos el nombre de fichero como
parmetro. Por ejemplo podramos escribir vi nuevo_fichero. Aparecer una pantalla en blanco (v.
Fig. 29). Pero antes de introducir algn texto tenemos que pulsar la tecla i. Al hacerlo estamos
cambiando del modo comando al modo insercin.

Fig 29:Crear un nuevo fichero con vi

Una vez en el modo insertar podemos teclear el texto (v. Fig. 30).
2.-Administracin bsica 30

Fig 30:Insertar texto en vi

Si cometemos un error o queremos cambiar algo deberemos cambiar de nuevo al modo comando
pulsando la tecla esc. Ahora podremos mover el cursor con las teclas del cursos y suprimir un carcter
con la tecla x. Por ejemplo, si queremos sustituir la palabra king por queen colocaremos el cursor
sobre la letra k y pulsaremos la tecla x 4 veces. Una vez que hemos borrado la palabra king
tendremos que teclear el nuevo texto, para ello cambiamos otra vez a modo insertar pulsando la
tecla i. Tendremos que repetir este proceso cada vez que queramos cambiar o borrar algo y cuando
hayamos terminado guardaremos el fichero y cerraremos vi. Para guardar el fichero en cualquier
momento basta con cambiar a modo comando y teclear :w sin las comillas (v. Fig. 31). Para salir del
programa hacemos exactamente lo mismo pero en lugar de teclear :w teclearemos :q. Tambin
es posible guardar y salir en una misma operacin con :wq.
2.-Administracin bsica 31

Fig 31:Guardar el fichero de texto

2.2.2.-nano
Otro editor de texto bastante conocido en Linux es nano. Su uso no est tan extendido como el de
vi pero, por otra parte, mucha gente lo considera ms amigable.
Nano normalmente no se instala por defecto, por lo que ser necesario instalarlo con yum (v. seccin
2.3.- Instalando software).

1 [root@delphos ~]# nano


2 -bash: nano: command not found
3 [root@delphos ~]# yum provides nano
4 Loaded plugins: fastestmirror
5 Loading mirror speeds from cached hostfile
6 * c6-media:
7 nano-2.0.9-7.el6.i686 : A small text editor
8 Repo : c6-media
9 Matched from:
10
11 [root@delphos ~]# yum install nano

Para abrir o crear un fichero solo necesitamos teclear nano nombre_del_fichero Por ejemplo,
nano otro_fichero_de_texto.txt. Una vez que lanzamos nano (v. Fig. 32) podemos teclear el texto
directamente, usando las teclas exactamente igual que haramos en cualquier procesador de texto
del tipo WYSIWYG. Cuando hayamos terminado pulsaremos Ctrl-X para guardar el fichero.
2.-Administracin bsica 32

Fig 32:Nano

2.2.3.-cat
Otro de los comandos que podemos utilizar es cat, el cual mostrar directamente en pantalla el
contenido del fichero que se le pase como parmetro. Por ejemplo, si quisieramos ver el contenido
del fichero /etc/group teclearamos esto:

1 [root@localhost named]# cat /etc/group


2 root:x:0:root
3 bin:x:1:root,bin,daemon
4 daemon:x:2:root,bin,daemon
5 sys:x:3:root,bin,adm
6 adm:x:4:root,adm,daemon
7 tty:x:5:
8 .
9 .
10 .

2.2.4.-grep
Este es uno de los comandos ms tiles para el administrador. Como entrada recibe un fichero o bien
la salida de otro comando y muestra solo las lneas del fichero que contienen un determinado patrn.
Por ejemplo, para ver el contenido del fichero /etc/passwd podramos usar cat como ya hemos visto.
2.-Administracin bsica 33

1 [root@delphos ~]# cat /etc/passwd


2 root:x:0:0:root:/root:/bin/bash
3 bin:x:1:1:bin:/bin:/sbin/nologin
4 daemon:x:2:2:daemon:/sbin:/sbin/nologin
5 adm:x:3:4:adm:/var/adm:/sbin/nologin
6 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7 sync:x:5:0:sync:/sbin:/bin/sync
8 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
9 halt:x:7:0:halt:/sbin:/sbin/halt
10 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
11 uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
12 operator:x:11:0:operator:/root:/sbin/nologin
13 games:x:12:100:games:/usr/games:/sbin/nologin
14 gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
15 ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
16 nobody:x:99:99:Nobody:/:/sbin/nologin
17 dbus:x:81:81:System message bus:/:/sbin/nologin
18 vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
19 saslauth:x:499:76:"Saslauthd user":/var/empty/saslauth:/sbin/nologin
20 postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21 qpidd:x:498:499:Owner of Qpidd Daemons:/var/lib/qpidd:/sbin/nologin
22 sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
23 named:x:25:25:Named:/var/named:/sbin/nologin
24 ntp:x:38:38::/etc/ntp:/sbin/nologin
25 dhcpd:x:177:177:DHCP server:/:/sbin/nologin
26 tcpdump:x:72:72::/:/sbin/nologin
27 apache:x:48:48:Apache:/var/www:/sbin/nologin
28 antonio:x:500:500::/home/antonio:/bin/bash

Pero si quisieramos ver solamente la lnea del usuario root podramos pasar la salida del cat al
comando grep. Para hacer esto necesitamos conectar ambos comandos con el smbolo |, lo que se
denomina en ingls pipe. Escribiramos esto:

1 [root@delphos ~]# cat /etc/passwd | grep root


2 root:x:0:0:root:/root:/bin/bash

Ahora solo se muestran las lineas que contienen la palabra root.


Una opcin muy til de grep es -v, lo que hace esta opcin es mostrar todas las lneas que NO
contienen un cierto trmino o patrn. Por ejemplo, varios ficheros de configuracin tienen muchas
lneas comentadas que comienzan por el smbolo (#). En estos casos siempre resulta mucho ms fcil
ver solo las lneas que no estn comentadas.
2.-Administracin bsica 34

1 [root@delphos ~]# cat /etc/ssh/sshd_config | grep -v "#"


2
3 .
4 .
5 .
6 Protocol 2
7 SyslogFacility AUTHPRIV
8 .
9 .
10 PasswordAuthentication yes
11 ChallengeResponseAuthentication no
12 .
13 .

2.2.5.-more
Si el fichero que intentamos ver con cat es demasiado grande, no podremos ver todo el contenido
en una nica pantalla y el texto se desplazar automticamente hacia abajo. Si queremos ver el
contenido completo podemos usar el comando more. De este modo podemos ver todo el contenido
pantalla a pantalla, pasando manualmente de una a otra.
[root@localhost ]# more /var/log/messages

Fig 33:Viendo el contenido de un fichero con more


2.-Administracin bsica 35

2.2.6.-less
El comando less es muy parecido a more, con l tambin podemos ver un fichero grande pantalla a
pantalla. La nica diferencia es que less nos permite retroceder a la pgina anterior, mientras que con
more cuando avanzamos a la siguiente pantalla ya no podemos retroceder (al menos que salgamos
de more y lo ejecutemos de nuevo).

2.2.7.-head
Hemos visto que podemos usar cat para ver el contenido de un fichero. Sin embargo, si el fichero es
muy grande el contenido ocupar varias pantallas. Como ya hemos visto podemos usar more o less
para ver todo el contenido pantalla a pantalla, pero es posible que solo queramos ver las primeras
lneas. Si este es el caso podemos escribir head nombre_del_fichero y veremos las 10 primeras lneas
(por defecto) del fichero.

1 [root@localhost named]# head /etc/group


2 root:x:0:root
3 bin:x:1:root,bin,daemon
4 daemon:x:2:root,bin,daemon
5 sys:x:3:root,bin,adm
6 adm:x:4:root,adm,daemon
7 tty:x:5:
8 disk:x:6:root
9 lp:x:7:daemon,lp
10 mem:x:8:
11 kmem:x:9:
12 [root@localhost named]#

Si queremos ver solo las 3 primeras lneas usaremos -n 3. Por ejemplo:

1 [root@localhost named]# head -n 3 /etc/group


2 root:x:0:root
3 bin:x:1:root,bin,daemon
4 daemon:x:2:root,bin,daemon
5 [root@localhost named]#

2.2.8.-tail
Tail es un comando similar a head, pero muestra las ltimas lneas del fichero en lugar de las
primeras. Para ver las ltimas 4 lneas del fichero /etc/group podemos hacer esto:
2.-Administracin bsica 36

1 [root@localhost named]# tail -n 4 /etc/group


2 qpidd:x:499:
3 sshd:x:74:
4 antonio:x:500:
5 named:x:25:
6 [root@localhost named]#

Una opcin realmente til de tail es -f. Con ella se mostrarn en pantalla las ltimas lneas del fichero
y las lneas que se vayan aadiendo a partir de ese momento. Por ejemplo, si queremos ver qu
eventos del sistema estn teniendo lugar en este momento podemos abrir el fichero /var/log/messages
con la opcin -f. Cuando hayamos terminado podemos salir pulsando Ctrl-C.

2.3.- Redirigir la salida de un comando


Al hablar del comando grep, vimos que podamos asociar la salida de un programa a la entrada de
otro programa. Cuando tecleamos cat /etc/passwd | grep root, lo que estamos haciendo es pasar
los datos de salida del comando cat como parmetro de entrada para el programa grep.
Tambin podramos redirigir la salida a un fichero. Por ejemplo. si queremos ogtener una lista con el
contenido de la carpeta /etc, podemos redirigir la salida al fichero cat.txt. Entonces solo tendremos
que abrir el fichero con cualquier editor.

1 [root@delphos ~]# ls /etc/ > etc.txt


2 [root@delphos ~]# cat etc.txt
3 adjtime
4 aliases
5 aliases.db
6 alternatives
7 anacrontab
8 .
9 .
10 .

2.4.- Instalar software


Una de las principales tareas de un administrador es la instalacin de nuevo software. En CentOS
esto se hace principalmente con las utilidades rpm y yum. La aplicacin rpm fue desarrollada por
RedHat como un gestor de paquetes de software, permite al usuario instalar paquetes fcilmente y
mantiene una base de datos con todo el software instalado en el sistema. El fichero rpm contiene el
cdigo binario que ser instalado, as como los scripts que necesitan ser ejecutados antes o despus
de la instalacin, con el fin de copiar los ficheros a su destino, crear directorios, etc Por ejemplo,
si tenemos el DVD de CentOS en /media/cdrom podramos instalar un rpm as:
2.-Administracin bsica 37

1 [root@delphos ~]# rpm -ivh /media/cdrom/Packages/gedit-2.28.4-3.el6.i686.rpm


2 Preparing... ########################################### [100%]
3 package gedit-1:2.28.4-3.el6.i686 is already installed

Le decimos a rpm que instale (-i) el paquete gedit, y que nos muestre el progreso de la instalacin
(-h) y toda la informacin posible.
En cualquier momento podemos revisar el software instalado en el sistema con rpm.

1 [root@delphos ~]# rpm -qa


2 libnl-1.1-14.el6.i686
3 ca-certificates-2010.63-3.el6_1.5.noarch
4 python-iwlib-0.1-1.2.el6.i686
5 centos-release-6-2.el6.centos.7.i686
6 pciutils-3.1.4-11.el6.i686
7 iwl5000-firmware-8.83.5.1_1-1.el6_1.1.noarch
8 lsof-4.82-2.el6.i686
9 xorg-x11-drv-ati-firmware-6.14.2-7.el6.noarch
10 libedit-2.11-4.20080712cvs.1.el6.i686
11 iwl4965-firmware-228.61.2.24-2.1.el6.noarch
12 libpcap-1.0.0-6.20091201git117cb5.el6.i686
13 .
14 .
15 .

Si queremos comprobar que el paquete llamado gedit est instalado podemos hacerlo combinando
el comando rpm con grep.

1 [root@delphos ~]# rpm -qa | grep -i gedit


2 gedit-2.28.4-3.el6.i686

Y finalmente, si queremos borrar el paquete instalado, podemos hacerlo muy fcilmente.

1 [root@delphos ~]# rpm -e gedit


2 [root@delphos ~]# rpm -qa | grep -i gedit
3 [root@delphos ~]#

Cada fichero rpm tambin nos informa de los dems rpms de los que depende, es decir, los ficheros
rpm que deben estar ya instalados para que el rpm que queremos instalar funcione correctamente.
Podra ocurrir, y de hecho sucede, que un determinado software depende de cierta libreria para
funcionar, la cual a su vez depende de otro componente. Por ejemplo, si intentamos instalar logwatch
recibiremos el siguiente mensaje.
2.-Administracin bsica 38

1 [root@delphos ~]# rpm -ivh /media/cdrom/Packages/logwatch-7.3.6-49.el6.noarch.rp\


2 m
3 error: Failed dependencies:
4 mailx is needed by logwatch-7.3.6-49.el6.noarch
5 perl(Date::Manip) is needed by logwatch-7.3.6-49.el6.noarch

Este fenmeno ha sido llamado dependency hell, y ha sido una pesadilla para los administradores
de Linux durante aos. Para resolver este problema se cre yum. Yum intenta comprobar y resolver
automticamente todas las dependencias que un determinado paquete de software pueda tener. De
tal modo que la instalacin pase a ser una tarea de lo ms sencilla.

2.4.1.- Configurando yum en Centos 6


Se puede configurar yum para que busque los paquetes de software en distintos repositorios.
Por defecto est configurado para buscarlos en http://mirror.centos.org. Si no tenemos conexin a
Internet, tendremos que especificarle a yum que use el DVD local como repositorio. Este repositorio
ya est configurado, pero se encuentra deshabilitado por defecto. En el directorio /etc/yum.repos.d
podemos ver los ficheros asociados con los repositorios de yum.

1 [root@delphos ~]# ls /etc/yum.repos.d/


2 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo

Podemos editar el fichero CentOS-Media.repo para habilitar el repositorio, pero tambin podemos
hacerlo utilizando el propio yum. Si tecleamos yum, el comando nos mostrar en pantalla las
diferentes opciones disponibles. Para ver los repositorios actuales ejecutaremos yum repolist.

1 [root@delphos ~]# yum repolist


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 Could not retrieve mirrorlist http://mirrorlist.centos.org/?release=6&arch=i386&\
5 repo=os error was
6 14: PYCURL ERROR 6 - "Couldn't resolve host 'mirrorlist.centos.org'"
7 repo id repo name status
8 base CentOS-6 - Base 0
9 extras CentOS-6 - Extras 0
10 updates CentOS-6 - Updates 0
11 repolist: 0

Para asegurarnos de que yum utiliza nicamente el repositorio del DVD local, tendremos que
deshabilitar todos los repositorios y activar posteriormente el repositorio c6-media. Esto podemos
2.-Administracin bsica 39

hacerlo con las opciones disablerepo y enablerepo. El comando completo para listar los paquetes
de software disponibles en el dvd local sera este: yum disablerepo=* enablerepo=c6-media list.
Si ejecutamos el comando yum list, veremos todos los paquetes disponibles en este repositorio,
siempre que el dvd est montado. Si no es as, podemos montarlo en cualquier momento con el
comando mount. Por ejemplo, para montar el cdrom en el directorio /media/cdrom creamos el
directorio (si no existe) y ejecutamos el comando mount /dev/cdrom /media/cdrom.

1 [root@delphos ~]# mkdir /media/cdrom


2 [root@delphos ~]# mount /dev/cdrom /media/cdrom/
3 mount: block device /dev/sr0 is write-protected, mounting read-only

Aqu podemos ver parte del listado de paquetes disponibles.

1 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media list


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 * c6-media:
5 Installed Packages
6 ConsoleKit.i686 0.4.1-3.el6 @anaconda\
7 -CentOS-201112130233.i386/6.2
8 ConsoleKit-libs.i686 0.4.1-3.el6 @anaconda\
9 -CentOS-201112130233.i386/6.2
10 GConf2.i686 2.28.0-6.el6 @c6-media
11 MAKEDEV.i686 3.24-6.el6 @anaconda\
12 -CentOS-201112130233.i386/6.2
13 ORBit2.i686 2.14.17-3.1.el6 @c6-media
14 acl.i686 2.2.49-6.el6 @anaconda\
15 -CentOS-201112130233.i386/6.2
16 aic94xx-firmware.noarch 30-2.el6 @anaconda\
17 -CentOS-201112130233.i386/6.2
18 alsa-lib.i686 1.0.22-3.el6 @c6-media
19 apr.i686 1.3.9-3.el6_1.2 @c6-media
20 apr-util.i686 1.3.9-3.el6_0.1 @c6-media
21 apr-util-ldap.i686 1.3.9-3.el6_0.1 @c6-media
22 atk.i686 1.28.0-2.el6 @c6-media
23 atmel-firmware.noarch 1.3-7.el6 @anaconda\
24 -CentOS-201112130233.i386/6.2
25 attr.i686 2.4.44-7.el6 @anaconda\
26 -CentOS-201112130233.i386/6.2
27 audit.i686 2.1.3-3.el6 @anaconda\
28 -CentOS-201112130233.i386/6.2
29 audit-libs.i686 2.1.3-3.el6 @anaconda\
2.-Administracin bsica 40

30 -CentOS-201112130233.i386/6.2
31 authconfig.i686 6.1.12-5.el6 @anaconda\
32 -CentOS-201112130233.i386/6.2
33 avahi-libs.i686 0.6.25-11.el6 @c6-media
34 b43-openfwwf.noarch 5.2-4.el6 @anaconda\
35 -CentOS-201112130233.i386/6.2
36 basesystem.noarch 10.0-4.el6 @anaconda\
37 -CentOS-201112130233.i386/6.2
38 bash.i686 4.1.2-8.el6.centos @anaconda\
39 -CentOS-201112130233.i386/6.2
40 .
41 .
42 .

2.4.2.- Configurando yum en Centos 7


En CentOS 7 no existe ningn repositorio para el dvd local definido por defecto. As que tendremos
que crearlo manualmente. En el directorio /etc/yum.repo.d/ veremos esto.

1 [root@Centos7 ~]# ls /etc/yum.repos.d/


2 CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Sources.repo CentOS-Vault.repo
3 [root@Centos7 ~]#

Tenemos que creat un nuevo fichero llamado CentOS-Media.repo para este nuevo repositorio.

1 [root@Centos7 yum.repos.d]# cat CentOS-Media.repo


2 [c7-media]
3 name=CentOS-$releasever - Media
4 baseurl=file:///media/cdrom/
5 gpgcheck=0
6 enabled=0

Tendremos que crear el directorio /media/cdrom y montar el cdrom tambin.

1 [root@Centos7 ~]# mkdir /media/cdrom


2 [root@CentOS7 ~]# mount /dev/cdrom /media/cdrom/
3 mount: block device /dev/sr0 is write-protected, mounting read-only

Ahora podemos comprobar si este nuevo repositorio funciona listando los paquetes disponibles.
2.-Administracin bsica 41

1 [root@Centos7 yum.repos.d]# yum --disablerepo=* --enablerepo=c7-media list


2
3 Installed Packages
4 ModemManager-glib.x86_64 1.1.0-6.git20130913.el7 @anaconda
5 NetworkManager.x86_64 1:0.9.9.1-13.git20140326.4dba720.el7 @ana\
6 conda
7 NetworkManager-glib.x86_64 1:0.9.9.1-13.git20140326.4dba720.el7 @ana\
8 conda
9 NetworkManager-tui.x86_64 1:0.9.9.1-13.git20140326.4dba720.el7 @ana\
10 conda
11 acl.x86_64 2.2.51-12.el7 @anaconda
12 aic94xx-firmware.noarch 30-6.el7 @anaconda
13 alsa-firmware.noarch 1.0.27-2.el7 @anaconda
14 alsa-lib.x86_64 1.0.27.2-3.el7 @anaconda
15 alsa-tools-firmware.x86_64 1.0.27-4.el7 @anaconda
16 audit.x86_64 2.3.3-4.el7 @anaconda
17 audit-libs.x86_64 2.3.3-4.el7 @anaconda
18 authconfig.x86_64 6.2.8-8.el7 @anaconda
19 avahi.x86_64 0.6.31-13.el7 @anaconda
20 avahi-autoipd.x86_64 0.6.31-13.el7 @anaconda
21 avahi-libs.x86_64 0.6.31-13.el7 @anaconda
22 basesystem.noarch 10.0-7.el7.centos @anaconda
23 .
24 .
25 .

2.4.3.- Opciones de yum


Yum es una herramiente bastante verstil, hemos visto cmo listar los paquetes, pero tambin
podemos listar colecciones de paquetes llamadas grupos(groups). Para listar estos grupos podramos
teclear yum disablerepo=* enablerepo=c6-media grouplist. Despus de esto veremos en la
pantalla una lista con los grupos ya instalados y aquellos que se pueden instalar. En este ejemplo
podra haber alguna diferencia entre CentOS 6 y CentOS 7, ya que las versiones de yum son
diferentes. Por ejemplo, algunos grupos podran no aparecer por defecto en CentOS 7, en este caso
deberamos usar la opcin group list hidden.
En CentOS 6:
2.-Administracin bsica 42

1 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media grouplist


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 * c6-media:
5 Setting up Group Process
6 Checking for new repos for mirrors
7 Installed Groups:
8 Client management tools
9 E-mail server
10 Graphical Administration Tools
11 Messaging Client Support
12 Systems Management Messaging Server support
13 Installed Language Groups:
14 Arabic Support [ar]
15 Armenian Support [hy]
16 Georgian Support [ka]
17 .
18 .
19 .

En CentOS 7:

1 [root@CentOS7 ~]# yum --disablerepo=* --enablerepo=c7-media group list


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 Available environment groups:
5 Minimal Install
6 Infrastructure Server
7 File and Print Server
8 Basic Web Server
9 Virtualization Host
10 Server with GUI
11 GNOME Desktop
12 KDE Plasma Workspaces
13 Development and Creative Workstation
14 Installed groups:
15 System Administration Tools
16 Available Groups:
17 Compatibility Libraries
18 Console Internet Tools
19 Development Tools
20 Graphical Administration Tools
2.-Administracin bsica 43

21 Legacy UNIX Compatibility


22 Scientific Support
23 Security Tools
24 Smart Card Support
25 System Management
26 Done
27
28 [root@CentOS7 ~]# yum --disablerepo=* --enablerepo=c7-media group list hidden
29 Loaded plugins: fastestmirror
30 Loading mirror speeds from cached hostfile
31 Available environment groups:
32 Minimal Install
33 Infrastructure Server
34 File and Print Server
35 Basic Web Server
36 Virtualization Host
37 Server with GUI
38 GNOME Desktop
39 KDE Plasma Workspaces
40 Development and Creative Workstation
41 Installed groups:
42 Core
43 E-mail Server
44 Network Infrastructure Server
45 System Administration Tools
46 Available Groups:
47 Additional Development
48 Anaconda Tools
49 Backup Client
50 Backup Server
51 Base
52 Compatibility Libraries
53 Conflicts (Client)
54 Conflicts (Server)
55 Conflicts (Workstation)
56 Console Internet Tools
57 DNS Name Server
58 Debugging Tools
59 Desktop Debugging and Performance Tools
60 Development Tools
61 Dial-up Networking Support
62 Directory Client
2.-Administracin bsica 44

63 Directory Server
64 Emacs
65 FTP Server
66 File and Storage Server
67 Fonts
68 GNOME
69 GNOME Applications
70 Graphical Administration Tools
71 Graphics Creation Tools
72 Guest Agents
73 Guest Desktop Agents
74 Hardware Monitoring Utilities
75 High Availability
76 Identity Management Server
77 Infiniband Support
78 Input Methods
79 Internet Applications
80 Internet Browser
81 Java Platform
82 KDE
83 KDE Applications
84 KDE Multimedia Support
85 Large Systems Performance
86 Legacy UNIX Compatibility
87 Legacy X Window System Compatibility
88 Load Balancer
89 Mainframe Access
90 MariaDB Database Client
91 MariaDB Database Server
92 Multimedia
93 Network File System Client
94 Networking Tools
95 Office Suite and Productivity
96 PHP Support
97 Performance Tools
98 Perl Support
99 Perl for Web
100 Platform Development
101 PostgreSQL Database Client
102 PostgreSQL Database Server
103 Print Server
104 Printing Client
2.-Administracin bsica 45

105 Python
106 Remote Desktop Clients
107 Remote Management for Linux
108 Resilient Storage
109 Ruby Support
110 Scientific Support
111 Security Tools
112 Smart Card Support
113 System Management
114 Technical Writing
115 Virtualization Client
116 Virtualization Hypervisor
117 Virtualization Platform
118 Virtualization Tools
119 Web Server
120 Web Servlet Engine
121 X Window System
122 Done

Si quisiramos instalar uno de estos grupos, como Hardware monitoring utilities, podramos
obtener algo ms de informacin con el parmetro groupinfo.

1 [root@delphos www]# yum --disablerepo=* --enablerepo=c6-media groupinfo "Hardwar\


2 e monitoring utilities"
3 Loaded plugins: fastestmirror
4 Loading mirror speeds from cached hostfile
5 * c6-media:
6 Setting up Group Process
7 Checking for new repos for mirrors
8
9
10 Group: Hardware monitoring utilities
11 Description: A set of tools to monitor server hardware
12 Default Packages:
13 smartmontools
14 Optional Packages:
15 edac-utils
16 lm_sensors

Como podemos ver, el grupo cinsiste en un paquete por defecto y dos paquetes opcionales. Los
paquetes por defecto se instalarn siempre que instalamos el grupo, mientras que los paquetes
opcionales se instalarn solo si as los especificamos. De tal modo que para instalar el grupo con sus
2.-Administracin bsica 46

paquetes opcionales tendramos que usar este comando: yum disablerepo=* enablerepo=c6-
media setopt=group_package_types=optional groupinstall Hardware monitoring utilities.
A continuacin aparecer una pantalla informativa pidiendo la confirmacin. Decimos yes (y).

1 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media --setopt=group_packa\


2 ge_types=optional groupinstall "Hardware monitoring utilities"
3 Loaded plugins: fastestmirror
4 Loading mirror speeds from cached hostfile
5 * c6-media:
6 Setting up Group Process
7 Checking for new repos for mirrors
8 Resolving Dependencies
9 --> Running transaction check
10 ---> Package edac-utils.i686 0:0.9-14.el6 will be installed
11 ---> Package lm_sensors.i686 0:3.1.1-10.el6 will be installed
12 --> Finished Dependency Resolution
13
14 Dependencies Resolved
15
16 ================================================================================
17 Package Arch Version Repository Size
18 ================================================================================
19 Installing:
20 edac-utils i686 0.9-14.el6 c6-media 40 k
21 lm_sensors i686 3.1.1-10.el6 c6-media 122 k
22
23 Transaction Summary
24 ================================================================================
25 Install 2 Package(s)
26
27 Total download size: 162 k
28 Installed size: 415 k
29 Is this ok [y/N]: y
30 Downloading Packages:
31 --------------------------------------------------------------------------------
32 Total 2.0 MB/s | 162 kB 00:00
33 Running rpm_check_debug
34 Running Transaction Test
35 Transaction Test Succeeded
36 Running Transaction
37 Installing : lm_sensors-3.1.1-10.el6.i686 1/2
38 Installing : edac-utils-0.9-14.el6.i686 2/2
39
2.-Administracin bsica 47

40 Installed:
41 edac-utils.i686 0:0.9-14.el6 lm_sensors.i686 0:3.1.1-10.el6
42
43 Complete!

Otra caracterstica muy til de yum es su capacidad de identificar en qu paquete se ubica un


determinado comando. Por ejemplo, una de las herramientas ms tiles para el administrador
Linux son las pginas del man, las cuales proporcionan una gran cantidad de informacin sobre
los distintos comandos y ficheros de configuracin del sistema. Pero como hemos realizado una
instalacin mnima de CentOS, esta utilidad no estar instalada. Sin embargo, podemos identificar
el paquete que contiene esta herramienta con la ayuda de yum.

1 [root@delphos ~]# man


2 -bash: man: command not found
3 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media provides man
4 Loaded plugins: fastestmirror
5 Loading mirror speeds from cached hostfile
6 * c6-media:
7 man-1.6f-29.el6.i686 : A set of documentation tools: man, apropos and whatis
8 Repo : c6-media
9 Matched from:

Como podemos ver, el paquete que debemos instalar se llama - como cabra esperar - man. En este
caso el nombre del paquete es muy intuitivo, pero no siempre sucede esto y, en esos casos, yum
resulta de mucha ayuda. Ahora con solo teclear yum disablerepo=* enablerepo=c6-media install
man, podremos usar man para obtener informacin de cualquier comando.

1 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media install man


2 [root@delphos ~]# man ls
3
4 LS(1) User Commands LS(1)
5
6 NAME
7 ls - list directory contents
8
9 SYNOPSIS
10 ls [OPTION]... [FILE]...
11
12 DESCRIPTION
13 List information about the FILEs (the current directory by default).
14 Sort entries alphabetically if none of -cftuvSUX nor --sort is speci
15 fied.
2.-Administracin bsica 48

16
17 Mandatory arguments to long options are mandatory for short options
18 too.
19
20 -a, --all
21 do not ignore entries starting with .
22
23 -A, --almost-all
24 do not list implied . And ..
25 .
26 .
27 .

2.5.- Entorno grfico

2.5.1.- CentOS 6
Despus de realizar una instalacin mnima, no tendremos entorno grfico. Si queremos iniciar el
servidor en modo grfico necesitaremos instalar los siguientes grupos de paquetes:

1 [root@localhost ~]# yum groupinstall desktop


2 [root@localhost ~]# yum groupinstall "X Window System"

Una vez que tenemos instalados ambos grupos, podemos pasar al modo grfico con el comando init
5.

1 [root@localhost ~]# init 5

La primera vez veremos una pgina de bienvenida (Fig. 34) y la habitual informacin sobre la licencia
(Fig. 35). A continuacin, el sistema nos pedir que creemos un usuario normal (no root) (Fig. 36).
2.-Administracin bsica 49

Fig 34:Instalando el entorno grfico


2.-Administracin bsica 50

Fig 35:Informacin sobre la licencia


2.-Administracin bsica 51

Fig 36:Creando un usuario

A continuacin tendremos que introducir o confirmar los datos acerca de la fecha y la hora (Fig. 37).
Despus podemos activar Kdump (Fig. 38) si as lo deseamos y tenemos suficiente memoria. Kdump
puede usarse para ayudar a resolver un posible fallo del kernel. La forma de utilizar kdump est ms
all del mbito de este libro.
2.-Administracin bsica 52

Fig 37:Fecha y hora


2.-Administracin bsica 53

Fig 38:Kdump

Finalmente vemos la pantalla de login grfico (Fig. 39).


2.-Administracin bsica 54

Fig 39:Login grfico

2.5.2.- CentOS 7
Si utilizamos CentOS 7 los paquetes que tenemos que instalar son estos:

1 [root@CentOS7 ~]# yum --disablerepo=* --enablerepo=c7-media group install "X Win\


2 dow System"
3 [root@CentOS7 ~]# yum --disablerepo=* --enablerepo=c7-media group install "Gnome\
4 Desktop"

Cuando la instalacin finalice podremos lanzar el entorno grfico con startx.

1 [root@CentOS7 ~]# startx

En un momento veremos esto (v. Fig. 40).


2.-Administracin bsica 55

Fig 40: Configuracin inicial

Como podemos ver, falta la informacin de la licencia, as que hacemos click en LICENSE
INFORMATION y aceptamos la licencia (v. Fig. 41).
2.-Administracin bsica 56

Fig 41: Informacin de licencia

Despus de aceptar la licencia y pulsar el botn Done podemos ver que la licencia ha sido aceptada
(v. Fig. 42).
2.-Administracin bsica 57

Fig 42: Finalizando la configuracin

Hacemos click en Finish configuration y accedemos a la ventana de login grfico (Fig. 43).
2.-Administracin bsica 58

Fig 43:Login grfico

2.6.- Otros comandos tiles

2.6.1.- chmod
Cada fichero en un sistema Linux tiene un conjunto de permisos asociados, es decir, no todos
los usuarios pueden leer o modificar el fichero. Algunos usuarios podran abrir el fichero y
ejecutarlo (si es un fichero binario o un script), algunos otros podran modificar su contenido, etc
Tradicionalmente en Linux existen tres conjuntos de permisos asociados a cada fichero, para el
propietario, el grupo y el resto de usuarios. Podemos ver estos permisos con el comand ols -l. Por
ejemplo

1 [root@localhost named]# ls -l /etc/init.d/named


2 -rwxr-xr-x. 1 root root 6806 Dec 7 2011 /etc/init.d/named

En este caso el propietario (root) puede leer (r), escribir(w) y ejecutar(x) el script /etc/init.d/named.
El grupo(root) solo puede leerlo y ejecutarlo. Y el resto de usuarios solo pueden leer y ejecutar el
fichero tambin.
Si por alguna razn necesitamos cambiar los permisos podemos hacerlo con chmod. Necesitamos
concretar qu grupo de permisos queremos modificar: u (propietario), g (grupo), o (otro) o bien a
2.-Administracin bsica 59

(los 3 grupos). Tambin debemos especificar si queremos aadir (+) o quitar (-) el permiso. Veamos
un par de ejemplos.

1 [root@localhost named]# chmod o+w /etc/init.d/named


2 [root@localhost named]# ls -l /etc/init.d/named
3 -rwxr-xrwx. 1 root root 6806 Dec 7 2011 /etc/init.d/named

Hemos aadido(+) permiso de escritura(w) al resto de usuarios(other).

1 [root@localhost named]# chmod o-w /etc/init.d/named


2 [root@localhost named]# ls -l /etc/init.d/named
3 -rwxr-xr-x. 1 root root 6806 Dec 7 2011 /etc/init.d/named

Y ahora revertimos la situacin quitando(-) el permiso de escritura.

2.6.2.- tee
Ya hemos visto que se puede redirigir la salida de un comando a un fichero.

1 [root@delphos ~]# ls /var/ > var_folder.txt


2 [root@delphos ~]# cat var_folder.txt
3 cache
4 db
5 empty
6 games
7 lib
8 local
9 lock
10 log
11 mail
12 named
13 nis
14 opt
15 preserve
16 run
17 spool
18 tmp
19 www
20 yp

Pero a veces puede que nos interese ver la salida del comando en pantalla al mismo tiempo que
redirigimos dicha salida a un fichero. Podemos hacer esto con tee.
2.-Administracin bsica 60

1 [root@delphos ~]# ls /var/ | tee var_folder.txt


2 cache
3 db
4 empty
5 games
6 lib
7 local
8 lock
9 log
10 mail
11 named
12 nis
13 opt
14 preserve
15 run
16 spool
17 tmp
18 www
19 yp
20 [root@delphos ~]# cat var_folder.txt
21 cache
22 db
23 empty
24 games
25 lib
26 local
27 lock
28 log
29 mail
30 named
31 nis
32 opt
33 preserve
34 run

2.6.3.- rm
A veces necesitamos eliminar ficheros o directorios, para hacerlo podemos usar rm. Por ejemplo,
para eliminar un fichero llamado file_to_delete.txt solo tendramos que teclear esto:
2.-Administracin bsica 61

1 [root@delphos ~]# rm file_to_delete.txt


2 rm: remove regular empty file `file_to_delete.txt'? y

Por defecto rm pide confirmacin antes de borrar un fichero, pero podemos forzar el borrado sin
necesidad de confirmar usando el parmetro -f. Si queremos borrar una carpeta tendremos que usar
el parmetro -r (recursivo).

1 [root@delphos ~]# rm -f file_to_delete.txt


2 rm: descend into directory `folder_to_delete'? y
3 rm: remove regular file `folder_to_delete/one.txt'? y
4 rm: remove regular file `folder_to_delete/two.txt'? y
5 rm: remove regular file `folder_to_delete/three.txt'? y

2.7.- SELinux
SELinux es un mecanismo de defensa desarrollado por la NSA. Se podra describir brevemente como
un mecanismo de seguridad que crea otra capa de proteccin contra accesos no autorizados y limita
el dao que una intrusin podra causar al sistema.
En un sistema Linux, SELinux podra estar en uno de estos tres estados:

Disabled. SELinux no se est ejecutando y, por lo tanto, no realizar ninguna accin.


Permissive. SELinux monitoriza el comportamiento del sistema y registra la actividad, pero
no bloquer ni interferir en ningn modo en las acciones del sistema.
Enforcing. SELinux est en ejecucin y, dependiendo de la configuracin, podra bloquear
ciertas acciones efectuadas por los procesos en ejecucin en el sistema.

Podemos ver si SELinux est en ejecucin con el siguiente comando:

1 [root@localhost named]# sestatus


2 SELinux status: enabled
3 SELinuxfs mount: /selinux
4 Current mode: enforcing
5 Mode from config file: enforcing
6 Policy version: 24
7 Policy from config file: targeted

En este caso podemos ver que SELinux est habilitado y en modo enforcing. En este modo SELinux
bloquear cualquier accin que no est permitida en la configuracin de SELinux. Podramos
cambiar el modo a permissive, que permite las acciones que SELinux normalmente bloqueara, pero
registra en un logs los detalles sobre cada accin que viola la configuracin de SELinux. Este modo
permissive es muy til cuando estamos afinando el funcionamiento de SELinux. Podemos cambiar
a este modo con setenforce.
2.-Administracin bsica 62

1 [root@centosv6 ~]# setenforce permissive

Podemos comprobar si el cambio fue efectivo con los comandos getenforce o setstatus.

1 [root@centosv6 ~]# getenforce


2 Permissive
3 [root@centosv6 ~]# sestatus
4 SELinux status: enabled
5 SELinuxfs mount: /selinux
6 Current mode: permissive
7 Mode from config file: enforcing
8 Policy version: 24
9 Policy from config file: targeted

Tambin es posible deshabilitar completamente SELinux. Podemos hacerlo editando el fichero


/etc/sysconfig/selinux. Debera haber una lnea que comienza por SELINUX=, que puede tener
3 valores distintos: enforcing, permissive o disabled. Al asignar el valor disabled, en el siguiente
reinicio de la mquina SELinux estar deshabilitado.
SELinux asigna etiquetas (labels) a los procesos, ficheros y carpetas. De acuerdo con estas etiquetas,
habitualmente llamadas contextos, los procesos podrn o no llevar a cabo ciertas acciones.
Podemos comprobar el contexto de seguridad de cualquier carpeta con el comando ls -Z.

1 [root@centosv6 ~]# ls -Z /home/


2 drwx------. antonio antonio unconfined_u:object_r:user_home_dir_t:s0 antonio
3 drwx------. jose jose unconfined_u:object_r:user_home_dir_t:s0 jose

Las diferentes carpetas tendrn distintos contextos asociados.

1 [root@centosv6 ~]# ls -Z /var/www/


2 drwxr-xr-x. root root system_u:object_r:httpd_sys_script_exec_t:s0 cgi-bin
3 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 error
4 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 html
5 drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 icons

Por ejemplo, para que Apache pueda acceder a los ficheros html de un sitio Web, la carpeta tendr
que tener asignado el contexto httpd_sys_content_t. Debemos tener esto en cuenta al configurar los
distintos servicios en CentOS, y por supuesto tambin deberemos asignar los permisos de lectura,
escritura y/o ejecucin cuando sea necesario.
Si necesitamos cambiar el contexto de un fichero o carpeta podemos hacerlo con chcon.
2.-Administracin bsica 63

1 [root@centosv6 ~]# mkdir test


2 [root@centosv6 ~]# ls -Zd test
3 drwxr-xr-x. root root unconfined_u:object_r:admin_home_t:s0 test
4 [root@centosv6 ~]# chcon -t httpd_sys_content_t test/
5 [root@centosv6 ~]# ls -dZ test
6 drwxr-xr-x. root root unconfined_u:object_r:httpd_sys_content_t:s0 test

Tambin podemos ver el contexto asociado a un proceso en ejecucin con ps -Z.

1 [root@CentOS7 ~]# ps -Z
2 LABEL PID TTY TIME CMD
3 unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 40884 pts/0 00:00:00 bash
4 unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 45546 pts/0 00:00:01 ps

SELinux tambin mantiene por defecto una serie de variables que, de acuerdo con su valor, van a
influir en el comportamiento del sistema. Podemos obtener una lista de estos valores con el comando
getsebool.

1 [root@centosv6 ~]# getsebool -a


2 abrt_anon_write --> off
3 abrt_handle_event --> off
4 allow_console_login --> on
5 allow_cvs_read_shadow --> off
6 allow_daemons_dump_core --> on
7 allow_daemons_use_tcp_wrapper --> off
8 allow_daemons_use_tty --> on
9 allow_domain_fd_use --> on
10 allow_execheap --> off
11 allow_execmem --> on
12 .
13 .
14 .

Podemos cambiar cualquiera de estos valores con setsebool.

1 [root@centosv6 ~]# setsebool abrt_anon_write on


2 [root@centosv6 ~]# getsebool abrt_anon_write
3 abrt_anon_write --> on

El cambio tendr efecto inmediatamente, pero cuando el servidor se reinicie de nuevo el parmetro
recuperar su antiguo valor. Para que el cambio sea permanente necesitamos aadir -P al comando
del ejemplo anterior.
2.-Administracin bsica 64

1 [root@centosv6 ~]# setsebool -P abrt_anon_write on

Otra herramienta til para gestionar SELinux es semanage. Normalmente no se instala por defecto,
as que si queremos utilizarla tendremos que instalar el paquete policycoreutils-python.
Con semanage podemos obtener una lista de los distintos contextos.

1 [root@centosv6 ~]# semanage fcontext -l


2 SELinux fcontext type Context
3
4 / directory system_u:o\
5 bject_r:root_t:s0
6 /.* all files system_u:o\
7 bject_r:default_t:s0
8 /[^/]+ regular file system_u:o\
9 bject_r:etc_runtime_t:s0
10 /\.autofsck regular file system_u:o\
11 bject_r:etc_runtime_t:s0
12 /\.autorelabel regular file system_u:o\
13 bject_r:etc_runtime_t:s0
14 /\.journal all files <<None>>
15 /\.suspended regular file system_u:o\
16 bject_r:etc_runtime_t:s0
17 /a?quota\.(user|group) regular file system_u:o\
18 bject_r:quota_db_t:s0
19 /afs directory system_u:o\
20 bject_r:mnt_t:s0
21 /bin directory system_u:o\
22 bject_r:bin_t:s0
23 /bin/.* all files system_u:o\
24 bject_r:bin_t:s0
25 /bin/alsaunmute regular file system_u:o\
26 bject_r:alsa_exec_t:s0
27 /bin/bash regular file system_u:o\
28 bject_r:shell_exec_t:s0
29 /bin/bash2 regular file system_u:o\
30 bject_r:shell_exec_t:s0
31 /bin/d?ash regular file system_u:o\
32 bject_r:shell_exec_t:s0
33 .
34 .
35 .
2.-Administracin bsica 65

Tambin podemos obtener un listado de las variables booleanas de SELinux, junto con una breve
descripcin.

1 [root@centosv6 ~]# semanage boolean -l


2 SELinux boolean State Default Description
3
4 ftp_home_dir (off , off) Allow ftp to read and write files \
5 in the user home directories
6 smartmon_3ware (off , off) Enable additional permissions need\
7 ed to support devices on 3ware controllers.
8 xdm_sysadm_login (off , off) Allow xdm logins as sysadm
9 xen_use_nfs (off , off) Allow xen to manage nfs files
10 mozilla_read_content (off , off) Control mozilla content access
11 ssh_chroot_rw_homedirs (off , off) Allow ssh with chroot env to read \
12 and write files in the user home directories
13 tftp_anon_write (off , off) Allow tftp to modify public files \
14 used for public file transfer services.
15 allow_console_login (on , on) Allow direct login to the console \
16 device. Required for System 390
17 spamassassin_can_network (off , off) Allow user spamassassin clients to\
18 use the network.
19 .
20 .
21 .

A lo largo del libro usaremos estas herramientas para configurar SELinux, de modo que sea posible
la ejecucin de los distintos servicios de red.
3.- Networking
En nuestros das un ordenador completamente aislado del mundo exterior es algo prcticamente
inservible. Muchas tareas cotidianas como enviar y recibir emails, compartir ficheros o consultar
una base de datos requieren una conexin externa.
Para comunicarse, los ordenadores usan un software que se denomina protocolo de red. No
entraremos en detalles acerca de los diferentes protocolos de red, puesto que ya existen multitud
de libros sobre este tema. En realidad existen muchos protocolos de red, pero el estndar de facto es
el protocolo TCP/IP.

3.1.- IPv4
Este protocolo fue desarrollado en los aos 70 por la Agencia de Proyectos de Investigacin de
Defensa Avanzada (DARPA por sus siglas en ingls). Es un modelo jerrquico que asigna a cada
ordenador una direccin IP en forma de cuatro octetos x.x.x.x . Cada direccin tiene una mscara
asociada que tambin consiste en cuatro octetos. Veremos esto con un poco ms de detalle.
Como mencionamos anteriormente, una direccin IP se representa con 4 nmeros cuyos valores
oscilan entre 0 y 255, por ejemplo 192.168.10.19, 198.165.30.40, 88.43.53.12, etc Adems, cada
direccin IP lleva asociado otro parmetro, la mscara de subred. La mscara de subred podra ser
255.255.255.0, 255.255.0.0, 255.240.0.0, etc Imaginemos que tenemos un ordenador con los siguientes
parmetros:
Direccin IP: 192.168.10.19
Mscara de red: 255.255.255.0
Ahora debemos introducir un nuevo concepto, la direccin de red. Este valor nos servir para
determinar si 2 ordenadores estn en la misma o en diferentes redes. Para obtener la direccin de
red comparamos los valores de la direccin IP y de la mscara de red en binario.
Direccin IP: 11000000.10100100.00001010.00010011
Mscara de red: 11111111.11111111.11111111.00000000
La direccin de red ser la parte de la direccin ip que se corresponde con la parte de la mscara de
red con unos. En este ejemplo ser:
Direccin de red: 11000000.10100100.00001010 192.168.10
Dado que la direccin de red necesita tener una longitud de 4 octetos tambin, el resto de la direccin
se completar con ceros.
Direccin de red: 11000000.10100100.00001010.00000000 192.168.10.0

66
3.- Networking 67

Para que dos mquinas puedan comunicarse directamente debern tener la misma direccin de
red. Por ejemplo, si ya tenemos un servidor con la direccin IP 192.168.10.19 y la mscara de red
255.255.255.0, deberamos usar la misma direccin de red (y por supuesto una IP diferente) para un
nuevo ordenador. Una de las muchas direcciones IP vlidas podra ser esta:
Direccin IP: 192.168.10.20
Mscara de red: 255.255.255.0
Direccin de red: 192.168.10.0
De forma que, como hemos dicho, una direccin IP siempre debe tener una mscara asociada, de otra
forma no podramos determinar a qu red pertenece. En los ejemplos previos hemos especificado la
direccin IP y la mscara de red como dos valores separados, pero se pueden representar juntos en
una forma abreviada. Vamos a tomar el ltimo ejemplo:
Direccin IP: 192.168.10.20 Mscara de red: 255.255.255.0
Si pasamos los valores a binario obtenemos esto:
Direccin IP: 11000000.10101000.00001010.00010010
Mscara de red: 11111111.11111111.11111111.00000000
Vemos que la mscara de red tiene 24 unos, as que podramos representarla as:
192.168.10.20/24
Las direcciones IP tambin se pueden clasificar en varias categoras:
Clase A:
La direccin (en formato binario) comienza con un 0. Es decir, cada direccin entre 1.x.x.x y 127.x.x.x
se considera una direccin IP de clase A.
Clase B:
La direccin empieza con 10. El rango de IPs en este caso va de 128.x.x.x hasta 191.x.x.x.
Clase C:
En este caso la direccin empieza con 110. El rango vlido de direcciones de este tipo va de 192.x.x.x
hasta 224.x.x.x.
Tambin existe una Clase D y una Clase E, utilizadas para propsitos especficos, pero no entraremos
en detalles.

3.1.1.- Direcciones especiales


Tambin hay unas cuantas direcciones que fueron definidas con un propsito especfico.
Un ejemplo es la direccin IP 127.0.0.1, llamada direccin de bucle local (loopback en ingls). Cada
dispositivo que usa el protocolo TCP tiene asignada esta direccin con el fin de poder comprobar
localmente el funcionamiento del protocolo TCP.
3.- Networking 68

Otras direcciones de red estn concebidas para su uso exclusivo en redes de rea local (LANs) pero
no en Internet, ya que a diferencia de las direcciones estndar, stas no son nicas. Estas direcciones
son:
10.0.0.0/8 172.16.0.0/12 192.168.0.0/16
De modo que cada direccin IP que se encuentre contenida en uno de estos rangos es considerada
una direccin privada.

3.1.2.- Unicast, multicast y broadcast


Un dispositivo IPv4 se puede comunicar directamente con otro sispositivo estableciendo una relacin
uno-a-uno. Esto se denomina unicast.
Pero tal vez este dispositivo quiera comunicarse con todos aquellos dispositivos con la misma
direccin de red. Esto se llama broadcast y consiste en la direccin de red y todos los bits de
hosts puestos a 1. Por ejemplo, si un ordenador tiene la direccin 192.168.1.20/24 y quiere enviar
un broadcast lo enviar a la direccin 192.168.1.255.
Y tambin hay un tercer escenario, en el cual un ordenador quiere comunicarse con un grupo de
mquinas en la misma red, pero no todas ellas. Para que esto funcione, estas mquinas debern
compartir una direccin de multicast. Este tipo de comunicacin se llama tambin as, multicast. of
communication is called multicast.

3.1.3.- Conficuracin de IPv4 en CentOS

3.1.3.1.- CentOS 6

Para asignar temporalmente una direccin IP a nuestro servidor CentOS podemos usar el comando
ifconfig. Ejecutado con el parmetro -a nos mostrar todas las interfaces de red presentes,
independientemente de si stas estn configuradas o no.

1 [root@delphos ~]# ifconfig -a


2 eth0 Link encap:Ethernet HWaddr 00:0C:29:78:4C:B1
3 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
4 RX packets:0 errors:0 dropped:0 overruns:0 frame:0
5 TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
6 collisions:0 txqueuelen:1000
7 RX bytes:0 (0.0 b) TX bytes:55678099 (0.0 b)
8 Interrupt:19 Base address:0x2000
9
10 lo Link encap:Local Loopback
11 inet addr:127.0.0.1 Mask:255.0.0.0
12 inet6 addr: ::1/128 Scope:Host
3.- Networking 69

13 UP LOOPBACK RUNNING MTU:16436 Metric:1


14 RX packets:19843 errors:0 dropped:0 overruns:0 frame:0
15 TX packets:19843 errors:0 dropped:0 overruns:0 carrier:0
16 collisions:0 txqueuelen:0
17 RX bytes:19601819 (18.6 MiB) TX bytes:19601819 (18.6 MiB)

Podemos ver que hay 2 interfaces de red en nuestro servidor: lo (loopback), una interfaz de red
virtual usada internamente, y eth0, la cual se corresponde con una tarjeta ethernet. Esta ltima es la
interfaz que tendremos que usar para configurar la direccin IP de nuestro servidor.

1 [root@delphos ~]# ifconfig eth0 192.168.1.20 netmask 255.255.255.0 up

Con ifconfig podemos aadir una IP temporal, pero para que este cambio sea persistente tendremos
que modificar la configuracin de red del sistema. Podemos hacer esto manualmente editando el
fichero /etc/sysconfig/network-scripts/ifcfg-eth0 y aadiendo las siguientes lneas:

1 IPADDR=192.168.10.19
2 BOOTPROTO=none
3 NETMASK=255.255.255.0
4 TYPE=Ethernet

Tambin tendremos que cambiar la lnea ONBOOT=no a ONBOOT=yes, de modo que la interfaz
de red se active despus de cada reinicio. Este procedimiento funciona perfectamente, pero probable-
mente sea ms cmodo utilizar una herramienta de configuracin automtica como system-config-
network. Este programa seguramente no est instalado por defecto, as que tendremos que instalarlo
ahora. Como vimos en el captulo previo podemos usar yum para identificar el paquete asociado a
un comando determinado.

1 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media provides system-conf\


2 ig-network
3 Loaded plugins: fastestmirror
4 Loading mirror speeds from cached hostfile
5 * c6-media:
6 file:///media/CentOS/repodata/repomd.xml: [Errno 14] Could not open/read file://\
7 /media/CentOS/repodata/repomd.xml
8 Trying other mirror.
9 file:///media/cdrecorder/repodata/repomd.xml: [Errno 14] Could not open/read fil\
10 e:///media/cdrecorder/repodata/repomd.xml
11 Trying other mirror.
12 c6-media | 4.0 kB 00:00 ...
13 Warning: 3.0.x versions of yum would erroneously match against filenames.
3.- Networking 70

14 You can use "*/system-config-network" and/or "*bin/system-config-network" to ge\


15 t that behaviour
16 No Matches found
17 [root@delphos ~]# yum --disablerepo=* --enablerepo=c6-media provides */system-co\
18 nfig-network
19 Loaded plugins: fastestmirror
20 Loading mirror speeds from cached hostfile
21 * c6-media:
22 system-config-network-tui-1.6.0.el6.2-1.el6.noarch : The Network Adminstration
23 : Tool
24 Repo : c6-media
25 Matched from:
26 Filename : /usr/share/system-config-network
27 Filename : /usr/bin/system-config-network
28 Filename : /etc/pam.d/system-config-network
29 Filename : /etc/security/console.apps/system-config-network
30 Filename : /usr/sbin/system-config-network

As que instalamos el paquete system-config-network-tui con este comando: yum disablerepo=*


enablerepo=c6-media install system-config-network-tui. Una vez que el paquete est instalado,
podemos lanzar el programa con system-config-network (Fig. 44).

Fig 44:System-config-network

Seleccionamos la opcin Device configuration y pulsamos INTRO. Ahora en la pantalla aparecer


una lista con las interfaces de red (Fig. 45), en este caso solamente hay una, la seleccionamos y
pulsamos nuevamente INTRO.
3.- Networking 71

Fig 45:Seleccionar una interfaz

Rellenamos el formulario y hacemos click en Ok->Save & Quit (Fig. 46).

Fig 46:Asignar una direccin IP

Si revisamos de nuevo el fichero /etc/sysconfig/network-scripts/ifcfg-eth0, veremos que el contenido


del fichero se ha actualizado. Sin embargo an tendremos que cambiar manualmente el parmetro
ONBOOT=no a ONBOOT=yes.
3.- Networking 72

3.1.3.2.- Centos 7

En CentOS 7 el comando ifconfig no se instala por defecto, ya que se aconseja emplear otras
utilidades en su lugar como por ejemplo el comando ip. Con ella podemos aadir una direccin
IP as:

1 [root@Centos7 ~]# ip address add 192.168.1.202/24 dev enp0s3

Tambin podemos listar las interfaces y sus IPs asociadas.

1 [root@Centos7 ~]# ip address show


2 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN
3 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
4 inet 127.0.0.1/8 scope host lo
5 valid_lft forever preferred_lft forever
6 inet6 ::1/128 scope host
7 valid_lft forever preferred_lft forever
8 2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP \
9 qlen 1000
10 link/ether 08:00:27:a0:46:d2 brd ff:ff:ff:ff:ff:ff
11 inet 192.168.1.202/24 scope global enp0s3
12 valid_lft forever preferred_lft forever

Como ocurra en CentOS 6, la direccin IP que acabamos de asignar tendr un carcter temporal.
Si queremos que sea persistente tendremos que editar el fichero /etc/sysconfig/network-scripts/ifcfg-
enp0s3 y aadir las siguientes lneas:

1 IPADDR=192.168.10.19
2 BOOTPROTO=static
3 NETMASK=255.255.255.0
4 TYPE=Ethernet

Tendremos que aadir el parmetro ONBOOT=yes, de modo que la interfaz de red se active cada
vez que el sistema arranca.
De este modo asignamos manualmente una direccin IP esttica al servidor, pero resulta mucho
ms cmodo hacerlo con una utilidad. En CentOS 6 utilizamos system-config-network, pero este
comando no est disponible en CentOS 7, en su lugar debemos usar nmtui (v. Fig. 47 y Fig. 48).
3.- Networking 73

Fig 47:nmtui

Fig 48:Editando una conexin con nmtui


3.- Networking 74

Como an no hemos aadido una puerta de enlace por defecto, la adimos ahora (v. Fig. 49).

Fig 49:Aadiendo la puerta de enlace por defecto con nmtui

Aceptamos los cambios (v. Fig. 50).


3.- Networking 75

Fig 50:Aadiendo la puerta de enlace por defecto con nmtui

Y reiniciamos el servicio de red.

1 [root@localhost ~]# service network restart


2 Restarting network (via systemctl): [ OK ]

Ahora podemos consultar la puerta de enlace predeterminada con el comando ip.

1 [root@localhost ~]# ip route show


2 default via 192.168.1.1 dev enp0s3 proto static metric 1024
3 192.168.1.0/24 dev enp0s3 proto kernel scope link src 192.168.1.202

3.2.- IPv6
Segn Internet fue ganando popularidad, lleg un momento en el que result claro que no habra
suficientes direcciones IPv4 para satisfacer la creciente demanda. Las direcciones IPv4 tienen una
longitud de 4 bytes, lo que permite un mximo de 4200 millones de direcciones, mientras que la
poblacin mundial es de unos 7000 millones. Obviamente no todas las personas tienen un ordenador
conectado a Internet - especialmente en pases pobres - pero cada da ms y ms personas se conectan
a Internet, y cada vez es ms habitual disponer de ordenador, smartphone y tablet, todos ellos
3.- Networking 76

con conexin a Internet. Adems, tambin debemos tener en cuenta que cada servidor en Internet
necesita tambin una IP nica.
Considerando estos hechos, parece bastante razonable pensar que IPv4 no ser capaz de satisfacer
la creciente necesidad de ms direcciones para una Internet en continuo crecimiento.
Para resolver este problema, los ingenieros del IETF(Internet Engineering Task Force) decidieron
ponerse manos a la obra para desarrollar un protocolo que cumpliera con las nuevas expecativas.
As surgi el protocolo IPv6. IPv6 utiliza direcciones de 128 bits, lo que permite un mximo de 3.4 *
1038 direcciones, cifra que debera ser suficiente durante un largo tiempo.
Las direcciones IPv6 se representan habitualmente en 8 grupos de 16 bits, en formato hexadecimal,
de esta forma:
fe80:0000:0000:0000:020c:29ff:fedf:d786/64
El /64 se utiliza para representar la mscara, concepto que ya vimos al hablar de direcciones IPv4.
Esto quiere decir que los primeros 64 bits de la direccin se utilizarn para definir la direccin de
red.
Con el fin de simplificar la representacin de las direcciones IPv6, cuando hay varios ceros
consecutivos el mayor grupo de 0s puede omitirse.
fe80::020c:29ff:fedf:d786/64
Como ocurra con las direcciones IPv4, tambin hay unas cuantas direcciones IPv6 a las que se ha
asignado un papel especial. Las que comienzan por fe80 se consideran direcciones locales (link-local
addresses en ingls). Un concepto similar a las direcciones privadas en el mundo IPv4. Siempre que
una interfaz de red est habilitada para IPv6 se le asigna automticamente una direccin IPv6 que
comienza por fe80.
Podemos asignar una direccin IPv6 a la interfaz eth0 con el comando ip.

1 [root@delphos ~]# ip address add 2000::20c:29ff:fe78:4cb1/64 dev eth0

Ahora podemos ver la nueva ip asignada.

1 [root@delphos ~]# ifconfig eth0


2 eth0 Link encap:Ethernet HWaddr 00:0C:29:78:4C:B1
3 inet addr:192.168.1.20 Bcast:192.168.1.255 Mask:255.255.255.0
4 inet6 addr: 2000::20c:29ff:fe78:4cb1/64 Scope:Global
5 inet6 addr: fe80::20c:29ff:fe78:4cb1/64 Scope:Link
6 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
7 RX packets:3911047 errors:25 dropped:14 overruns:0 frame:0
8 TX packets:264248 errors:0 dropped:0 overruns:0 carrier:0
9 collisions:0 txqueuelen:1000
10 RX bytes:387910100 (369.9 MiB) TX bytes:57615841 (54.9 MiB)
3.- Networking 77

11 Interrupt:19 Base address:0x2000


12
13 [root@delphos ~]# ip address show dev eth0
14 2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UNKNO\
15 WN qlen 1000
16 link/ether 00:0c:29:78:4c:b1 brd ff:ff:ff:ff:ff:ff
17 inet 192.168.1.20/24 brd 192.168.1.255 scope global eth0
18 inet6 2000::20c:29ff:fe78:4cb1/64 scope global
19 valid_lft forever preferred_lft forever
20 inet6 fe80::20c:29ff:fe78:4cb1/64 scope link
21 valid_lft forever preferred_lft forever

3.3.- Herramientas de red

3.3.1.- netstat
Cada vez que un programa necesita comunicarse por red utiliza lo que el protocolo TCP llama
puertos. Un puerto sera una forma de identificar un servicio determinado dentro de la red. Por
ejemplo, para comunicarse con un servidor Web se utilizara el puerto 80, para conectar con un
servidor FTP el puerto 21, etc Es decir, por cada servicio de red en ejecucin en el servidor habr
(al menos) un puerto TCP abierto.
Si queremos saber qu puertos tenemos abiertos en un momento dado podemos usar netstat. Por
defecto mostrar solo los puertos con una conexin establecida.

1 [root@localhost ~]# netstat


2 Active Internet connections (w/o servers)
3 Proto Recv-Q Send-Q Local Address Foreign Address Stat\
4 e
5 tcp 0 0 192.168.1.20:ssh 192.168.1.1:49775 ESTA\
6 BLISHED
7 Active UNIX domain sockets (w/o servers)
8 Proto RefCnt Flags Type State I-Node Path
9 unix 2 [ ] DGRAM 8587 @/org/kernel/udev/udevd
10 unix 10 [ ] DGRAM 10473 /dev/log
11 .
12 .
13 .

En este caso podemos ver que tenemos un nico puerto tcp conectado, el puerto ssh. El comando
muestra varios sockets unix abiertps, pero por ahora ignoraremos esta informacin. Podemos pasarle
varias opciones a netstat. Algunas de las ms tiles son: (-a) para mostrar TODOS los puertos abiertos
3.- Networking 78

y no solo los que ya estn conectados, (-p) para identificar el programa que tiene abierto el puerto,
(-t) para TCP, (-u) para UDP o (-n) para mostrar el nmero de puerto en lugar del nombre del servicio
asociado a dicho puerto. Veamos un ejemplo:

1 [root@localhost ~]# netstat -aptn


2 Active Internet connections (servers and established)
3 Proto Recv-Q Send-Q Local Address Foreign Address Stat\
4 e PID/Program name
5 tcp 0 0 0.0.0.0:22 0.0.0.0:* LIST\
6 EN 1107/sshd
7 tcp 0 0 127.0.0.1:25 0.0.0.0:* LIST\
8 EN 1183/master
9 tcp 0 0 0.0.0.0:5672 0.0.0.0:* LIST\
10 EN 1196/qpidd
11 tcp 0 0 192.168.1.20:22 192.168.1.1:50316 ESTA\
12 BLISHED 6738/sshd
13 tcp 0 0 :::22 :::* LIST\
14 EN 1107/sshd
15 tcp 0 0 ::1:25 :::* LIST\
16 EN 1183/master

Obtenemos la lista de todos los puertos TCP abiertos, mostrando los nmeros de puerto y los
programas que han abierto cada puerto.

3.3.2.- lsof
Otra herramienta muy til es lsof. Probablemente no est instalada por defecto, pero podemos
instalarla con yum como ya hemos visto antes.

1 [root@localhost ~]# yum --disablerepo=* --enablerepo=c6-media provides lsof


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 * c6-media:
5 lsof-4.82-2.el6.i686 : A utility which lists open files on a Linux/UNIX system
6 Repo : c6-media
7 Matched from:
8
9 [root@localhost ~]# yum --disablerepo=* --enablerepo=c6-media install lsof

Esta herramienta enumera los ficheros abiertos en el sistema, pero tambin podemos usarla para ver
qu proceso est escuchando en un puerto dado.
3.- Networking 79

1 [root@localhost ~]# lsof -i :53


2 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
3 named 8616 named 20u IPv6 27844 0t0 TCP *:domain (LISTEN)
4 named 8616 named 21u IPv4 27849 0t0 TCP localhost:domain (LISTEN)
5 named 8616 named 22u IPv4 27851 0t0 TCP 192.168.1.20:domain (LISTEN)
6 named 8616 named 512u IPv6 27843 0t0 UDP *:domain
7 named 8616 named 513u IPv4 27848 0t0 UDP localhost:domain
8 named 8616 named 514u IPv4 27850 0t0 UDP 192.168.1.20:domain

3.3.3.- nmap
En ocasiones necesitamos conocer qu puertos son accesibles por red. Podra suceder que un servicio
estuviera escuchando en un puerto determinado, pero que un cortafuegos o filtro de cualquier
tipo estuviera bloqueando el acceso a dicho puerto. En este caso, obviamente, no podra haber
comunicacin entre servidor y cliente. Para probar si un puerto es accesible o no podemos usar
nmap.
La sintaxis bsica es nmap nombre_o_ip:

1 [root@localhost named]# nmap 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-03 02:31 CEST
4 mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled.\
5 Try using --system-dns or specify valid servers with --dns-servers
6 Nmap scan report for 192.168.1.20
7 Host is up (0.00071s latency).
8 Not shown: 998 filtered ports
9 PORT STATE SERVICE
10 22/tcp open ssh
11 53/tcp open domain
12 MAC Address: 00:0C:29:78:4C:B1 (VMware)
13
14 Nmap done: 1 IP address (1 host up) scanned in 5.29 seconds
15 [root@localhost named]#

Podemos especificar los puertos que queremos comprobar.


3.- Networking 80

1 [root@localhost named]# nmap -p 80,22 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-03 03:05 CEST
4 mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled.\
5 Try using --system-dns or specify valid servers with --dns-servers
6 Nmap scan report for 192.168.1.20
7 Host is up (0.00024s latency).
8 PORT STATE SERVICE
9 22/tcp open ssh
10 80/tcp filtered http
11 MAC Address: 00:0C:29:78:4C:B1 (VMware)
12
13 Nmap done: 1 IP address (1 host up) scanned in 0.08 seconds
14 [root@localhost named]#

Tambin podemos obtener ms informacin acerca de los servicios que estn escuchando en cada
puerto.

1 [root@localhost named]# nmap -sV 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-03 03:07 CEST
4 Nmap scan report for delphos.olimpus.local (192.168.1.20)
5 Host is up (0.00034s latency).
6 Not shown: 998 filtered ports
7 PORT STATE SERVICE VERSION
8 22/tcp open ssh OpenSSH 5.3 (protocol 2.0)
9 53/tcp open domain
10 MAC Address: 00:0C:29:78:4C:B1 (VMware)
11
12 Service detection performed. Please report any incorrect results at http://nmap.\
13 org/submit/ .
14 Nmap done: 1 IP address (1 host up) scanned in 16.86 seconds
15 [root@localhost named]#

3.3.4.- ping
Una de las utilidades ms sencillas y tiles para diagnosticar problemas de red es ping. Com ping
simplemente enviamos un pequeo paquete de datos al destino. Si el paquete llega, el destino -
habitualmente - responder.
3.- Networking 81

1 [root@delphos ~]# ping 192.168.10.23


2 PING 192.168.10.23 (192.168.10.23) 56(84) bytes of data.
3 64 bytes from 192.168.10.23: icmp_seq=1 ttl=63 time=2.76 ms
4 64 bytes from 192.168.10.23: icmp_seq=2 ttl=62 time=1.59 ms

3.3.5.- ping6
Ping6 es la versin para IPv6 del comando ping. Funciona del mismo modo pero utilizando
direcciones IPv6.

1 [root@CentOS7 ~]# ping6 2001::20c:29ff:fe78:4cb2


2 PING 2001::20c:29ff:fe78:4cb2(2001::20c:29ff:fe78:4cb2) 56 data bytes
3 64 bytes from 2001::20c:29ff:fe78:4cb2: icmp_seq=1 ttl=64 time=0.083 ms
4 64 bytes from 2001::20c:29ff:fe78:4cb2: icmp_seq=2 ttl=64 time=0.080 ms

Si intentamos hacer ping a una direccin local (las que empiezan con de80), necesitamos indicar la
interfaz. De otro modo obtendremos un error.

1 [root@delphos ~]# ping6 fe80::20c:29ff:fe78:4cb1


2 connect: Invalid argument
3 [root@delphos ~]# ping6 -I eth0 fe80::20c:29ff:fe78:4cb1
4 PING fe80::20c:29ff:fe78:4cb1(fe80::20c:29ff:fe78:4cb1) from fe80::20c:29ff:fe78\
5 :4cb1 eth0: 56 data bytes
6 64 bytes from fe80::20c:29ff:fe78:4cb1: icmp_seq=1 ttl=64 time=3.70 ms
7 64 bytes from fe80::20c:29ff:fe78:4cb1: icmp_seq=2 ttl=64 time=0.111 ms
8 64 bytes from fe80::20c:29ff:fe78:4cb1: icmp_seq=3 ttl=64 time=0.044 ms
9 ^C
10 --- fe80::20c:29ff:fe78:4cb1 ping statistics ---
11 3 packets transmitted, 3 received, 0% packet loss, time 2300ms
12 rtt min/avg/max/mdev = 0.044/1.285/3.701/1.708 ms
4.- DNS
El nmero de ordenadores interconectados crece cada da. Es posible disear una red con un esquema
de direccionamiento de red jerrquico que asigne direcciones IP de acuerdo con la ubicacin fsica
de cada mquina, pero incluso en este caso siempre ser ms fcil identificar a los dispositivos de
red por un nombre y no por una direccin IP. Un servidor de DNS local nos permite establecer una
relacin directa entre un nombre de ordenador y su direccin IP, lo que facilita mucho la gestin de
la red.

4.1.- Servicio DNS


Para comunicarse entre s, cada mquina de la red debe disponer de una direccin IP nica. Se podra
decir que existe una cierta analoga conuna red telefnica, en la que un nmero de telfono identifica
a un nico dispositivo y le posibilita la comunicacin con otros telfonos.
Trabajar con direcciones IP est bien para las mquinas, pero puede resultar un engorro para
las personas. Sera necesario recordar la direccin IP de todos y cada uno de los dispositivos a
los que quisiramos conectarnos. Definitivamente es mucho ms cmodo utilizar nombres como
www.google.es o www.redhat.com, mucho ms fciles de recordar.
Internamente las computadoras se comunican entre s utilizando sus direcciones IP, no sus nombres
asociados. As que es necesario tener un sistema capaz de determinar la direccin IP asociada con
un determinado nombre de dominio.
De modo que, por ejemplo, si tecleamos http://www.google.es en nuestro navegador favorito, nuestro
PC tiene que ser capaz de averiguar la direccin IP asociada con el nombre www.google.es. Una vez
que descubre que la direccin IP es 173.194.41.215 establece una conexin y muestra la pgina Web.
Si hubiramos escrito en la barra de direcciones http://173.194.41.215 no habra sido necesario
preguntar la direccin IP de www.google.es.
Un servidor DNS es una mquina que mantiene una lista de asociaciones nombre - direccin IP.
En los primeros das de Internet esto se consegua con un nico fichero de texto que todos los
ordenadores tenan que conocer para poder comunicarse entre s. Este fichero es /etc/passwd, y
an hoy est presente en cada computadora. Por ello se puede utilizar para proporcionar un servicio
de resolucin de nombres bsico. Por ejemplo, podemos abrir el fichero /etc/passwd y aadir la
siguiente lnea:

1 192.168.10.19 www.dummy-domain.com

A partir de este momento, cada vez que nuestra mquina necesite conocer la direccin IP de
www.dummy-domain.com, asumir que esta direccin IP es 192.168.10.19.

82
4.- DNS 83

1 [root@localhost ~]# cat /etc/hosts


2 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
3 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
4 192.168.10.19 dummy-server.example.com
5 192.168.10.19 www.dummy-domain.com
6 [root@localhost ~]# ping www.dummy-domain.com
7 PING www.dummy-domain.com (192.168.10.19) 56(84) bytes of data.
8 64 bytes from dummy-server.example.com (192.168.10.19): icmp_seq=1 ttl=64 time=0\
9 .056 ms
10 64 bytes from dummy-server.example.com (192.168.10.19): icmp_seq=2 ttl=64 time=0\
11 .058 ms
12 64 bytes from dummy-server.example.com (192.168.10.19): icmp_seq=3 ttl=64 time=0\
13 .052 ms
14 ^C
15 --- www.dummy-domain.com ping statistics ---
16 3 packets transmitted, 3 received, 0% packet loss, time 2459ms
17 rtt min/avg/max/mdev = 0.052/0.055/0.058/0.006 ms

Utilizar el fichero host para la resolucijn de nombres todava puede resultar apropiado para
redes pequeas, pero desde el momento en que Internet comenz a crecer result evidente que se
necesitaba un nuevo sistema de resolucin de nombres. Y por ello se desarroll el sistema DNS.
Un servidor DNS mantiene una base de datos con todas las direcciones IP y nombres incluidos en un
dominio. Por supuesto un nico servidor DNS es incapaz de almacenar todas las relaciones nombre -
direccin IP existentes en el Mundo, sino que habitualmente cada servidor DNS solamente mantiene
la informacin relativa a su propio dominio.
Los servidores DNS se organizan de un modo jerrquico, como hemos visto en la Fig. 51, de modo
que cuando el servidor DNS asignado no consigue resolver un nombre, le pasa la peticin a otro
servidor de una capa superior. Es fcil de entender con un ejemplo.
4.- DNS 84

Fig 51:Jerarqua DNS

Imaginemos que estamos delante de una computadora del dominio acme.net y queremos acceder
a la web es.wikipedia.org. La computadora consultar si servidor DNS local acerca del nombre
es.wikipedia.org, pero este servidor solo conoce los registros www.acme.net, mail.acme.net, etc As
que decide consultar al servidor del dominio .net. Este servidor del dominio .net tampoco conoce
la direccin del servidor es.wikipedia.org as que tiene que consultar a su vez al servidor raz (.) .
El servidor raz no sabe la direccin exacta de es.wikipedia.org, pero s que conoce la direccin del
servidor del domino .org, as que le pasa la consulta a dicho servidor. A su vez el servidor de nombres
de .org transmitir esa misma consulta al servidor DNS del dominio wikipedia.org, que ser quien
finalmente nos diga la direccin IP asociada con el nombre es.wikipedia.org, la respuesta se le pasar
al servidor DNS del dominio acme.net, que a su vez le responder al cliente.

4.2.- Instalar un servidor DNS


Para ilustrar la teora que hemos visto hasta ahora, vamos a instalar y configurar un servidor
DNS. El paquete que tendremos que instalar es bind. Si ya tenemos una conexin a Internet
podemos usar yum sin las opciones disablerepo y enablerepo, ya que la aplicacin descargar
de los repositorios de Internet los paquetes necesarios. Tambin podemos usar el parmetro -y para
responder automticamente que s a cualquier mensaje de confirmacin. Por otro lado, si todava no
tenemos una conexin a Internet tendremos que usar las opciones que vimos antes y asegurarnos
de que el DVD est montado.
4.- DNS 85

1 [root@localhost ~]# yum -y install bind

4.2.1.- Arrancando el servicio en CentOS 6


Una vez instalado, deberamos tener un nuevo script en el directorio /etc/init.d. Este script se llamar
named.

1 [root@localhost ~]# ls /etc/init.d/named


2 /etc/init.d/named

Podemos comprobar el estado de este nuevo servicio llamando al script con el parmetro status.

1 [root@localhost ~]# /etc/init.d/named status


2 rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
3 named is stopped

O tambin podemos usar el comando service.

1 [root@localhost ~]# service named status


2 rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
3 named is stopped

En ambos casos vemos que el servicio named est parado. Y tambin parece que faltan un par de
ficheros. Entraremos en ms detalle dentro de un momento, pero por ahora nos limitaremos a iniciar
el servicio con el siguiente comando:

1 [root@localhost ~]# service named start


2 Starting named: [ OK ]
3 [root@localhost ~]# service named status
4 rndc: neither /etc/rndc.conf nor /etc/rndc.key was found
5 named (pid 1570) is running...

Ahora deberemos asegurarnos de que el servicio arranca automticamente cada vez que el servidor
se reinicie. Podemos comprobar esto con chkconfig.

1 [root@localhost ~]# chkconfig --list named


2 named 0:off 1:off 2:off 3:off 4:off 5:off 6:off

Podemos ver que, ahora mismo, el servicio named no est configurado para arrancar de forma
automtica en ninguno de los 6 niveles de ejecucin. Lo cambiamos.
4.- DNS 86

1 [root@localhost ~]# chkconfig named on


2 [root@localhost ~]# chkconfig --list named
3 named 0:off 1:off 2:on 3:on 4:on 5:on 6:off

Ahora el servicio named se iniciar en todos los niveles de ejecucin, excepto el 0(apagado), el
1(monousuario) y el 6(reinicio).
Hasta ahora no hemos hablado de niveles de ejecucin, pero podemos decir que es la forma que
tiene el SO de identificar si la mquina est apagada (nivel de ejecucin 0), en modo monousuario
(nivel de ejecucin 1), en modo texto multiusuario con conectividad limitada (nivel de ejecucin
2), en modo texto multiusuario con conectividad completa (nivel de ejecucin 3), en modo grfico
multiusuario (nivel de ejecucin 5) o reinicindose (nivel de ejecucin 6). El nivel de ejecucin 4 no
se usa por defecto, pero puede ser definido por el usuario.

4.2.2.- Arrancando el servicio en CentOS 7


La gestin de servicios en CentOS 7 ha experimentado muchos cambios, y ahora el sistema ya no
utiliza los scripts de /etc/init.d, excepto para unos pocos servicios. El resto son gestionados ahora por
systemd.
Para comprobar el estado de un servicio tendremos que usar el comando systemctl.

1 [root@Centos7 ~]# systemctl status named


2 named.service - Berkeley Internet Name Domain (DNS)
3 Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
4 Active: inactive (dead)

Vemos que es servicio est detenido, as que lo iniciamos.

1 [root@Centos7 ~]# systemctl start named


2 [root@Centos7 ~]# systemctl status named
3 named.service - Berkeley Internet Name Domain (DNS)
4 Loaded: loaded (/usr/lib/systemd/system/named.service; disabled)
5 Active: active (running) since dom 2014-11-23 01:05:36 CET; 4s ago
6 Process: 2855 ExecStart=/usr/sbin/named -u named $OPTIONS (code=exited, status\
7 =0/SUCCESS)
8 Process: 2853 ExecStartPre=/usr/sbin/named-checkconf -z /etc/named.conf (code=\
9 exited, status=0/SUCCESS)
10 Main PID: 2857 (named)
11 CGroup: /system.slice/named.service
12 2857 /usr/sbin/named -u named
13
4.- DNS 87

14 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: veri...un


15 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: no v...nd
16 nov 23 01:05:37 Centos7 named[2857]: error (no valid RRSIG) resolving './NS...53
17 nov 23 01:05:37 Centos7 named[2857]: error (network unreachable) resolving ...53
18 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: veri...un
19 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: no v...nd
20 nov 23 01:05:37 Centos7 named[2857]: error (no valid RRSIG) resolving './NS...53
21 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: veri...un
22 nov 23 01:05:37 Centos7 named[2857]: validating @0x7fa9c062ff10: . NS: no v...nd
23 nov 23 01:05:37 Centos7 named[2857]: error (no valid RRSIG) resolving './NS...53
24 Hint: Some lines were ellipsized, use -l to show in full.

Ahora el servicio est en ejecucin, pero tenemos que asegurarnos de que se inicia con cada arranque
del servidor.

1 [root@Centos7 ~]# systemctl enable named


2 ln -s '/usr/lib/systemd/system/named.service' '/etc/systemd/system/multi-user.ta\
3 rget.wants/named.service'

Podemos comprobar que el servicio se ha habilitado correctamente con el siguiente comando:

1 [root@Centos7 ~]# systemctl list-unit-files --type=service

Obtenemos as un listado de los servicios instalados en el servidor.

1 UNIT FILE STATE


2 auditd.service enabled
3 .
4 .
5 .
6 named.service enabled
7 .
8 .
9 .

4.3.- Instalando un servidor maestro


Antes de pasar a la instalacin vamos a hablar un poco acerca de los tipos de servidores DNS:
Como ya sabemos, un servidor DNS traduce nombres en direcciones IP. Pero segn su modo de
funcionamiento se pueden distinguir diferentes tipos de servidor:
4.- DNS 88

Servidor de cach. En este caso, el servidor no almacena ninguna informacin con las
relaciones nombre - direccin IP, de forma que tiene que consultar con otros servidores que
s disponen de dicha informacin. Pero una vez que obtiene esa informacin la mantiene
en cach, de tal modo que cuando otro cliente hace esa misma consulta puede responder
rpidamente sin necesidad de contactar con otros servidores.
Servidor maestro. El servidor mantiene una copia de los nombres e IPs de los dispositivos
pertenecientes al dominio, lo que se denomina una zona. Este servidor tiene autoridad para
cambiar la IP asociada a un nombre determinado, as como para aadir o eliminar registros.
Servidor esclavo. El servidor mantiene tambin una copia de la zona, pero de solo lectura.
El servidor cuenta con toda la informacin necesaria para responder a las consultas de los
clientes, pero no puede cambiar, aadir o eliminar registros.

Hasta ahora hemos instalado el software necesario pero, obviamente, necesitamos configurarlo.
Vamos a suponer que tenemos un dominio llamado olimpus.local, y unas cuantas mquinas llamadas
prometheus, zeus, aphrodite, etc y queremos asegurarnos de que cuando un cliente busca la
mquina aphrodite.olimpus.local obtiene su direccin IP asociada. Para lograr esto, tendremos que
crear la zona. Veamos el procedimiento paso a paso.
El archivo de configuracin principal del servidor DNS es /etc/named.conf. Despus de una
instalacin nueva tendr un aspecto como este:

1 //
2 // named.conf
3 //
4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS
5 // server as a caching only nameserver (as a localhost DNS resolver only).
6 //
7 // See /usr/share/doc/bind*/sample/ for example named configuration files.
8 //
9
10 options {
11 listen-on port 53 { 127.0.0.1; };
12 listen-on-v6 port 53 { ::1; };
13 directory "/var/named";
14 dump-file "/var/named/data/cache_dump.db";
15 statistics-file "/var/named/data/named_stats.txt";
16 memstatistics-file "/var/named/data/named_mem_stats.txt";
17 allow-query { localhost; };
18 recursion yes;
19
20 dnssec-enable yes;
21 dnssec-validation yes;
22 dnssec-lookaside auto;
4.- DNS 89

23
24 /* Path to ISC DLV key */
25 bindkeys-file "/etc/named.iscdlv.key";
26 };
27
28 logging {
29 channel default_debug {
30 file "data/named.run";
31 severity dynamic;
32 };
33 };
34
35 zone "." IN {
36 type hint;
37 file "named.ca";
38 };
39
40 include "/etc/named.rfc1912.zones";

Este es el fichero de configuracin de un servidor CentOS 6, en CentOS 7 el fichero es ligeramente


distinto, no obstante la forma de configurarlo es exactamente la misma en los dos casos.
Estas son algunas de las opciones ms importantes:

1 listen-on port 53 { 127.0.0.1; };


2 listen-on-v6 port 53 { ::1; };

El servidor solamente escuchar en la direccin del localhost, es decir, no ser accesible desde otros
dispositivos de la red. Como queremos que se pueda consultar al servidor DNS desde otras mquinas
cambiaremos estas dos lneas.

1 listen-on port 53 { any; };


2 listen-on-v6 port 53 { any; };
3
4
5 directory "/var/named";

Esto solo significa que el directorio por defecto para los archivos de zona ser /var/named. No es
necesario cambiar esto.
4.- DNS 90

1 allow-query { localhost; };

Queremos que el servidor responda a peticiones de cualquier mquina, as que cambiamos este valor.

1 allow-query { any; };
2
3 zone "." IN {
4 type hint;
5 file "named.ca";
6 };

Esta es la nica zona definida por ahora en el fichero de configuracin. La zona que se encuentra
en la cima de la jerarqua. Si abrimos el fichero /var/named/named.ca veremos que contiene las
direcciones de los servidores raz de Internet.
Ahora tendremos que proporcionarle al servidor la informacin relativa a nuestro dominio. De modo
que debajo de la definicin de la zona . teclearemos esto:

1 zone "olimpus.local" IN {
2 type master;
3 file "olimpus.local.zone";
4 };

Ahora podemos guardar los cambios. Para asegurarnos de que la sintaxis del fichero named.conf es
correcta podemos usar el comando named-checkconf.

1 [root@localhost ~]# named-checkconf


2 [root@localhost ~]#

Como vemos, el comando no ha mostrado ningn mensaje, por lo que podemos asumir que la
sintaxis es correcta. Si hubiera un error sintctico el programa nos lo indicara. Por ejemplo, si nos
hubiramos olvidado de cerrar una llave recibiramos un mensaje como este:

1 [root@localhost ~]# named-checkconf


2 /etc/named.conf:26: '}' expected near ';'

Acabamos de definir la zona en el archivo /etc/named.conf, pero ahora tenemos que crear el fichero
/var/named/olimpus.local.zone, al que hacemos referencia en la definicin de la zona. Como cabra
esperar, el fichero debe cumplir con unas caractersticas sintcticas determinadas. Si estamos creando
un fichero de zona desde cero y no recordamos todos los detalles acerca de la sintaxis del fichero
podemos echar un vistazo a algunos de los ficheros de muestra en el directorio /usr/share/doc/bind-
9.7.3/sample. De hecho, la carpeta /usr/share/doc* es un recurso muy til siempre que intentamos
configurar o afinar un servicio, ya que ah podemos encontrar ejemplos de ficheros de configuracin
para casi todos los servicios instalados en el servidor.
El fichero de zona debera quedar similar a este:
4.- DNS 91

1 ;
2 ;Data file for olimpus.local
3 ;
4 $TTL 2D
5 olimpus.local. IN SOA olimpus.local. root.olimpus.local. (
6 2014082701; Serial
7 1D; Refresh
8 2H; Retry
9 1W; Expire
10 2D); Default TTL
11
12 IN NS delphos.olimpus.local.
13 IN MX 10 prometheus.olimpus.local.
14
15 delphos IN A 192.168.1.20
16 prometheus IN A 192.168.1.21
17 aphrodite IN A 192.168.1.22
18 delphos IN AAAA fe80::20c:29ff:fe78:4cb1
19 dns IN CNAME delphos
20 mail IN CNAME prometheus

Las lneas que empiezan con ; son comentarios que se utilizan para aclarar el contenido del fichero.
Despus definimos los parmetros asociados al fichero de zona, tales como los parmetros de refresco
y reintento, el tiempo de expiracin o el TTL por defecto. Cada fichero de zona debe tener un nmero
de serie asociado, este nmero se utilizar al replicar informacin entre servidores para saber si existe
una versin ms nueva de un fichero de zona.

1 IN NS delphos.olimpus.local.

Este es un registro NS, nos dice cules son los servidores de nombres del dominio olimpus.local. Este
registro es obligatorio. En nuestro ejemplo el nico servidor de nombres es delphos.olimpus.local,
pero podramos tener varios de ellos.

1 IN MX 10 prometheus.olimpus.local.

De un modo similar, aqu definimos el servidor de correo del dominio olimpus.local y su prioridad
asociada (10). En este caso solo tenemos un servidor de correo, pero podramos tener dos o incluso
ms, y asignar a cada uno de ellos distinta prioridad dependiendo de su potencia de proceso. Veremos
esto de nuevo al hablar del servicio de correo.
4.- DNS 92

1 delphos IN A 192.168.1.20
2 prometheus IN A 192.168.1.21
3 aphrodite IN A 192.168.1.22

Ahora tenemos una lista con todas las mquinas en la zona y sus direcciones IP asociadas. Estos
registros se denominan registros de tipo A.

1 delphos IN AAAA fe80::20c:29ff:fe78:4cb1

Adems podemos asociar nombres y direcciones IPv6, en este caso se usan registros AAAA.

1 dns IN CNAME delphos


2 mail IN CNAME prometheus

Y finalmente tenemos un par de registros CNAME, que funcionan como alias. Es decir, el cliente
podr hacer ping a delphos.olimpus.local o a dns.olimpus.local indistintamente.
Una vez que hemos terminado de configurar la zona, podemos revisar la sintaxis con el comando
named-checkzone.

1 [root@localhost named]# named-checkzone olimpus.local olimpus.local.zone


2 zone olimpus.local/IN: loaded serial 20140827
3 OK

Ahora arrancamos el servicion named.


En CentOS 6:

1 [root@localhost named]# service named start


2 Starting named: [ OK ]

En CentOS 7:

1 [root@Centos7 ~]# systemctl start named

Aparentemente todo ha ido bien, peor para asegurarnos vamos a consultar al servidor DNS la
direccin de la mquina delphos.olimpus.local. Ms tarde veremos con ms detalle algunas de
las herramientas que se pueden usar para consultar el servicio DNS, por ahora vamos a hacer una
breve introduccin al comando dig.
Dig nos permite consultar al servidor DNS que elijamos. Para chequear nuestro nuevo servidor de
nombres teclearemos esto:
4.- DNS 93

1 [root@localhost named]# dig @192.168.1.20 delphos.olimpus.local


2 -bash: dig: command not found

Como hemos mencionado ya varias veces, si la utilidad no est instalada por defecto, tendremos que
averiguar el paquete al que pertenece e instalarlo. A partir de este momento ya no insistiremos ms
en este punto.

1 [root@localhost named]# yum --disablerepo=* --enablerepo=c6-media provides dig


2 Loaded plugins: fastestmirror
3 Loading mirror speeds from cached hostfile
4 * c6-media:
5 Warning: 3.0.x versions of yum would erroneously match against filenames.
6 You can use "*/dig" and/or "*bin/dig" to get that behaviour
7 No Matches found
8 [root@localhost named]# yum --disablerepo=* --enablerepo=c6-media provides */dig
9 Loaded plugins: fastestmirror
10 Loading mirror speeds from cached hostfile
11 * c6-media:
12 32:bind-utils-9.7.3-8.P3.el6.i686 : Utilities for querying DNS name servers
13 Repo : c6-media
14 Matched from:
15 Filename : /usr/bin/dig
16
17 [root@localhost named]# yum --disablerepo=* --enablerepo=c6-media install bind-u\
18 tils
19 Loaded plugins: fastestmirror
20 Loading mirror speeds from cached hostfile
21 * c6-media:
22 Setting up Install Process
23 Resolving Dependencies
24 --> Running transaction check
25 ---> Package bind-utils.i686 32:9.7.3-8.P3.el6 will be installed
26 --> Finished Dependency Resolution
27
28 Dependencies Resolved
29
30 ================================================================================
31 Package Arch Version Repository Size
32 ================================================================================
33 Installing:
34 bind-utils i686 32:9.7.3-8.P3.el6 c6-media 177 k
35
4.- DNS 94

36 Transaction Summary
37 ================================================================================
38 Install 1 Package(s)
39
40 Total download size: 177 k
41 Installed size: 423 k
42 Is this ok [y/N]: y
43 Downloading Packages:
44 Running rpm_check_debug
45 Running Transaction Test
46 Transaction Test Succeeded
47 Running Transaction
48 Installing : 32:bind-utils-9.7.3-8.P3.el6.i686 1/1
49
50 Installed:
51 bind-utils.i686 32:9.7.3-8.P3.el6
52
53 Complete!
54 [root@localhost named]#

Ahora ya podemos hacer la consulta

1 [root@localhost named]# dig @192.168.1.20 delphos.olimpus.local


2 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 delphos.olimpus.loc\
3 al
4 ; (1 server found)
5 ;; global options: +cmd
6 ;; Got answer:
7 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 27770
8 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 1
9
10 ;; QUESTION SECTION:
11 ;delphos.olimpus.local. IN A
12
13 ;; ANSWER SECTION:
14 delphos.olimpus.local. 172800 IN A 192.168.1.20
15
16 ;; AUTHORITY SECTION:
17 olimpus.local. 172800 IN NS delphos.olimpus.local.
18
19 ;; ADDITIONAL SECTION:
20 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
4.- DNS 95

21
22 ;; Query time: 7 msec
23 ;; SERVER: 192.168.1.20#53(192.168.1.20)
24 ;; WHEN: Sat Aug 2 10:42:07 2014
25 ;; MSG SIZE rcvd: 97
26
27 [root@localhost named]#

Queremos consultar al servidor 192.168.1.20, as que le pasamos este dato como parmetro(@192.168.1.20).
Podemos ver que se ejecut correctamente (status: NOERROR). Adems, el servidor nos respondi
que delphos.olimpus.local tiene la direccin IPv4 192.168.1.20 y la direccin IPv6 fe80::20c:29ff:fe78:4cb1,
lo que es correcto.
Parece que ya tenemos un servidor DNS funcional, pero desafortunadamente esto no es completa-
mente cierto. Hasta ahora tenemos una forma de traducir nombres en direcciones IP. Esto es lo que
se llama resolucin directa, pero tambin deberamos tener un modo de traducir direcciones IP en
nombres de mquina (resolucin inversa). Para conseguir esto, el procedimiento es bastante similar
a lo que hemos visto antes.
En el fichero /etc/named.conf definiremos una nueva zona que proporcionar la resolucin inversa.
La haremos justo debajo de la zona olimpus.local.

1 zone "1.168.192.in-addr.arpa" IN {
2 type master;
3 file "192.168.1.zone";
4 };

El formato x.x.x.in-addr.arpa, donde x.x.x.x es la direccin de red en orden inverso, es una forma
estndar de nombrar las zonas inversas.
Ahora creamos el fichero /var/named/192.168.1.zone. La sintaxis es similar a la utilizada en el fichero
olimpus.local.zone.

1 $TTL 2D;
2 1.168.192.in-addr.arpa. IN SOA delphos.olimpus.local. root.olimpus.local. (
3 2014082701 ;serial
4 259200 ;refresh(3 days)
5 14400 ;retry(4 hours)
6 18140 ;expire(3 weeks)
7 604800 ;minimum(1 week)
8 )
9 NS delphos.olimpus.local.
10
11 20 PTR delphos.olimpus.local.

Y lo revisamos.
4.- DNS 96

1 [root@localhost named]# named-checkzone 1.168.192.in-addr.arpa 192.168.1.zone


2 zone 1.168.192.in-addr.arpa/IN: loaded serial 2014082701
3 OK

Reiniciamos el servicio
En CentOS 6:

1 [root@localhost named]# service named restart


2 Stopping named: [ OK ]
3 Starting named: [ OK ]

En CentOS 7:

1 [root@Centos7 ~]# systemctl restart named

y consultamos al servidor con la herramienta dig.

1 [root@localhost named]# dig @192.168.1.20 -x 192.168.1.20


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 -x 192.168.1.20
4 ; (1 server found)
5 ;; global options: +cmd
6 ;; Got answer:
7 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 62275
8 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
9
10 ;; QUESTION SECTION:
11 ;20.1.168.192.in-addr.arpa. IN PTR
12
13 ;; ANSWER SECTION:
14 20.1.168.192.in-addr.arpa. 172800 IN PTR delphos.olimpus.local.
15
16 ;; AUTHORITY SECTION:
17 1.168.192.in-addr.arpa. 172800 IN NS delphos.olimpus.local.
18
19 ;; ADDITIONAL SECTION:
20 delphos.olimpus.local. 172800 IN A 192.168.1.20
21 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
22
23 ;; Query time: 2 msec
24 ;; SERVER: 192.168.1.20#53(192.168.1.20)
25 ;; WHEN: Sat Aug 2 11:28:31 2014
26 ;; MSG SIZE rcvd: 136
4.- DNS 97

Como ocurri antes, podemos ver que la consulta se ejecut sin errores (status: NOERROR), y el
servidor respondi que la direccin IPv4 192.168.1.20 est asignada al servidor delphos.olimpus.local.
Finalmente crearemos la zona inversa para IPv6. Abrimos de nuevo el fichero /etc/named.conf y
aadimos las siguientes lneas:

1 zone "0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa" IN {
2 type master;
3 file "fe80.0.0.0.zone";
4 };

Como vemos, el nombre estndar es similar al que se utiliza con las zonas IPv4, tambin consiste en
la direccin de red en orden inverso, pero ahora el sufijo es ip6.arpa.
En lo que respecta al fichero /var/named/fe80.0.0.0.zone esto es lo que tenemos que escribir:

1 $TTL 172800 ; 2 days


2 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN SOA delphos.olimpus.local. root.oli\
3 mpus.local. (
4 2014082701 ;serial
5 259200 ;refresh(3 days)
6 14400 ;retry(4 hours)
7 18140 ;expire(3 weeks)
8 604800 ;minimum(1 week)
9 )
10
11 NS delphos.olimpus.local.
12 1.b.c.4.8.7.e.f.f.f.9.2.c.0.2.0 IN PTR delphos

Y comprobamos la sintaxis.

1 [root@localhost named]# named-checkzone 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa\


2 fe80.0.0.0.zone
3 zone 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa/IN: loaded serial 2014082701
4 OK

Reiniciamos el servicio named y consultamos al servidor de nuevo.


4.- DNS 98

1 [root@localhost named]# dig @192.168.1.20 -x fe80::20c:29ff:fe78:4cb1


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 -x fe80::20c:29ff:f\
4 e78:4cb1
5 ; (1 server found)
6 ;; global options: +cmd
7 ;; Got answer:
8 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29346
9 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
10
11 ;; QUESTION SECTION:
12 ;1.b.c.4.8.7.e.f.f.f.9.2.c.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. IN PT\
13 R
14
15 ;; ANSWER SECTION:
16 1.b.c.4.8.7.e.f.f.f.9.2.c.0.2.0.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. 172800\
17 IN PTR delphos.0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa.
18
19 ;; AUTHORITY SECTION:
20 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa. 172800 IN NS delphos.olimpus.local.
21
22 ;; ADDITIONAL SECTION:
23 delphos.olimpus.local. 172800 IN A 192.168.1.20
24 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
25
26 ;; Query time: 1 msec
27 ;; SERVER: 192.168.1.20#53(192.168.1.20)
28 ;; WHEN: Sat Aug 2 11:58:03 2014
29 ;; MSG SIZE rcvd: 191

Todo est funcionando bien ahora, as que configuraremos el servicio para que arranque automti-
camente despus de cada reinicio. Hay diferentes formas de hacer esto, por ejemplo en CentOS 6
podemos usar chkconfig.

1 [root@localhost ~]# chkconfig named on


2 [root@localhost ~]# chkconfig --list named
3 named 0:off 1:off 2:on 3:on 4:on 5:on 6:off

En CentOS 7 deberamos usar el comando systemctl.


4.- DNS 99

1 [root@localhost ~]# systemctl enable named

A partir de ahora, cada vez que se reinicie el servidor el servicio named se iniciar automticamente.
Ahora podremos resolver los nombres de dominio que hemos definido en nuestras zonas, pero
si queremos que nuestro servidor pueda resolver dominios de Internet como www.google.com,
tendremos que reenviar esas peticiones a un servidor DNS externo. Si el servidor DNS externo tiene
la IP 192.168.1.1, habr que incluir las siguientes lneas en el fichero /etc/named.conf :

1 forwarders {
2 192.168.1.1;
3 };

Estas lneas deberan incluirse en la seccin de opciones generales, de modo que el fichero de
configuracin debera quedar ms o menos as:

1 options {
2 listen-on port 53 { any; };
3 listen-on-v6 port 53 { any; };
4 .
5 .
6 .
7 forwarders {
8 192.168.1.1;
9 };
10 .
11 .
12 .

4.4.- Configuracin del cliente


En Linux podemos ver la configuracin actual del cliente DNS en el fichero /etc/resolv.conf.

1 [root@delphos ~]# cat /etc/resolv.conf


2 nameserver 192.168.1.20
3 search olimpus.local

En este ejemplo, el cliente enviar las consultas DNS al servidor 192.168.1.20. Si en la consulta no se
ha especificado un sufijo DNS se aadir por defecto olimpus.local.
Podemos editar este fichero a mano, pero normalmente resulta ms sencillo utilizar una de las
herramientas administrativas que cada distribucin de Linux pone a nuestra disposicin. Por
4.- DNS 100

ejemplo, en CentOS 6 podemos usar el programa system-config-network, en CentOS 7 no hay


ningn programa system-config-network, pero hay uno similar llamado nmtui, en Suse podemos
hacer lo mismo con Yast, en Ubuntu podemos abrir System settings e ir luego a Network.
Por su parte en Windows tendremos que editar las propiedades TCP/IP de la conexin LAN (Fig. 52
y Fig. 53).

Fig 52:propiedades de la conexin LAN


4.- DNS 101

Fig 53:Configuracin IP

Por supuesto, para que los clientes puedan acceder al servidor DNS tenemos que permitir en el
firewall el acceso al puerto UDP 53.
En CentOS 6:

1 [root@delphos ~]# iptables -I INPUT 2 -m state --state new -p udp --dport 53 -j \


2 ACCEPT

En CentOS 7:

1 [root@CentOS7 ~]# firewall-cmd --add-service=dns


2 success

En el caso de CentOS 7, con el comando anterior estamos permitiendo el acceso tanto al puerto UDP
53 como al puerto TCP 53. Podremos ver ms detalles acerca del firewall incluido en CentOS 7 en
la seccin 10 de este libro.

4.5.- Servidores esclavos y transferencias de zona


En este punto, tenemos un servidor que alberga toda la informacin de la zona olimpus.local. Como
veremos a lo largo de este libro, el DNS es un servicio fundamental, puesto que de l depende el
4.- DNS 102

correcto funcionamiento de muchos otros servicios. Por lo que una cada del servicio DNS puede ser
desastrosa para el funcionamiento de la red. Para minimizar este riesgo podemos instalar un nuevo
servidor de nombres. Este nuevo servidor ser un servidor esclavo, esto quiere decir que ser un
servidor con una copia de los ficheros de zona de solo lectura. El servidor ser capaz de responder
a las consultas de los clientes, pero no podr actualizar la informacin. De este modo tenemos dos
servidores para compartir la carga, adems, si el servidor maestro quedara inutilizable por una avera
podramos convertir nuestro servidor esclavo en un servidor maestro muy fcilmente.
Ya hemos visto con anterioridad cmo instalar CentOS, as que vamos a suponer que tenemos otro
servidor CentOS funcionando. Instalamos el paquete bind como hicimos con el servidor maestro y
aadiremos las siguientes lneas al fichero named.conf :

1 zone "olimpus.local" IN {
2 type slave;
3 file "slaves/olimpus.local.zone";
4 masters {
5 192.168.1.20;
6 };
7 };
8
9 zone "1.168.192.in-addr.arpa" IN {
10 type slave;
11 file "slaves/192.168.1.zone";
12 masters {
13 192.168.1.20;
14 };
15
16 };
17
18 zone "0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa" IN {
19 type slave;
20 file "slaves/fe80.0.0.0.zone";
21 masters {
22 192.168.1.20;
23 };
24
25 };

Bsicamente enumeramos las zonas, las declaramos como esclavas e indicamos cul es el servidor
maestro, 192.168.1.20 en este caso.
Por supuesto, igual que hicimos con el servidor maestro, tendremos que cambiar los parmetros por
defecto para asegurarnos de que el servidor escucha en todas las direcciones de red y puede ser
consultado por cualquier cliente.
4.- DNS 103

1 listen-on port 53 { any; };


2 listen-on-v6 port 53 { any; };
3 allow-query { any; };

Tambin tendremos que hacer algunos otros cambios en los ficheros de zona del servidor maestro.
Crearemos otro registro NS para el servidor esclavo. Si el nuevo servidor esclavo es prometheus la
nueva lnea quedar as:

1 .
2 .
3 .
4 IN NS delphos.olimpus.local.
5 IN NS prometheus.olimpus.local.
6 .
7 .
8 .

Esto hay que hacerlo en los ficheros olimpus.local.zone, 192.168.1.zone y fe80.0.0.0.zone. Adems,
tambin deberamos notificarle al servidor esclavo cada vez que el fichero de zona es actualizado.
Para eso utilizaremos la directiva notify yes en la definicin de la zona del fichero named.conf :

1 zone "olimpus.local" IN {
2 type master;
3 file "olimpus.local.zone";
4 notify yes;
5 };
6
7 zone "1.168.192.in-addr.arpa" IN {
8 type master;
9 file "192.168.1.zone";
10 notify yes;
11 };
12
13 zone "0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa" IN {
14 type master;
15 file "fe80.0.0.0.zone";
16 notify yes;
17 };

En el servidor esclavo el servicio named deber ser capaz de crear los ficheros de zona en la carpeta
/var/named/slaves, as que tendremos que asegurarnos de que el usuario named tiene derechos de
escritura en dicha carpeta.
4.- DNS 104

1 [root@localhost named]# ls -ld slaves/


2 drwxrwx---. 2 named named 4096 Dec 8 2011 slaves/

Ya hemos hablado brevemente de SELINUX con anterioridad. Podramos describirlo como un


mecanismo de seguridad que crea otra capa de proteccin contra el acceso no autorizado, limitando el
dao que un hacker podra hacer al sistema. SELinux limita lo que un proceso o servicio puede hacer,
esto por supuesto incluye tambin al servicio named. Veremos cmo hacer que named funcione
correctamente en un entorno con SELinux.
Primero comprobamos si SELinux est activo:

1 [root@localhost named]# sestatus


2 SELinux status: enabled
3 SELinuxfs mount: /selinux
4 Current mode: enforcing
5 Mode from config file: enforcing
6 Policy version: 24
7 Policy from config file: targeted

Tambin tenemos que comprobar los valores booleanos de SELinux relacionados con el servicio
DNS.

1 [root@localhost named]# getsebool -a | grep named


2 named_write_master_zones --> off

Lo que nos indica este parmetro es que named no podr escribir los ficheros de zona. Obviamente,
esto hara que fallara la transferencia de zona, por lo que tendremos que cambiar este valor a on.

1 [root@localhost named]# setsebool named_write_master_zones on


2 [root@localhost named]# getsebool -a | grep named
3 named_write_master_zones --> on

Haremos que el cambio sea permanente con (-P).

1 [root@Centos7b ~]# setsebool -P named_write_master_zones 1

Al transferir zonas, el servidor esclavo tendr que conectar con el puerto 53 del servidor maestro.
Evidentemente, es preciso que el puerto sea accesible desde la red. Para comprobar este punto
podemos ejecutar el programa nmap desde el servidor esclavo.
4.- DNS 105

1 [root@localhost named]# nmap -p 53 192.168.1.20


2 Starting Nmap 5.21 ( http://nmap.org ) at 2013-11-12 01:12 CET
3 mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled.\
4 Try using --system-dns or specify valid servers with --dns-servers
5 Nmap scan report for 192.168.1.20
6 Host is up (0.00026s latency).
7 PORT STATE SERVICE
8 53/tcp filtered domain
9 MAC Address: 00:0C:29:78:4C:B1 (VMware)
10
11 Nmap done: 1 IP address (1 host up) scanned in 0.06 seconds

Como vemos, el puerto est filtrado. Tendremos que abrirlo en el firewall en el servidor maestro. En
una seccin posterior del libro veremos ms detalles acerca de la administracin del firewall. Por
ahora explicaremos cmo abrir el puerto. Dependiendo de si estamos usando CentOS 6 o CentOS
7 la forma de hacerlo ser diferente.
En CentOS 6 podemos listar la configuracin del firewall tecleando iptables -L en el servidor
maestro.

1 [root@localhost named]# iptables -L


2 Chain INPUT (policy ACCEPT)
3 target prot opt source destination
4 ACCEPT all -- anywhere anywhere state RELATED,ESTAB\
5 LISHED
6 ACCEPT icmp -- anywhere anywhere
7 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:s\
8 sh
9 REJECT all -- anywhere anywhere reject-with icmp-ho\
10 st-prohibited
11
12 Chain FORWARD (policy ACCEPT)
13 target prot opt source destination
14 REJECT all -- anywhere anywhere reject-with icmp-ho\
15 st-prohibited
16
17 Chain OUTPUT (policy ACCEPT)
18 target prot opt source destination

Por defecto solo se permiten las conexiones al puerto ssh. Tendremos que aadir la siguiente lnea
para permitir el acceso al puerto 53.
4.- DNS 106

1 [root@localhost named]# iptables -I INPUT 4 -m state --state NEW -m tcp -p tcp -\


2 -dport 53 -j ACCEPT

Insertamos una nueva regla de entrada en la 4 posicin. Permitiendo las nuevas conexiones al puerto
53. Una vez que se establece la nueva conexin, el trfico asociado estar permitido como se indica
en la lnea:

1 ACCEPT all -- anywhere anywhere state RELATED,ESTAB\


2 LISHED

El conjunto completo de reglas en el firewall podra ser ms o menos este:

1 [root@localhost named]# iptables -L


2 Chain INPUT (policy ACCEPT)
3 target prot opt source destination
4 ACCEPT all -- anywhere anywhere state RELATED,ESTAB\
5 LISHED
6 ACCEPT icmp -- anywhere anywhere
7 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:s\
8 sh
9 ACCEPT tcp -- anywhere anywhere state NEW tcp dpt:d\
10 omain
11 REJECT all -- anywhere anywhere reject-with icmp-ho\
12 st-prohibited
13
14 Chain FORWARD (policy ACCEPT)
15 target prot opt source destination
16 REJECT all -- anywhere anywhere reject-with icmp-ho\
17 st-prohibited
18
19 Chain OUTPUT (policy ACCEPT)
20 target prot opt source destination

En CentOS 7 tambin se puede utilizar iptables, pero se recomienda usar el comando firewall-cmd
en su lugar. Lo primero de todo ser averiguar la zona por defecto.

1 [root@localhost ~]# firewall-cmd --get-default-zone


2 public

Y ahora listamos los servicios permitidos.


4.- DNS 107

1 [root@localhost ~]# firewall-cmd --zone=internal --list-services


2 ssh

En este caso solo est permitido el acceso al servicio ssh, tendremos que aadir el servicio dns.

1 [root@localhost ~]# firewall-cmd --zone=internal --add-service=dns


2 success

Si ahora repetimos el test con nmap desde el servidor esclavo veremos que el puerto est abierto.

1 [root@localhost named]# nmap -p 53 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2013-11-12 01:31 CET
4 mass_dns: warning: Unable to determine any DNS servers. Reverse DNS is disabled.\
5 Try using --system-dns or specify valid servers with --dns-servers
6 Nmap scan report for 192.168.1.20
7 Host is up (0.0020s latency).
8 PORT STATE SERVICE
9 53/tcp open domain
10 MAC Address: 00:0C:29:78:4C:B1 (VMware)
11
12 Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

Tendremos que hacer lo mismo en el servidor esclavo, de forma que las transferencias de zona puedan
tener lugar en ambos sentidos.
Tambin tendremos que cambiar las siguientes directivas del fichero named.conf, las cuales se usan
con DNSEC.

1 dnssec-enable no;
2 dnssec-validation no;

Ahora podemos comprobar si la transferencia de zona realmente funciona reiniciando el servicio


named en el servidor esclavo.
En CentOS 6:
4.- DNS 108

1 [root@localhost named]# service named restart


2 Stopping named: [ OK ]
3 Starting named: [ OK ]
4 [root@localhost named]#

En CentOS 7:

1 [root@Centos7 ~]# systemctl restart named

Si todo ha ido bien deberemos tener tres ficheros en la carpeta /var/named/slaves.

1 [root@localhost named]# ls /var/named/slaves/


2 192.168.1.zone fe80.0.0.0.zone olimpus.local.zone

Ahora cada vez que modifiquemos una zona en el servidor maestro actualizaremos el nmero
de serie, de este modo el cambi se replicar al servidor esclavo. Por ejemplo, supongamos que
aadimos un nuevo registro para el servidor vulcan, con direccin IPv4 192.168.1.23 y direccin
IPv6 fe80::20c:29ff:fedf:d786/64.
Aadimos los nuevos registros A y AAAA al fichero de zona.

1 .
2 .
3 .
4 delphos IN A 192.168.1.20
5 prometheus IN A 192.168.1.21
6 aphrodite IN A 192.168.1.22
7 vulcan IN A 192.168.1.23
8
9 delphos IN AAAA fe80::20c:29ff:fe78:4cb1
10 prometheus IN AAAA fe80::20c:29ff:feeb:4443
11 vulcan IN AAAA fe80::20c:29ff:fedf:d786
12 .
13 .
14 .

Y aadimos tambin los registros PTR a los ficheros de zona inversa.


4.- DNS 109

1 .
2 .
3 .
4 22 PTR vulcan.olimpus.local.
5 .
6 .
7 .
8 6.8.7.d.f.d.e.f.f.f.9.2.c.0.2.0 IN PTR vulcan

Finalmente, actualizamos el nmero de serie de los 3 ficheros.

1 2014090102; Serial

La actualizacin de los ficheros de zona tendr lugar en uno u otro momento de acuerdo con los
parmetros definidos en las propias zonas, la recarga del servicio, etc Pero tambin podemos forzar
una transferencia de zona con el comando rndc (ver seccin 4.6.1 acerca de cmo instalar rndc). Lo
ejecutamos desde el servidor esclavo.

1 rndc retransfer olimpus.local

Despus de unos segundos el maestro y el esclavo tendrn la misma informacin. Podemos


comprobarlo consultando a ambos servidores con el comando dig. Desde el servidor esclavo
podemos consultar a ambos servidores. Primero consultamos al servidor esclavo.

1 [root@localhost ~]# dig @192.168.1.21 prometheus.olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.21 prometheus.olimpus.\
4 local
5 ; (1 server found)
6 ;; global options: +cmd
7 ;; Got answer:
8 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 18441
9 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
10
11 ;; QUESTION SECTION:
12 ;prometheus.olimpus.local. IN A
13
14 ;; ANSWER SECTION:
15 prometheus.olimpus.local. 172800 IN A 192.168.1.21
16
17 ;; AUTHORITY SECTION:
4.- DNS 110

18 olimpus.local. 172800 IN NS prometheus.olimpus.local.


19 olimpus.local. 172800 IN NS delphos.olimpus.local.
20
21 ;; ADDITIONAL SECTION:
22 delphos.olimpus.local. 172800 IN A 192.168.1.20
23 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
24 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
25
26 ;; Query time: 1 msec
27 ;; SERVER: 192.168.1.21#53(192.168.1.21)
28 ;; WHEN: Sun Aug 3 04:40:00 2014
29 ;; MSG SIZE rcvd: 166

Y a continuacin consultamos al servidor maestro para ver si las 2 respuestas son iguales. Debemos
tener en cuenta que el firewall podra estar bloqueando la consulta. Para permitir las transferencias
de zona habamos abierto el puerto TCP 53, sin embargo las consultas DNS no utilizan el puerto TCP
53, sino el puerto UDP 53. Si este es el caso, tendremos que abrir el puerto UDP 53 en el firewall.
En Centos 6:

1 [root@localhost ~]# iptables -I INPUT 4 -p udp --dport 53 -j ACCEPT

En CentOS 7:
El mismo comando que utilizamos anteriormente para permitir las transferencias permitir tambin
las consultas.

1 [root@localhost ~]# firewall-cmd --zone=internal --add-service=dns


2 success

Ahora podemos lanzar la consulta

1 [root@localhost ~]# dig @192.168.1.20 prometheus.olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 prometheus.olimpus.\
4 local
5 ; (1 server found)
6 ;; global options: +cmd
7 ;; Got answer:
8 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57417
9 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
10
4.- DNS 111

11 ;; QUESTION SECTION:
12 ;prometheus.olimpus.local. IN A
13
14 ;; ANSWER SECTION:
15 prometheus.olimpus.local. 172800 IN A 192.168.1.21
16
17 ;; AUTHORITY SECTION:
18 olimpus.local. 172800 IN NS prometheus.olimpus.local.
19 olimpus.local. 172800 IN NS delphos.olimpus.local.
20
21 ;; ADDITIONAL SECTION:
22 delphos.olimpus.local. 172800 IN A 192.168.1.20
23 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
24 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
25
26 ;; Query time: 2 msec
27 ;; SERVER: 192.168.1.20#53(192.168.1.20)
28 ;; WHEN: Sun Aug 3 05:42:05 2014
29 ;; MSG SIZE rcvd: 166

Como vemos, el resultado es el mismo en ambos casos.

4.6.- DNSSEC
El servicio de nombres tiene una importancia vital en cualquier infraestructura de red, pero
lamentablemente es bastante vulnerable a los ataques. Si un hacker consigue inyectar falsas
respuestas DNS en la red ser capaz de controlar el trfico. Por ejemplo, digamos que un usuario
quiere consultar su correo y para ello accede a http://gmail.com, si el atacante enva su propia
respuesta DNS para el dominio http://gmail.com el ordenador del usuario intentar acceder al
servidor gmail.com equivocado.
Para minimizar este riesgo se desarroll DNSSEC. DNSSEC en realidad no evita estos ataques, pero
hace posible su deteccin. Funciona firmando los ficheros de zona de forma que podamos detectar
si ha habido un cambio no autorizado. Para usar DNSSEC primero debemos generar 2 conjuntos de
claves para nuestra zona: la Zone Signing Keys (ZSK) y la Key Signing Keys. Primero creamos la
ZSK.

1 [root@localhost named]# dnssec-keygen -a RSASHA1 -b 512 -n ZONE olimpus.local


2 Generating key pair.....++++++++++++ ....++++++++++++
3 Kolimpus.local.+005+08586
4.- DNS 112

El proceso de generar las claves puede demorarse bastante, llegando a durar varias horas. Si queremos
acelerar el proceso podemos instalar haveged, que acta como generador de nmeros pseudo-
aleatorios. El paquete haveged actualmente no se incluye como parte de la instalacin estndar de
CentOS 6, pero se puede instalar desde Internet. Por otra parte, si estamos trabajando con CentOS 7
podemos descargarlo desde el repositorio EPEL. Este repositorio no est incluido en los repositorios
por defecto de CentOS 7, pero se puede configurar de forma muy sencilla ejecutando el siguiente
comando:

1 [root@CentOS7 ~]# yum install epel-release

Y ahora generamos el KSK. Como ya dijimos antes, este proceso puede ser muy lento.

1 [root@localhost named]# dnssec-keygen -f KSK -a RSASHA1 -b 4096 -n ZONE olimpus.\


2 local
3 Generating key pair.............++..............................................\
4 ..........................................++
5 Kolimpus.local.+005+35116

Ahora tendremos que aadir los ficheros de clave que acabamos de crear al fichero de zona.

1 [root@localhost named]# cat Kolimpus.local.*.key >> olimpus.local.zone

Y firmamos el fichero de zona.

1 [root@localhost named]# dnssec-signzone -N increment -o olimpus.local olimpus.lo\


2 cal.zone
3 Verifying the zone using the following algorithms: RSASHA1.
4 Zone signing complete:
5 Algorithm: RSASHA1: KSKs: 1 active, 0 stand-by, 0 revoked
6 ZSKs: 1 active, 0 stand-by, 0 revoked
7 olimpus.local.zone.signed

A partir de ahora tenemos un nuevo fichero olimpus.local.zone.signed. Tendremos que cambiar la


definicin de la zona olimpus.local en /etc/named.conf para apuntar a este nuevo fichero.

http://www.issihosts.com/haveged
4.- DNS 113

1 .
2 .
3 .
4 zone "olimpus.local" IN {
5 type master;
6 file "olimpus.local.zone.signed";
7 notify yes;
8 };
9 .
10 .
11 .

Y reiniciamos el servicio named.


En CentOS 6:

1 [root@localhost named]# service named restart


2 Stopping named: [ OK ]
3 Starting named: [ OK ]

En CentOS 7:

1 [root@CentOS7 named]# systemctl restart named

Para asegurarnos de que DNSSEC est funcionando realmente, podemos consultar el registro
DNSKEY de un determinado dominio del siguiente modo:

1 [root@localhost ~]# dig @192.168.1.20 DNSKEY olimpus.local. +multiline


2 ;; Truncated, retrying in TCP mode.
3
4 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 DNSKEY olimpus.loca\
5 l. +multiline
6 ; (1 server found)
7 ;; global options: +cmd
8 ;; Got answer:
9 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 48176
10 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 0
11
12 ;; QUESTION SECTION:
13 ;olimpus.local. IN DNSKEY
14
15 ;; ANSWER SECTION:
4.- DNS 114

16 olimpus.local. 172800 IN DNSKEY 257 3 5 (


17 AwEAAeGilVrj9hxnmjRY9Yd9SqrBMwtiqKwfSda3wXhn
18 d3koFZQzVI129xRVxEhaXpQvcH4tZG724hE/NF/zq6jI
19 H2q6OtU0poslWLnRTE4Cte0EMP/Q4dSpSzLqjT4+cPrw
20 Fyfgvv7q+dHBHJ0TiWJjeSffFDFcACPfqY3KIFHNxgD3
21 bBwdO/GXgLDACBVoH7qVCNRBosuji24lmxwYu9qO0qX5
22 sTF1mhmKpOm4u02CEVhSnTeXlER4XermehqLhOLlodWl
23 R75EmAYc13SvMS9CoFc66eXEOpSLOl7F9eZQ/RHh/Wob
24 x74moN1uSwP32fTYhJZr3GXOTey+kfnpvhBIxXRa6nbB
25 2jfLsN0PMb4ZEYTAXOICtevRDYptuM3ytakPd3elNfrm
26 px9vxkFMye1/18diS/VWXD7RBc8wpbK0aQBMYV94dKhB
27 a3F6SV9tbXF7nTadG7k0I+US0kUSfppCjWr+TTwdfvGR
28 e/M7XPM1riBv/zUgSp7XzOKWdYT2mQjPR4xl21FcsSwy
29 tehCWoS+xGEd3y9AaW7RHAwPjeexMR30458/h1cqQcEs
30 QCQltl3uboqjFon3s4iHcHIqtpnBUC/TaonMA39pBTXt
31 VFPO+EV3YJBKFgGf1qZRW9aFAU+BHAnaRt2svPmBId7n
32 4O778a14Jgaco4b64Y6Ij3Mx8as5
33 ) ; key id = 9187
34 olimpus.local. 172800 IN DNSKEY 256 3 5 (
35 AwEAAb386KgB7QrWAWBZ9+uSaHjHmpW+3TpcGkCfh9T4
36 Znl6BJVb/kPp6DmfeTRzjFUQSbAGRiI3yvzJ9+iEUhra
37 dME=
38 ) ; key id = 28332
39
40 ;; Query time: 2 msec
41 ;; SERVER: 192.168.1.20#53(192.168.1.20)
42 ;; WHEN: Sun Aug 3 20:11:10 2014
43 ;; MSG SIZE rcvd: 647

Como podemos ver, la consulta fue respondida correctamente.

4.7.- Herramientas de diagnstico

4.7.1.- rndc
Rndc es una gran herramienta para gestionar el servidor de nombres. Si recordamos, cuando com-
probamos el estado del servicio named vimos un mensaje que deca: rndc: neither /etc/rndc.conf
nor /etc/rndc.key was found. Estos dos ficheros son necesarios para que el comando rndc funcione.
Rndc es un front-end para controlar el servidor DNS, por lo que habr que modificar el fichero
/etc/named.conf para permitirle a rndc gestionar el servidor. Podemos hacerlo a mano, pero es
mucho ms fcil hacerlo tecleando el comando rndc-confgen. ste nos generar una salida con
un fichero rndc-key y las lneas correspondientes que habr que aadir al fichero rndc.conf.
4.- DNS 115

Rndc-confgen necesitar generar claves, lo que puede llevarle unos minutos. Deberemos tener un
poco de paciencia.

1 [root@localhost ~]# rndc-confgen


2 # Start of rndc.conf
3 key "rndc-key" {
4 algorithm hmac-md5;
5 secret "Yg1R5vvMWBu/+P9RxCKm8g==";
6 };
7
8 options {
9 default-key "rndc-key";
10 default-server 127.0.0.1;
11 default-port 953;
12 };
13 # End of rndc.conf
14
15 # Use with the following in named.conf, adjusting the allow list as needed:
16 # key "rndc-key" {
17 # algorithm hmac-md5;
18 # secret "Yg1R5vvMWBu/+P9RxCKm8g==";
19 # };
20 #
21 # controls {
22 # inet 127.0.0.1 port 953
23 # allow { 127.0.0.1; } keys { "rndc-key"; };
24 # };
25 # End of named.conf

As que creamos un fichero /etc/rnc.conf :

1 # Start of rndc.conf
2 key "rndc-key" {
3 algorithm hmac-md5;
4 secret "Yg1R5vvMWBu/+P9RxCKm8g==";
5 };
6
7 options {
8 default-key "rndc-key";
9 default-server 127.0.0.1;
10 default-port 953;
11 };
12 # End of rndc.conf
4.- DNS 116

Y modificamos /etc/named.conf aadiendo las lneas generadas por rndc-confgen.


Reiniciamos el servicio e intentamos ejecutar rndc.

1 [root@localhost named]# rndc status


2 version: 9.7.3-P3-RedHat-9.7.3-8.P3.el6
3 CPUs found: 1
4 worker threads: 1
5 number of zones: 22
6 debug level: 0
7 xfers running: 0
8 xfers deferred: 0
9 soa queries in progress: 0
10 query logging is OFF
11 recursive clients: 0/0/1000
12 tcp clients: 0/100
13 server is up and running

Para ver las opciones disponibles podemos usar la opcin -h.

1 [root@localhost named]# rndc -h


2 Usage: rndc [-b address] [-c config] [-s server] [-p port]
3 [-k key-file ] [-y key] [-V] command
4
5 command is one of the following:
6
7 reload Reload configuration file and zones.
8 reload zone [class [view]]
9 Reload a single zone.
10 refresh zone [class [view]]
11 Schedule immediate maintenance for a zone.
12 retransfer zone [class [view]]
13 Retransfer a single zone without checking serial number.
14 freeze Suspend updates to all dynamic zones.
15 freeze zone [class [view]]
16 Suspend updates to a dynamic zone.
17 thaw Enable updates to all dynamic zones and reload them.
18 thaw zone [class [view]]
19 Enable updates to a frozen dynamic zone and reload it.
20 notify zone [class [view]]
21 Resend NOTIFY messages for the zone.
22 reconfig Reload configuration file and new zones only.
23 sign zone [class [view]]
4.- DNS 117

24 Update zone keys, and sign as needed.


25 loadkeys zone [class [view]]
26 Update keys without signing immediately.
27 stats Write server statistics to the statistics file.
28 querylog Toggle query logging.
29 dumpdb [-all|-cache|-zones] [view ...]
30 Dump cache(s) to the dump file (named_dump.db).
31 secroots [view ...]
32 Write security roots to the secroots file.
33 stop Save pending updates to master files and stop the server.
34 stop -p Save pending updates to master files and stop the server
35 reporting process id.
36 halt Stop the server without saving pending updates.
37 halt -p Stop the server without saving pending updates reporting
38 process id.
39 trace Increment debugging level by one.
40 trace level Change the debugging level.
41 notrace Set debugging level to 0.
42 flush Flushes all of the server's caches.
43 flush [view] Flushes the server's cache for a view.
44 flushname name [view]
45 Flush the given name from the server's cache(s)
46 status Display status of the server.
47 recursing Dump the queries that are currently recursing (named.recursing)
48 validation newstate [view]
49 Enable / disable DNSSEC validation.
50 *restart Restart the server.
51 addzone ["file"] zone [class [view]] { zone-options }
52 Add zone to given view. Requires new-zone-file option.
53 delzone ["file"] zone [class [view]]
54 Removes zone from given view. Requires new-zone-file option.
55
56 * == not yet implemented
57 Version: 9.7.3-P3-RedHat-9.7.3-8.P3.el6

4.7.2.- dig
Ya hemos visto esta herramienta anteriormente, podemos utilizarla para consultar a un servidor DNS
y especificar el tipo de registro que nos interesa. Por ejemplo, para conocer el servidor de correo del
dominio olimpus.local teclearamos esto:
4.- DNS 118

1 [root@localhost ~]# dig mx @192.168.1.21 olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> mx @192.168.1.21 olimpus.local
4 ; (1 server found)
5 ;; global options: +cmd
6 ;; Got answer:
7 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 3247
8 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 4
9
10 ;; QUESTION SECTION:
11 ;olimpus.local. IN MX
12
13 ;; ANSWER SECTION:
14 olimpus.local. 172800 IN MX 10 prometheus.olimpus.local.
15
16 ;; AUTHORITY SECTION:
17 olimpus.local. 172800 IN NS prometheus.olimpus.local.
18 olimpus.local. 172800 IN NS delphos.olimpus.local.
19
20 ;; ADDITIONAL SECTION:
21 prometheus.olimpus.local. 172800 IN A 192.168.1.21
22 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
23 delphos.olimpus.local. 172800 IN A 192.168.1.20
24 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
25
26 ;; Query time: 12 msec
27 ;; SERVER: 192.168.1.21#53(192.168.1.21)
28 ;; WHEN: Sun Aug 3 04:37:03 2014
29 ;; MSG SIZE rcvd: 182

Si no queremos ver toda esta informacin y nicamente queremos conocer la respuesta final
podemos decirle a dig que no muestre todos los detalles de la consulta (+noall) e incluya solo la
respuesta como tal (+answer).

1 [root@localhost ~]# dig +noall +answer mx @192.168.1.21 olimpus.local


2 olimpus.local. 172800 IN MX 10 prometheus.olimpus.local.

Tambin podemos solicitar una transferencia de zona completa.


4.- DNS 119

1 [root@localhost ~]# dig axfr @192.168.1.20 olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> axfr @192.168.1.20 olimpus.local
4 ; (1 server found)
5 ;; global options: +cmd
6 olimpus.local. 172800 IN SOA olimpus.local. root.olimpus.loca\
7 l. 2014090103 60 7200 604800 172800
8 olimpus.local. 172800 IN NS delphos.olimpus.local.
9 olimpus.local. 172800 IN NS prometheus.olimpus.local.
10 olimpus.local. 172800 IN MX 10 prometheus.olimpus.local.
11 aphrodite.olimpus.local. 172800 IN A 192.168.1.22
12 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
13 delphos.olimpus.local. 172800 IN A 192.168.1.20
14 dns.olimpus.local. 172800 IN CNAME delphos.olimpus.local.
15 mail.olimpus.local. 172800 IN CNAME prometheus.olimpus.local.
16 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
17 prometheus.olimpus.local. 172800 IN A 192.168.1.21
18 vulcan.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fedf:d786
19 vulcan.olimpus.local. 172800 IN A 192.168.1.23
20 olimpus.local. 172800 IN SOA olimpus.local. root.olimpus.loca\
21 l. 2014090103 60 7200 604800 172800
22 ;; Query time: 6 msec
23 ;; SERVER: 192.168.1.20#53(192.168.1.20)
24 ;; WHEN: Sun Aug 3 05:46:46 2014
25 ;; XFR size: 14 records (messages 1, bytes 373)

4.7.3.- host
Host es una herramienta bastante similar a dig, aunque su sintaxis es algo diferente.

1 [root@localhost ~]# host prometheus.olimpus.local 192.168.1.20


2 Using domain server:
3 Name: 192.168.1.20
4 Address: 192.168.1.20#53
5 Aliases:
6
7 prometheus.olimpus.local has address 192.168.1.21
8 prometheus.olimpus.local has IPv6 address fe80::20c:29ff:feeb:4443

4.8.- Resolucin de problemas


Como sabe bien todo administrador de sistemas, a veces surgen incidencias y las cosas no funcionan
como se espera, o directamente dejan de funcionar. Estos son algunos de los escenarios ms comunes
4.- DNS 120

que podemos ver.

4.8.1.- Una mquina no puede resolver nombres


Si solo un pequeo porcentaja de mquinas es incapaz de resolver nombres, esto probablemente ser
un problema con el software cliente. Tendremos que comprobar que el dispositivo tiene configurada
correctamente la direccin IP del servidor DNS de la red. En el caso de un ordenador con Linux,
esto se hace en el fichero /etc/resolv.conf. Por ejemplo, si el servidor DNS es 192.168.1.20, el fichero
/etc/resolv.conf debera mostrar algo parecido a esto:

1 [root@localhost ~]# cat /etc/resolv.conf


2 nameserver 192.168.1.20

Si el fichero es correcto habr que comprobar tambin la configuracin de red y la conexin fsica a
la red.

4.8.2.- Varias mquinas no pueden resolver nombres


Si son muchas las mquinas que no pueden resolver nombres, podra haber un problema con el
propio servidor DNS. Lo primero que habr que hacer es comprobar que el servicio est corriendo.

1 [root@localhost ~]# service named status


2 version: 9.7.3-P3-RedHat-9.7.3-8.P3.el6
3 CPUs found: 1
4 worker threads: 1
5 number of zones: 22
6 debug level: 0
7 xfers running: 0
8 xfers deferred: 0
9 soa queries in progress: 0
10 query logging is OFF
11 recursive clients: 0/0/1000
12 tcp clients: 0/100
13 server is up and running
14 named (pid 8616) is running...

Si el servicio est funcionando correctamente, el siguiente paso ser asegurarnos de que el servicio
es accesible desde la red. Como dijimos antes, las consultas DNS se dirigen al puerto UDP 53 del
servidor. De modo que podemos utilizar nmap desde un cliente para comprobar si el puerto est
abierto o no.
4.- DNS 121

1 [root@localhost ~]# nmap -sU -p 53 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-03 05:40 CEST
4 Nmap scan report for delphos.olimpus.local (192.168.1.20)
5 Host is up (0.00085s latency).
6 PORT STATE SERVICE
7 53/udp filtered domain
8 MAC Address: 00:0C:29:78:4C:B1 (VMware)

En este caso el puerto est filtrado. Esta es la razn por la que los clientes no pueden resolver los
nombres, no pueden contactar con el servidor de nombres.

1 [root@localhost ~]# nmap -sU -p 53 192.168.1.20


2
3 Starting Nmap 5.21 ( http://nmap.org ) at 2014-08-03 06:23 CEST
4 Nmap scan report for delphos.olimpus.local (192.168.1.20)
5 Host is up (0.00033s latency).
6 PORT STATE SERVICE
7 53/udp open domain
8 MAC Address: 00:0C:29:78:4C:B1 (VMware)
9
10 Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds

Ahora el puerto est abierto. Deberamos realizar una consulta desde el cliente con dig o host.

1 [root@localhost ~]# dig @192.168.1.20 delphos.olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 delphos.olimpus.loc\
4 al
5 ; (1 server found)
6 ;; global options: +cmd
7 ;; Got answer:
8 ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 51991
9 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 3
10
11 ;; QUESTION SECTION:
12 ;delphos.olimpus.local. IN A
13
14 ;; ANSWER SECTION:
15 delphos.olimpus.local. 172800 IN A 192.168.1.20
16
17 ;; AUTHORITY SECTION:
4.- DNS 122

18 olimpus.local. 172800 IN NS delphos.olimpus.local.


19 olimpus.local. 172800 IN NS prometheus.olimpus.local.
20
21 ;; ADDITIONAL SECTION:
22 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
23 prometheus.olimpus.local. 172800 IN A 192.168.1.21
24 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
25
26 ;; Query time: 2 msec
27 ;; SERVER: 192.168.1.20#53(192.168.1.20)
28 ;; WHEN: Sun Aug 3 06:26:04 2014
29 ;; MSG SIZE rcvd: 166

En este caso el servidor DNS parece estar bien. El cliente hizo una consulta y recibi la correspon-
diente respuesta.

1 [root@localhost ~]# dig @192.168.1.20 neptune.olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> @192.168.1.20 neptune.olimpus.loc\
4 al
5 ; (1 server found)
6 ;; global options: +cmd
7 ;; Got answer:
8 ;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 60601
9 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
10
11 ;; QUESTION SECTION:
12 ;neptune.olimpus.local. IN A
13
14 ;; AUTHORITY SECTION:
15 olimpus.local. 172800 IN SOA olimpus.local. root.olimpus.loca\
16 l. 2014090103 60 7200 604800 172800
17
18 ;; Query time: 2 msec
19 ;; SERVER: 192.168.1.20#53(192.168.1.20)
20 ;; WHEN: Sun Aug 3 06:26:21 2014
21 ;; MSG SIZE rcvd: 80

Por el contrario, en este otro caso el servidor respondi a la consulta, pero no pudo localizar el
registro neptune.olimpus.local. Este registro podra no existir, o tal vez el servidor tenga un archivo
de zona desfasado.
4.- DNS 123

4.8.3.- El servidor maestro y el esclavo no tienen la misma


informacin
Si el servidor esclavo tiene informacin desactualizada necesitamos averiguar si existe un problema
con las transferencias de zona. Como hemos visto, podemos usar dig para pedir una transferencia
de zona desde el servidor esclavo.

1 [root@localhost ~]# dig axfr @192.168.1.20 olimpus.local


2 ;; Connection to 192.168.1.20#53(192.168.1.20) for olimpus.local failed: host un\
3 reachable.

En este caso no conseguimos hacer la transferencia de zona, probablemente el puerto TCP 53 del
servidor maestro est cerrado o filtrado.

1 [root@localhost ~]# dig axfr @192.168.1.20 olimpus.local


2
3 ; <<>> DiG 9.7.3-P3-RedHat-9.7.3-8.P3.el6 <<>> axfr @192.168.1.20 olimpus.local
4 ; (1 server found)
5 ;; global options: +cmd
6 olimpus.local. 172800 IN SOA olimpus.local. root.olimpus.loca\
7 l. 2014090103 60 7200 604800 172800
8 olimpus.local. 172800 IN NS delphos.olimpus.local.
9 olimpus.local. 172800 IN NS prometheus.olimpus.local.
10 olimpus.local. 172800 IN MX 10 prometheus.olimpus.local.
11 aphrodite.olimpus.local. 172800 IN A 192.168.1.22
12 delphos.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fe78:4cb1
13 delphos.olimpus.local. 172800 IN A 192.168.1.20
14 dns.olimpus.local. 172800 IN CNAME delphos.olimpus.local.
15 mail.olimpus.local. 172800 IN CNAME prometheus.olimpus.local.
16 prometheus.olimpus.local. 172800 IN AAAA fe80::20c:29ff:feeb:4443
17 prometheus.olimpus.local. 172800 IN A 192.168.1.21
18 vulcan.olimpus.local. 172800 IN AAAA fe80::20c:29ff:fedf:d786
19 vulcan.olimpus.local. 172800 IN A 192.168.1.23
20 olimpus.local. 172800 IN SOA olimpus.local. root.olimpus.loca\
21 l. 2014090103 60 7200 604800 172800
22 ;; Query time: 6 msec
23 ;; SERVER: 192.168.1.20#53(192.168.1.20)
24 ;; WHEN: Sun Aug 3 05:46:46 2014
25 ;; XFR size: 14 records (messages 1, bytes 373)

Ahora la transferencia de zona se hizo correctamente. A continuacin podemos usar rndc desde el
servidor esclavo para forzar la actualizacin del fichero de zona.
4.- DNS 124

1 [root@localhost ~]# rndc retransfer olimpus.local


2 [root@localhost ~]#

4.9.- Ficheros de log


Posiblemente la herramienta ms importante a la hora de solucionar problemas sean los ficheros de
log. En una instalacin por defecto de bind, el fichero de log ser /var/named/data/named.run. Esto
se define en el fichero /etc/named.conf en las siguientes lneas:

1 logging {
2 channel default_debug {
3 file "data/named.run";
4 severity dynamic;
5 };
6 };

Viendo este fichero podemos monitorizar el estado del servidor. Por ejemplo, esta podra ser una
parte del fichero de log.

1 .
2 .
3 .
4 received control channel command 'stop'
5 shutting down: flushing changes
6 stopping command channel on 127.0.0.1#953
7 no longer listening on ::#53
8 no longer listening on 127.0.0.1#53
9 no longer listening on 192.168.1.20#53
10 exiting
11 zone 0.in-addr.arpa/IN: loaded serial 0
12 zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
13 zone 1.168.192.in-addr.arpa/IN: loaded serial 2014090102
14 zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa/IN\
15 : loaded serial 0
16 zone 0.0.0.0.0.0.0.0.0.0.0.0.0.8.e.f.ip6.arpa/IN: loaded serial 2014090102
17 zone olimpus.local/IN: loaded serial 2014090103
18 zone localhost.localdomain/IN: loaded serial 0
19 zone localhost/IN: loaded serial 0
20 .
21 .
22 .
4.- DNS 125

En este caso podemos ver que el servidor de nombres se detuvo y arranc de nuevo para cargar de
nuevo los ficheros de zona.

Вам также может понравиться