lunes, 28 de noviembre de 2011

Configuración avanzada de un servidor DNS BIND

En una entrada anterior vimos cómo configurar a un servidor DNS BIND para contener un dominio, el loopback y una zona con los servidores raíz de Internet.

En esta ocasión veremos cómo activar el rndc y la actualización dinámica (DDNS).

Para esto utilizaré dos equipos Solaris 10, uno contendrá el servidor y otro lo utilizaremos como cliente.

Además del archivo con los servidores raíz (db.cache) y del loopback (db.127.0.0) voy a crear dos archivos más, uno para el dominio y otro para la resolución inversa de mi red local (192.168.100.0/24)

db.unixymas.com.mx

$TTL 3h
; Zona unixymas.com.mx
@       IN SOA draco.unixymas.com.mx. administrator.unixymas.com.mx. (
                01 ; serial
                3h ; refresh
                1h ; retry
                1w ; expire
                1h ) ; negative ttl
@       IN NS draco.unixymas.com.mx.
draco   IN A 192.168.100.10

db.192.168.100

$TTL 3h
; Zona 100.168.192.in-addr.arpa
@       IN SOA draco.unixymas.com.mx. administrator.unixymas.com.mx. (
                01 ; serial
                3h ; refresh
                1h ; retry
                1w ; expire
                1h ) ; negative ttl
@       IN NS draco.unixymas.com.mx.
10      IN PTR draco.unixymas.com.mx.

Observen que en realidad los dos archivos solo contienen los registros SOA y NS, esto es porque los vamos a actualizar en forma dinámica.

Para actualizar en forma dinámica una zona es necesario otorgarle la autoridad a la zona mediante la opción allow-update en el archivo de configuración /etc/named.conf . Se le puede otorgar la autoridad a una IP, a una lista; pero la forma más segura es por medio de una llave. Dicha llave es una cadena cifrada con el algoritmo HMAC-MD5.

Lo primero es crear la llave por medio del comando dnssec-keygen en la forma: dnssec-keygen –a HMAC-MD5 –b 128 –n HOST llave

# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST update-key
Kupdate-key.+157+04139

Con este comando generamos 2 archivos uno con terminación .key y otro con .private . En el caso de este algoritmo en realidad los dos archivos contienen información similar, vamos a revisar el .private

Kupdate-key.+157+04139.private

Private-key-format: v1.2
Algorithm: 157 (HMAC_MD5)
Key: onuHJl6U5lqKEk8/9mbMQw==
Bits: AAA=

La cadena señalada como key es la que vamos a utilizar.

El archivo de configuración queda de la siguiente forma:

options {
        directory "/var/named";
};

zone "." {
        type hint;
        file "db.cache";
};

zone "0.0.127.in.addr.arpa" {
        type master;
        file "db.127.0.0";
};

zone "unixymas.com.mx" {
        type master;
        file "db.unixymas.com.mx";
        allow-update { key "update-key"; };
};

zone "100.168.192.in-addr.arpa" {
        type master;
        file "db.192.168.100";
        allow-update { key "update-key"; };
};

key "update-key" {
        algorithm hmac-md5;
        secret "onuHJl6U5lqKEk8/9mbMQw==";
};

Ahora ya podemos iniciar el BIND, desde otro equipo, en el que ya configuramos al servidor draco.unixymas.com.mx como su servidor de dominio, vamos a agregar un nuevo nombre por medio del comando nsupdate en la formal: nsupdate –k archivo.key ó nsupdate –k archivo.private

Esto nos va a llevar al modo interactivo, desde el cual, podemos agregar o eliminar nombres con los siguientes comandos:

update add nombre ttl tipo dato

update delete nombre

En este ejemplo, vamos a agregar una dirección en el dominio unixymas.com.mx

# nsupdate -k Kupdate-key.+157+04139.private
> update add equuleus.unixymas.com.mx 10800 a 192.168.100.20
>

La línea en blanco al final, le indica que ejecute el cambio.

Para la resolución inversa la actualización es similar:

# nsupdate -k Kupdate-key.+157+04139.private
> update add 20.100.168.192.in-addr.arpa 10800 ptr equuleus.unixymas.com.mx
>

