22 diciembre 2012

DNS Dinámico en la Raspberry PI

En entradas anteriores hablamos de como instalar un servidor web de manera sencilla en nuestra Raspberry PI, luego explicamos como armar un complicadísimo puente wireless y realizar la redirección de puertos en nuestro router para acceder a una página web.

Sin embargo habrán notado que mi Raspberry PI es accesible desde la dirección raspi.teubi.co bajo este mismo dominio; En esta entrada les voy a explicar como pueden obtener un DNS dinámico utilizando servicios como los de no-ip.com y dyndns para poder actualizar dinámicamente la IP de su Raspberry PI o de cualquier server que tengan bajo una conexión con IP pública dinámica.



¿Qué es un DNS y para qué sirve?


El servicio DNS, explicado muy rápidamente, es el que nos permite poder acceder a los diferentes servidores de Internet especificando un "nombre" en vez de una dirección IP.

De esa manera ustedes pueden leer mi blog escribiendo la dirección "fuenteabierta.teubi.co" en vez de tener que escribir "74.125.134.121". Solo imaginen lo difícil que sería utilizar internet si tuvieramos que memorizar todas y cada una de las direcciones IP de las páginas que visitamos.

Para conseguir una dirección en Internet solo es necesario encontrar un nombre que esté "libre", es decir que nadie más lo este usando, tener una tarjeta de crédito y tener conocimientos básicos de como configurar el nombre de dominio.

Una vez hayan adquirido su nombre de dominio necesitaran un servicio de "hospedaje" que les permita colocar su página. teubi.co por ejemplo, funciona sobre tres proveedores de hospedaje diferentes:
Si abren una consola de comandos y hacen ping a cada uno de los subdominios verán como responden direcciones IP diferentes.

Como pueden observar, una vez teniendo un nombre de dominio pueden asignar diferentes subdominios a diferentes servidores con solo conocer la dirección IP correcta de cada uno de los proveedores de hospedaje. Mi idea era asociar un subdominio propio para la Raspberry que pudiera acceder fácilmente desde fuera de mi casa.

Para que la dirección fuera corta y fácil de recordar decidí utilizar el nombre "raspi.teubi.co".

¿Cómo funciona un DNS Dinámico?


Si bien nada nos limita a asociar cuantos subdominios querramos a las direcciones IP, el servicio tiene una desventaja. Los nombres de dominio están asociados a direcciones IP estáticas.

Obviamente un servidor de hospedaje serio trabaja con direcciones IP fijas, pero por ejemplo una conexión residencial como la de Turbonett trabaja con IPs publicas dinámicas que cambian cada vez que el módem se conecta a Internet.

Los proveedores de Internet usualmente venden el servicio de IPs públicas fijas pero muchas veces para aplicaciones sencillas de bajo costo, tal vez no valga la pena contratar este servicio.

En internet existen varios proveedores que ofrecen un servicio de DNS Dinámicos, el funcionamiento de estos servicios es muy simple, tu elijes un nombre de subdominio dentro de una lista de dominios que ellos poseen y luego ellos te proveen de un pequeño programa que se encarga de estar actualizando constantemente la IP pública de tu servidor.

Entre los proveedores más comunes puedes encontrar a no-ip.com, dyn.com (dyndns.org), etc. Para este ejemplo voy a utilizar no-ip.com.

Configurando la cuenta en no-ip.com


Primero tenemos que registrarnos en no-ip.com, una vez ingresemos al servicio hacemos click en "Hosts/Redirects".



Luego seleccionamos "Add A Host".


Del formulario que nos aparece debemos de seleccionar el nombre de nuestro "subdominio" y elegir un "dominio" de entre los que aparecen en la lista. En este formulario es muy importante que en "Host Type" seleccionemos "DNS Host (A)". La direccion IP no es tan importante en este momento ya que luego será actualizada automáticamente por el programa cliente.


Una vez hayamos llenado toda la información hacemos clic en "Submit" y el nombre que elegimos deberá aparecer en la lista:


Configurando el Raspberry con Inadyn


Inadyn es un sencillo cliente que se encarga de actualizar la dirección IP de nuestro servidor en los servicios de DNS Dinámico. Este software puede funcionar con No-Ip, DynDNS, ZoneEdit, FreeDNS de Afraid.org y servicios similares.

Para instalarlo debemos ejecutar el siguiente comando:
$ sudo apt-get install inadyn

Inadyn funciona de dos maneras, la primera es llamarlo directamente desde la línea de comandos. Sin embargo esto es un poco engorroso y se hace un poco difícil de recordar todas las configuraciones que hay que incluir.

