viernes, diciembre 28, 2007

DNS dinámico en linux


Mucha gente se anima a publicar contenidos en la web. La mayoría recurren a los blogs, pero otros se deciden a hacer su propia página personal, bien estática o utilizando php. La mejor opción es publicarla en algún servidor, ya sea gratuito o de pago, pero si a alguien le pica el gusanillo de hacerlo en su propio ordenador se encuentra con que al acceder a ella desde cualquier otro lugar no sabe a qué dirección debe hacerlo, ya que la mayoría de los que tienen ADSL tienen la ip dinámica y cambia cada vez que nos conectamos.

Una solución a esto, y en general a cualquier posibilidad de conectarnos a nuestro equipo a través de internet, es utilizar los servicios de un servidor de DNS dinámico y configurar nuestro equipo adecuadamente. Esto permite conectarnos a nuestro equipo utilizando un nombre de dominio. Uno de estos servicios es DynDNS, que ofrece tanto servicios gratuitos como de pago.
Primero nos creamos una cuenta mediante el enlace "Create account". Sólo se nos solicita un nombre de usuario, dirección de correo electrónico, contraseña, aceptar las condiciones del servicio y algunos datos de encuesta. A nuestra dirección de correo llegará un mensaje con un enlace para activar nuestra cuenta.

Hecho esto nos autenticamos y accedemos al grupo "My Services". En el apartado "Hostnames", hacemos clic en "Add new hostname". Aquí especificaremos un nombre de equipo en la casilla "Hostname" y uno de los dominios disponibles que nos ofrece DynDNS. Seleccionaremos la opción "Host with IP address" y si el equipo que queremos hacer visible desde el exterior es el mismo desde el que estamos haciendo esto, podemos hacer clic en el enlace "Use autodetected IP address x.x.x.x". Esto hará que la dirección IP que actualmente tenemos asignada se relacione con el nombre de host y el dominio que hemos elegido, con lo que ya podríamos acceder a nuestro equipo desde otro lugar.

Si utilizáis router, habría que modificar las tablas NAT para redirigir el tráfico que llegue al puerto 80 a la dirección IP de la máquina que tiene arrancado el servidor web y por tanto las páginas web.
Hasta ahora todo es muy sencillo, ¿pero qué ocurre si apagamos el router o módem y nos volvemos a conectar mañana. Que la dirección IP ha cambiado y habría que volver a entrar en la web de DynDNS y actualizar la IP. Esto no es práctico por supuesto y para evitarlo existen programas que se encargan de hacer esto de manera automática. Uno de ellos es ddclient, un script hecho en perl que realiza esta función. Está disponible en los repositorios de Ubuntu, por lo que la forma más sencilla de instalarlo es:
sudo apt-get install ddclient

Después de instalarse el paquete se ejecutará un asistente que nos preguntará los parámetros necesarios para configurarlo.

Aquí vamos a ver como instalarlo bajando la versión de sourceforge y configurándolo a mano, lo que será válido para cualquier GNU/Linux.

Comenzamos instalando subversion, una herramienta de control de versiones que nos permitirá acceder a la última versión de ddclient:

sudo apt-get install subversion

A continuación nos descargamos la última versión de ddclient:
svn co https://ddclient.svn.sourceforge.net/svnroot/ddclient/trunk/svn ddclient

Esto nos creará una carpeta ddclient, en la que estará el ejecutable "ddclient", ejemplos de ficheros de configuración y de configuración del arranque automático y el fichero README, que es recomendable leer aunque resumo lo que hay que hacer.

Copiar el ejecutable:
cd ddclient
sudo cp ddclient /usr/sbin/

Crear la carpeta de configuración y copiar un fichero de configuración de ejemplo:
sudo mkdir /etc/ddclient
sudo cp sample-etc_ddclient.conf /etc/ddclient/ddclient.conf

Editar el fichero ddclient.conf con vuestro editor favorito:
gedit /etc/ddclient/ddclient.conf

Lo siguiente es un ejemplo de lo que podría ser este fichero, los comentarios van precedidos de almoadilla:
daemon=300 #Se comprobará si ha cambiado la ip
#cada 300 segundos
syslog=yes #Se grabarán los cambios de ip en el log del sistema
mail=root #Enviar todos los mensajes al usuario root
mail-failure=root #Enviar todos los mensajes de error al usuario root
pid=/var/run/ddclient.pid #Guardar el identificador de proceso en
#el fichero /var/run/ddclient.pid
ssl=yes #Utilizar ssl para transferir la información.
#Es necesario instalar ssl-library
use=web, web=checkip.dyndns.org #Para utilizar el servicio de detección
#de ip de dyndns
server=members.dyndns.org,
protocol=dyndns2 #Servidor y protocolo a utilizar.
#ddclient soporta otros proveedores. Estos son los datos de
#dyndns
login=xxxxxx #Nombre de usuario de nuestra cuenta dyndns
pasword=ppppppp #Contraseña de nuestra cuenta dyndns
nombre_host.dominio #Nombre de host y dominio seleccionado,
#por ejemplo myservidor.dyndns.net
Para arrancar el servicio podemos ejecutar:
ddclient start

Podemos ver si todo ha ido bien consultando el log del sistema:
tail /var/log/syslog

Así podremos detectar posibles errores que se hayan producido. En algunos sistemas es frecuente el error:
ddclient[4677]: FATAL: Error loading de Perl module IO::Socket::SSL needed for SSL connect.

Esto se soluciona instalando esta librería:
sudo apt-get install libio-socket-ssl-perl

Ddclient graba los cambios de ip en /var/cache/ddclient/ddclient.cache, por lo que podréis ver la ip actual consultando ese fichero.

Si hacéis cualquier cambio en el fichero ddclient.conf podréis hacerlos efectivos con:
ddclient restart