Ahora vamos a ver cómo se activa el rndc, necesitamos como requisito indispensable una llave, puede ser la misma para el DNS dinámico, pero en este ejemplo vamos a crear una nueva:

# dnssec-keygen -a HMAC-MD5 -b 128 -n HOST rndc-key
Krndc-key.+157+11727

Ahora vamos a activarlo en el archivo de configuración con la opción controls, el archivo queda finalmente así:

/etc/named.conf

options {
        directory "/var/named";
};

zone "." {
        type hint;
        file "db.cache";
};

zone "0.0.127.in.addr.arpa" {
        type master;
        file "db.127.0.0";
};

zone "unixymas.com.mx" {
        type master;
        file "db.unixymas.com.mx";
        allow-update { key "update-key"; };
};

zone "100.168.192.in-addr.arpa" {
        type master;
        file "db.192.168.100";
        allow-update { key "update-key"; };
};

key "update-key" {
        algorithm hmac-md5;
        secret "onuHJl6U5lqKEk8/9mbMQw==";
};

controls {
        inet * allow { any; } keys { "rndc-key"; };
};

key "rndc-key" {
        algorithm hmac-md5;
        secret "5V73kf47NK6HjvygCjCJ9w==";
};

En el cliente, es necesario crear el archivo /etc/rndc.conf

/etc/rndc.conf

options {
        default-server 192.168.100.10;
        default-key "rndc-key";
};

key "rndc-key" {
        algorithm hmac-md5;
        secret "5V73kf47NK6HjvygCjCJ9w==";
};

Por último observen que los archivos de zona ya fueron actualizados por el BIND:

db.unixymas.com.mx