Por suerte podemos crear un archivo de configuración con las opciones de arranque de Inadyn. Para ello primero nos cambiamos al directorio /etc:
cd /etc

Luego creamos el archivo "inadyn.conf" con nuestro editor favorito. Las opciones de configuración dependen del servicio de DNS Dinámico que estén usando.

Les dejo un ejemplo de como se ve una configuración para el servicio No-IP:
username <correo_de_su_cuenta>
password <passwrd_de_su_cuenta>
alias midnsdinamico.zapto.org
update_period 300000
log_file /var/log/inadyn.log
dyndns_system default@no-ip.com

En update_period establecemos que tan seguido queremos que Inadyn actualice la IP esto realmente depende de su proveedor, que tan estable sea la conexión y que tan rápido quieran tener su servidor accesible luego de que su conexión cambie de IP. Por ejemplo si ustedes necesitan conectarse muy seguido podrían dejar 5 minutos.

Nota: update_period toma un valor en milisegundos, para 5 minutos por ejemplo sería 300000.

Una vez lista la configuración iniciamos el servicio dejándolo correr en modo "background", así podemos cerrar sesión y no necesitaremos arrancarlo de nuevo mientras no apaguemos la Raspberry.
$ sudo inadyn &

Bonus: usando nuestro propio dominio sin pagar extra


Durante toda esta entrada hemos utilizado los dominios que nos provee el servidor de DNS dinámico. Sin embargo si ustedes tienen su propio dominio como yo, posiblemente quieran usarlo.

Una forma es pagar la "membresía" anual por DNS dinámico para hacer uso de nuestro propio dominio. Sin embargo existe otra forma más fácil que no implica hacer gastos extra.

Namecheap (a quienes recomiendo por su muy buen servicio) tiene la posibilidad de manejar los registros DNS desde el propio panel de control del dominio.

Para usar nuestro DNS dinámico con nuestro nombre de dominio simplemente tenemos que acceder a la administración de hosts en las opciones del dominio.

En las configuraciones de "Sub-Dominio" agregamos un nuevo subdominio, para este ejemplo he elegido "mihost" (equivale a mihost.teubi.co). Aquí es muy importante que en "Record Type" seleccionemos CNAME, los CNAME son "alias", funcionan de manera muy sencilla, un alias simplemente "copia" la dirección IP de otro dominio DNS. OJo que no es una redirección de tipo HTTP. Esto funciona de manera diferente.

Ejemplo de CNAME: Si el dominio A es algunlugar.com y apunta hacia la dirección 45.23.14.51 y el dominio B es otrolugar.com y es un CNAME que apunta a algunlugar.com entonces a la hora de resolver la dirección IP el DNS intentará acceder a la IP 45.23.14.51. Es muy importante no confundir esto con una redirección http. En una redirección, el navegador haría la consulta a "algunlugar.com" y este redirigiria el navegador a "otrolugar.com" la consulta de un alias DNS obtiene la dirección IP del servidor de destino (en este ejemplo la IP de "algunlugar.com") ANTES de intentar conectarse al servidor web.


Nota muy imporante: Cuando agreguemos un CNAME a otro dominio externo SIEMPRE hay que poner un punto (".") al final del dominio destino. Por ejemplo si yo quiero tener google.teubi.co con CNAME a google.com. Mi subdominio deberá ser "google" a secas y el subdominio "google.com." (nótese el "." al final). Si no lo hacen así en vez de intentar buscar google.com, el dns intentara buscar google.com.teubi.co generando un error.

El último campo a considerar es el TTL o tiempo de vida del registro. En este caso especificamos el tiempo en 300 segundos que son aproximadamente 5 minutos. Para DNS dinámicos es importante tener TTLs bajos, para IPs estáticas lo normal es que tengan 24 o 48 horas.

Una tengamos todo lleno aplicamos los cambios y estamos listos.

Probando Todo


Una vez hecha esta configuración podrán acceder a su servidor desde el subdominio proporcionado por el proveedor de DNS o con el subdominio personalizado que configuramos en el paso anterior.

¿Quieren ver funcionando un server dinámico? Pueden al servidor Raspberry PI funcionando en mi casa donde podrán obtener galletitas de la suerte completamente grátis.


Nota: El circulo indica el estado del servidor Raspberry siendo rojo=offline, verde=online.

El código de la página de ejemplo puede ser descargado desde:

+Información

Si estan en El Salvador y quieren saber como mapear puertos de su módem de Internet de Turbonett, no hay mejor fuente de información que los foros de SvCommunity. Si tienen alguna duda de como hacer que su Raspberry PI sea visible o si ya intentaron esta configuración y siguen sin poder acceder desde fuera no duden en comunicarse conmigo a través de mi blog o en SvCommunity.