Raspberry Pi y Cloudflare

Ricardo Vega / 18 mayo 2016
⏰ 6 minutos
Muchos de los que tenemos una Raspberry Pi queremos tener acceso a ella incluso desde fuera de nuestra red. Algunos la utilizan para publicar su blog o página web personal, otros quieren acceder a un servidor torrent desde el que poder añadir descargas cuando no están en casa para que estén disponibles cuando lleguen, y para otros podría suponer una puerta de entrada a todo su sistema domótico casero, pudiendo controlar y monitorizar el estado de su vivienda cuando no están.
Si por alguno de estos u otros motivos quieres que tu Raspberry Pi sea accesible desde Internet, estoy seguro de que este post te va a resultar de gran utilidad.
Los pasos para conseguir acceder a la Raspberry Pi a distancia no son demasiado complicados. En la mayoría de las ocasiones simplemente tenemos que acceder al router o al portal que nuestro operador nos facilita para "toquetear" su configuración y redirigir los puertos que necesitemos a la IP interna de nuestra Raspberry. Para llevar a cabo esta tarea, existen numerosos tutoriales en Internet como este.
Sobre este asunto, yo te voy a explicar algo que seguramente no hayas leído anteriormente.
Cloudflare
La plataforma online Cloudflare hace un montón de cosas que pueden serte útiles en diferentes situaciones (y además,la mayoría de sus características son gratuitas). Hoy en este tutorial-post nos vamos a centrar en una de ellas: actuar como servidor DNS.
Como sabrás, Internet utiliza las denominadas IPs como direcciones de todo aquello conectado a él, pero cuando entramos, por ejemplo, en https://ricveal.com, no ponemos ninguna IP en la barra del navegador, sino que escribimos una dirección. Esto es debido a una "ayuda" invisible que hace más "humano" Internet: los DNS.
Sin entrar en "jaleos" técnicos, podemos decir que los DNS son servidores que "saben" en que dirección se sitúan otros servidores, convirtiendo direcciones escritas con alfabeto (más fáciles de leer y recordar para las personas) en IPs. Así, por ejemplo en el caso de escribir http://google.es en nuestro navegador, gracias al servidor DNS, estaríamos en realidad accediendo algo así como 216.58.201.131.
Es decir, un DNS utiliza una especie de tabla conversión para pasar de URLs a IPs y CloudFlare nos permite, de forma gratuita, hacer estas conversiones.
Los problemas...
Sin embargo, nos encontramos con dos problemas:
-
En nuestra casa, casi en el 100% de las veces tenemos una IP dinámica, es decir, que cambia con el tiempo y, por tanto, no podemos asignar en esa tabla de conversiones.
-
No tenemos un dominio. Los dominios .com o .es o .LOQUESEA son de pago y su precio varía entre proveedores pero podemos fijar en 12€ el precio anual medio de un dominio .com (como puede ser https://ricveal.com).
Sobre este último punto, existen alternativas gratuitas para el usuario, de forma que algunas conocidas empresas nos ceden gratuitamente un subdominio que forma parte de su propio dominio. Yo, por ejemplo, he usado mucho noip.com, desde donde podemos crear un subdominio gratuito, véase 'rpi-casa-pepito.hopto.org'. Esta opción está bien si no tienes ya un dominio y no te puedes hacer con uno, pero tiene una desventaja y es que tendrás que renovarlo cada x días (creo recordar que era cada mes) lo que a la larga se vuelve algo bastante tedioso.
Personalmente, creo que es mejor adquirir un dominio propio y para ello te recomiendo GoDaddy o NameCheap.
Ya tengo un dominio propio...
Una vez comprado un dominio, lo tenemos que dirigir a nuestra IP de casa, que recordemos es dinámica y por tanto cambiante. Aquí es donde nos toca utilizar Clouflare y hacer un poco de magia ;).
Nos logueamos en nuestra cuenta de Cloudflare y vamos a "mi cuenta", hacemos scroll hacia abajo hasta la sección 'API key'. Copiamos nuestra Global API key puesto que la necesitaremos en poco tiempo.
Volvemos a la pestaña DNS y añadimos un 'A-record' para nuestra actual IP de casa (recuerda que estamos hablando de la IP pública, es decir la IP que tiene el router de cara a Internet). Puedes averiguarla fácilmente a través de esta web.
Mediante la API vamos a actualizar este valor de forma automática para que siempre esté actualizada.
Para ello, accedemos a nuestra Raspberry (mediante SSH puede ser una buena opción) y ejecutamos 'sudo su' para convertimos en 'root' con todos los derechos.
A partir de este momento utilizaremos un pequeño bash script que descargaremos y moveremos mediante:
wget https://gist.githubusercontent.com/MylesGray/b6b3b9b6b373de6a90e1f2132cccfade/raw/abda700b0dd5a4eb68c64727b1c2a98da284891b/cf-ddns.sh /usr/local/bin/cf-ddns.sh
Lo hacemos ejecutable:
chmod +x /usr/local/bin/cf-ddns.sh
Y ahora lo configuraremos con nuestros datos:
nano /usr/local/bin/cf-ddns.sh
Rellenando los siguientes valores:
# API key, see https://www.cloudflare.com/a/account/my-account,
# incorrect api-key results in E_UNAUTH error (La API que acabamos de copiar de CloudFlare)
CFKEY=
# Zone name, will list all possible if missing, eg: example.com (tu dominio, por ejemplo ricveal.com)
CFZONE=
# Username, eg: user@example.com; tu email
CFUSER=
# Hostname to update, eg: homeserver.example.com (por ejemplo rpi-casa-pepito.ricveal.com)
CFHOST=
A partir de este momento ya se podría ejecutar y verificar que funciona (si no es así, no te preocupes ya que el propio script se quejará):
/usr/local/bin/cf-ddns.sh
Deberías ver algo tal que así:
root@raspberrypi:/home/pi# /usr/local/bin/cf-ddns.sh
Missing DNS record ID
fetching from Cloudflare...
=> Found CFID=********* , advising to save this to /usr/local/bin/cf-ddns.sh or set it using the -i flag
Updating DNS to your.public.ip.address
Updated succesfuly!
Puedes acudir a tu portal de CloudFlare y verificar cómo, en efecto, la IP se ha actualizado. Ahora sólo nos queda hacer este proceso automático. Para ello recurrimos a crontab:
crontab -e
Vamos a ejecutar el script cada 2 minutos (por ejemplo):
*/2 * * * * /usr/local/bin/cf-ddns.sh >/dev/null 2>&1
Y ya tenemos lista, y de forma permanente, una dirección a la que apuntar desde Internet a nuestro router (que a su vez estará redirigiendo a nuestra Raspberry si lo hemos configurado bien).
Espero que este post-tutorial te haya sido de utilidad. Ahora puedes acceder de una forma sencilla a tu música, tu impresora o tu calefacción aprovechando tu dominio y, si has seguido estos pasos, no te habrá llevado más de 10 minutos toda la configuración.
Acuérdate de compartir esta entrada con tus amigos y nos vemos en breves con más contenido :)
¡Saludos!
Subscríbete a mi newsletter
Actualmente estoy llevando a cabo algunos cambios en mi Newsletter y no es posible apuntarse 😞