$ORIGIN .
$TTL 10800      ; 3 hours
unixymas.com.mx         IN SOA  draco.unixymas.com.mx. administrator.unixymas.com.mx. (
                                2          ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
                        NS      draco.unixymas.com.mx.
$ORIGIN unixymas.com.mx.
draco                   A       192.168.100.10
equuleus                A       192.168.100.20

db.192.168.100

$ORIGIN .
$TTL 10800      ; 3 hours
100.168.192.in-addr.arpa IN SOA draco.unixymas.com.mx. administrator.unixymas.com.mx. (
                                2          ; serial
                                10800      ; refresh (3 hours)
                                3600       ; retry (1 hour)
                                604800     ; expire (1 week)
                                3600       ; minimum (1 hour)
                                )
                        NS      draco.unixymas.com.mx.
$ORIGIN 100.168.192.in-addr.arpa.
10                      PTR     draco.unixymas.com.mx.
20                      PTR     equuleus.unixymas.com.mx.

lunes, 7 de noviembre de 2011

Trabajando con aplicaciones gráficas en Unix (X Window System)

Actualmente los sistemas informáticos operan en entornos gráficos otorgando al usuario una sensación de poseer áreas de trabajo similares a lo que en un escritorio podrían ser cuadernos, carpetas y demás objetos. Esta es la razón por la que a las estaciones de trabajo se les denomina escritorios y a las áreas de trabajo que se encuentran en estos escritorios se les conoce como ventanas, debido a que, generalmente, son áreas de forma rectangular y a través de éstas es posible visualizar los contenidos de la información.

Por supuesto que Unix no podría ser la excepción, emplea un sistema que le otorga una apariencia gráfica y que está formado por varios componentes. A dicho sistema se le conoce como Sistema de Ventanas X (X Window System).


Vamos a ver cuáles son los principales componentes de X Window System

  • Servidor X (X Server): Este es el componente gráfico; posee una interfaz humana (teclado y mouse), y se encuentra en una terminal gráfica (X Terminal), en la consola de un equipo *nix ó cómo un emulador (Ej: Xming, OmniX, Reflection/X).
  • Gestor de ventanas (Window Manager): Nombre dado a un programa cuya función es permitir realizar operaciones sobre las ventanas tales como: redimensionar, mover, cerrar, minimizar, etc. Además de proporcionarles bordes, barras, títulos, botones, etc. (Ej: mwm, twm, dtwm, metacity, KWin).
  • Gestor de sesiones o pantalla (Display Manager): Es un programa que permite iniciar una sesión en modo gráfico desde el mismo equipo o desde otro remoto (Ej. xdm, dtlogin, gdm, kdm)
  • Entorno de escritorio (Desktop Environment): Es el conjunto de programas que proporcionan los componentes de un escritorio moderno, dichos componentes van desde los menús desplegables hasta utilerías como agenda, cliente de correo elctrónico, etc. (Ej: CDE, GNOME, KDE, XFCE)
La razón por la que se llama X Server al componente gráfico que permite el despliegue de ventanas es porque en realidad es un servidor que permite "abrir ventanas"

 

(Fuente de imagen: wikipedia)

En este ejemplo es un típico caso de una estación de trabajo desde la cual se están ejecutando 2 aplicaciones locales y 1 remota. La comunicación entre las aplicación y el X Server es por medio del protocolo tcp y normalmente utiliza el puerto 6000 (Es por esto que a las aplicaciones se les llama X Client ó Cliente X).

También es importante señalar que en el X Server es posible tener mas de una pantalla (dependiendo de las características del X Server), por lo que a cada pantalla se le debe etiquetar con una identificación numérica con el formato: X.X. La identificación por default es: 0.0

Con la intención de ilustrar mejor esto, vamos a iniciar un laboratorio para lo cual requerimos lo siguiente:

  • Un equipo Solaris 10 al que le desactivaremos el modo gráfico con el comando: svcadm disable cde-login
  • Un X Server que esté ejecutando en una ventana o en pantalla completa, sin ningún cliente ejecutando y con el control de acceso desactivado. En mi caso, voy a utilizar el Xming corriendo sobre Microsoft Windows en modo de una ventana, con la opción de "Start no client" y con la opción de "No access control"
  • Una sesión con el usuario root en el equipo Solaris 10 utilizando un cliente en modo texto: telnet o ssh (no utilizar la consola)

Al iniciar el X Server aparecerá una ventana con un fondo parecido al de la ilustración con un puntero de mouse con forma de "x" (de hecho, si observan con cuidado el fondo del X Server, notarán que en realidad es un patrón de pequeñas "x")

 Image

Desde la sesión en modo texto, vamos a definir la variable de ambiente DISPLAY de este modo: DISPLAY=192.168.100.1:0.0, donde 192.168.100.1 es la dirección IP del X Server, es decir, en mi caso la de mi equipo Windows; lo que va después de ":" es la identificación  de la pantalla, normalmente será 0.0 . Una vez definida la ambiente la "exportamos": export DISPLAY

Con esta variable de ambiente le estamos indicando a la aplicaciones la dirección del X Server, vamos a ejecutar unas aplicaciones básicas, desde la terminal de texto escribimos: /usr/openwin/bin/xterm -geometry 80x24+20+20 &

 Image [2]

Noten que la ventana solo es un rectángulo sin bordes y ningún tipo de decoración, para poder escribir en ella pasarle por encima el mouse y no hay modo de cambiarla de posición o de tamaño, los parámetros que le dimos al comando xterm fue para indicarle el tamaño y la posición que debe ocupar la ventana en el X Server, desde la ventana que acabamos de abrir ejecutamos:  /usr/openwin/bin/xclock -geometry 100x100+600+400 &

 Image [3]

Con lo anterior apareció otra ventana con un reloj y así podría continuar abriendo más ventanas, sin embargo, no es muy práctico el tener que calcular la geometría de éstas. Esta es la razón principal por la que existen los gestores de ventanas, vamos a ejecutar uno muy simple que nos permitirá observar la diferencia, desde el xterm ejecutaremos: /usr/openwin/bin/twm &

 Image [4]

Ahora aparecen las ventanas "decoradas" con una barra de título, con la cual, es posible mover las ventanas, redimensionar y minimizar; también dando clic en el fondo aparece un menú con el que podemos realizar otras operaciones. En este momento ya es posible abrir ventanas sin ser necesario calcular la geometría, ejecutamos desde el xterm: /usr/openwin/bin/xcalc &

 Image [5]

Noten que al momento de abrir la ventana, aparece una silueta en la posición del puntero del mouse, está en espera de que le indiquemos en qué parte de la pantalla deseamos que aparezca la ventana, por lo que movemos el mouse hasta la posición deseada y le damos clic.

Ya que nos queda claro en que sentido va la comunicación de X Client a X Server podemos resumir que para ejecutar aplicaciones gráficas es necesario contar con un X Server, una sesión en el equipo donde residen los X Client y un gestor de ventanas que nos permita operar con éstos. Entonces, ¿por qué no tener todo esto integrado?. Esa es precisamente la función del gestor de sesiones, el cual se encarga de "levantar" el X Server en la consola; permite el inicio de sesión en el equipo, y una vez iniciada la sesión, se encarga de ejecutar el gestor de ventanas. En Solaris, el gestor de sesiones que se utiliza normalmente es el dtlogin, también llamado cde-login, al cual conocemos por ser la pantalla color azul metálico que nos pide usuario y contraseña para iniciar sesión en la consola o desde algún equipo remoto.

A manera de ilustración de cómo funciona el gestor de sesiones, vamos a ejecutar otro más básico que el dtlogin. Vamos a cerrar lo realizado hasta el momento y ya que son aplicaciones en realidad muy simples, podemos simplemente cerrar el X Server y listo. Desde la terminal de texto ejecutamos: /usr/openwin/bin/xdm &

Observen que la consola del Solaris 10 se puso en modo gráfico con una pantalla que solicita usuario, sin embargo, es muy diferente a la pantalla azul que conocemos.

 Image [6]

Este gestor de sesiones nos permite iniciar una sesión desde la consola, pero también podemos iniciar una sesión desde un equipo remoto, nuevamente ejecutamos el X Server desde nuestra estación, en mi caso voy a ejecutar el Xming, también le voy a indicar que lo haga en modo de una ventana pero en esta ocasión le voy a indicar que abra una sesión remota con XDMCP (Open session via XDMCP), en "Connect to host" le doy la dirección IP del equipo Solaris 10 que en mi caso es la 192.168.100.101

Antes de iniciar sesión, permítanme aclarar cómo es esta comunicación, si bien sigue siendo cierto que las ventanas se inician de X Cliente a X Server, la sesión se inicia en sentido inverso, es decir, de equipo con X Server (ó estación) a equipo remoto. La sesión utiliza un protocolo distinto el XDMCP, el cual, se transporta por udp y utiliza el puerto 177.

Iniciamos sesión utilizando un usuario distinto a root (por default, Solaris no permite el inicio de sesiones con root desde estaciones remotas).

 Image [7]

Podemos ya cerrar el X Server y desde la terminal de texto le damos kill al xdm, para restaurar el cde-login, simplemente ejecutamos: svcadm enable cde-login

En resumen, el equipo remoto inicia el gestor de sesiones; la estación se conecta al equipo remoto por medio del protocolo XDMCP; se inicia la sesión, y los X Client se conectan al X Server que se encuentra en la estación.

En un entorno de trabajo real, los sistemas operativos modernos utilizan gestores más complejos adaptados a las "particularidades" de cada plataforma y por lo regular se encuentran limitados para iniciar sesión sólo en la consola del sistema, sin embargo, en casi todos es posible permitir sesiones remotas.

Con lo que respecta a la forma de abrir un X Client remoto en nuestra estación, el modo normal es permitiendo el acceso a clientes remotos en nuestra estación, iniciar sesión en el equipo remoto y definir en éste la variable de ambiente DISPLAY que corresponda (Nota: la forma de permitir el acceso a nuestra estación en el caso de que ésta sea un *nix, es por medio del comando xhost). El gestor de ventanas que utilizan los clientes remotos es el mismo que emplean las aplicaciones locales.

Por último y ya en particular con lo que respecta a Microsoft Windows, su sistema de ventanas es completamente diferente, es por esto que se utilizan emuladores, los cuales trabajan en dos modos: de una sola ventana o pantalla completa, la cual se utiliza para iniciar sesiones remotas, y el modo multiventana, con el cual, se utiliza el gestor de ventanas propio de Windows

 Image [8]

Ejemplo de xterm utilizando el gestor de ventanas de Windows

Con esto damos por concluido el tema, espero que haya sido de su agrado y nos vemos a la próxima.