Cómo averiguar remotamente la IP pública de tu RasPi


10 posts
by monete » Fri Nov 02, 2012 6:23 pm
Una de las maneras más simples que conozco de obtener la IP pública de una máquina a través de línea de comandos es utilizando http://icanhazip.com, una web que devuelve en texto plano tu IP pública. Utilizando, por ejemplo, curl, la siguiente línea ejecutada en una shell nos devolvería nuestra IP pública:
Code: Select all
curl icanhazip.com
Simple, ¿verdad? Aprovechando esa simpleza y utilizando a la vez el servicio de almacenamiento en la nube de Dropbox es posible obtener la IP pública de tu Rapsberry Pi desde cualquier sitio desde el que puedas acceder a tus archivos en Dropbox (smartphone, interfaz web o cliente para ordenador).

La manera más "bruta" consiste en crear una tarea en cron que cada intervalo de tiempo compruebe la IP pública de la máquina y la almacene en un archivo de texto que subirá a Dropbox. Cuando queramos acceder a nuestra RasPi desde el exterior solo tendremos que consultar ese archivo para conocer su dirección IP.

La manera "elegante" implica, también usando cron, vigilar los archivos de nuestro Dropbox cada intervalo de tiempo. Siempre que encuentre un archivo llamado de cierta forma, p.e. ip, obtendrá su IP pública y la subirá en un archivo de texto a Dropbox, borrando posteriormente ese archivo de nombre ip. De esa forma, siempre que queramos conocer la IP pública de la frambuesa solo tenemos que crear un archivo con el nombre ip en la localización que hayamos configurado y esperar a que la Raspberry nos chive su dirección.
Este último ejemplo se puede utilizar para ejecutar otras tareas remotamente en vuestras Pis sin tener que acceder mediante ssh, como, por ejemplo, ordenar que se apague subiendo a Dropbox un archivo llamado shutdown.

Si tenéis vuestra propia receta para obtener la IP pública o dudas sobre esta, no dudéis en escribir ;)


NOTAS: Tened en cuenta que aunque sepáis la IP pública, si la Raspberry está conectada, por ejemplo, a una LAN casera a través de un router, es la IP pública del router lo que estáis obteniendo. Posteriormente habría que configurar ese router para acceder a la Raspberry desde el exterior.
La gestión de archivos almacenados en Dropbox se puede hacer utilizando la herramienta Dropbox Uploader -> http://www.andreafabrizi.it/?dropbox_uploader
User avatar
Posts: 33
Joined: Wed Oct 10, 2012 1:54 pm
by monete » Fri Nov 02, 2012 6:35 pm
Esta línea en crontab ejecuta la manera "elegante" de hacerlo descrita antes (puede que con algún gazapo en bash :roll: ):
Code: Select all
# Obtener IP pública subiendo a Dropbox un archivo llamado ip
# comprueba si existe en Dropbox un archivo llamado ip. Si existe, solicita IP pública y la almacena en un archivo que sube a Dropbox. Finalmente, borra el achivo llamado ip.
* * * * * dropbash list | if grep -wq '^ \[F\] ip$'; then curl -sS icanhazip.com > ~/tmp/ip.txt; dropbash upload ~/tmp/ip.txt; dropbash delete ip; fi;

dropbash es un alias que le di a dropbox_uploader.sh
User avatar
Posts: 33
Joined: Wed Oct 10, 2012 1:54 pm
by langos1989 » Sat Nov 10, 2012 3:20 pm
Muy buena idea! Yo había pensado hacer lo mismo que tú pero en vez de usar el Dropbox pensaba utilizar una cuenta de correo, de manera que enviando un email a una dirección configurada en la rpi poniendo por ejemplo "dime ip" la rpi me respondiera con un email diciendo cual es mi ip. Con el Dropbox la verdad que es mucho más sencillo aunque una vez configurado veo más cómodo lo del correo.
Posts: 5
Joined: Mon Aug 27, 2012 9:59 pm
by monete » Mon Nov 12, 2012 11:32 pm
langos1989, qué bueno que te molase la idea :P

Respecto a la tuya de hacerlo enviando mails a la RasPi, ¿cómo has pensado conseguir enviar un correo a la máquina sin saber antes su IP pública? ¿A lo mejor configurando tu servidor de correo para que sincronice con gmail u otro parecido?

Antes de hacerlo con Dropbox pensé en algo que implicaba correo electrónico también: cada vez que arrancase, la máquina obtendría su IP pública y la enviaría en un correo electrónico (utilizando alguno de los livianos msmtp[1] o ssmtp[2]). Luego la almacenaría en un archivo y cada intervalo de tiempo (p.e. 5 minutos) comprobaría si su IP pública sigue siendo igual que la que tiene almacenada en ese archivo. Si no, enviaría un mail con la nueva, la almacenaría en el archivo y vuelta a empezar.

[1] https://wiki.archlinux.org/index.php/MSMTP
[2] http://wiki.debian.org/sSMTP
User avatar
Posts: 33
Joined: Wed Oct 10, 2012 1:54 pm
by monete » Mon Nov 12, 2012 11:40 pm
monete wrote:Esta línea en crontab ejecuta la manera "elegante" de hacerlo descrita antes (puede que con algún gazapo en bash :roll: ):
Code: Select all
# Obtener IP pública subiendo a Dropbox un archivo llamado ip
# comprueba si existe en Dropbox un archivo llamado ip. Si existe, solicita IP pública y la almacena en un archivo que sube a Dropbox. Finalmente, borra el achivo llamado ip.
* * * * * dropbash list | if grep -wq '^ \[F\] ip$'; then curl -sS icanhazip.com > ~/tmp/ip.txt; dropbash upload ~/tmp/ip.txt; dropbash delete ip; fi;

dropbash es un alias que le di a dropbox_uploader.sh


Otra forma de hacerlo. Sigue siendo un buen chorizo, pero sin utilizar expresiones regulares y permitiendo que también reaccione ante ip como nombre de directorio, no solo de archivo.

Code: Select all
# Obtener IP pública subiendo a Dropbox un archivo llamado ip
# comprueba si existe en Dropbox un archivo llamado ip. Si existe, solicita IP pública y la almacena en un archivo que sube a Dropbox. Finalmente, borra el achivo llamado ip.
* * * * * dropbash list | tail -n +2 | cut -d" " -f3- | while read filename; do if [ "$filename" = "ip" ]; then curl -sS icanhazip.com > ~/Dropbash/ip.txt; dropbash upload ~/Dropbash/ip.txt; dropbash delete ip; break; fi; done
User avatar
Posts: 33
Joined: Wed Oct 10, 2012 1:54 pm
by jochemin » Tue Nov 13, 2012 8:37 am
Yo lo tengo mediante mail.

He creado una cuenta gmail específica para eso y tras configurarlo en la pi, para ello:

Code: Select all
sudo apt-get install ssmpt
sudo apt-get install mailutils


Editar el fichero ssmtp:
Code: Select all
sudo nano /etc/ssmtp/ssmtp.conf


Agregar al final del fichero lo siguiente:

AuthUser=tudirección@gmail.com
AuthPass=tupassword
FromLineOverride=YES
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES

Una vez configurado, he programado una tarea a las 8 de la mañana mediante crontab para que me envíe un correo a mi mail con la ip pública del router.

Code: Select all
sudo nano /etc/crontab

Y añadir una linea al final con lo siguiente:

00 8 * * * root curl -sS icanhazip.com|mail -s "IP" tu_direccion@gmail.com

Con esto, todos los días a las 8:00 envía el correo con asunto "IP" a la dirección que quieras.

Un saludo.
Posts: 16
Joined: Thu May 24, 2012 6:26 am
by monete » Tue Nov 13, 2012 10:08 am
Muy buena la solución, jochemin.
Solo le encuentro una pega, aunque a lo mejor a ti te funciona bien. ¿Y si tu IP pública cambia durante el día y necesitas acceder a la Raspberry? Mi ISP cambia mi IP pública sin previo aviso y sin relacionarlo con el arranque del dispositivo ADSL que utilizo para conectarme. De ese modo, si un día la IP cambia a las 08:06h de la mañana, te quedas sin saber dónde está la RasPi hasta el día siguiente.
Tunear la frecuencia con la que se ejecuta el cron job que has creado sería la respuesta a las necesidades de cada uno.

¡Ánimo con esas soluciones para el problema de las IP dinámicas!
User avatar
Posts: 33
Joined: Wed Oct 10, 2012 1:54 pm
by jochemin » Tue Nov 13, 2012 10:43 am
monete wrote:Muy buena la solución, jochemin.
Solo le encuentro una pega, aunque a lo mejor a ti te funciona bien. ¿Y si tu IP pública cambia durante el día y necesitas acceder a la Raspberry? Mi ISP cambia mi IP pública sin previo aviso y sin relacionarlo con el arranque del dispositivo ADSL que utilizo para conectarme. De ese modo, si un día la IP cambia a las 08:06h de la mañana, te quedas sin saber dónde está la RasPi hasta el día siguiente.
Tunear la frecuencia con la que se ejecuta el cron job que has creado sería la respuesta a las necesidades de cada uno.

¡Ánimo con esas soluciones para el problema de las IP dinámicas!


Si, si cambiara después de las 8:00 me quedaría sin saber la ip hasta el día siguiente. He visto por ahí arriba la solución, implementar un pequeño script que lea el correo y enviando una cadena de texto (por ejemplo: "cual es mi ip") te responda con la ip. Pero no quiero tener un script corriendo continuamente sólo para eso.

Como dices, se puede modificar el cron job para que envíe el correo cada hora, cada 3 horas... cuando quieras, pero mi ISP (movistar) no me suele cambiar la ip pública muy a menudo, y he comprobado que cuando lo hace, es por las noches. Así que de esta manera, me vale. :D
Posts: 16
Joined: Thu May 24, 2012 6:26 am
by yv1hx » Thu Nov 22, 2012 6:36 pm
Hola a todos,

Yo recomendaria el uso de la plataforma http://www.no-ip.com que dispone de fuentes para su cliente de monitoreo de IP local en su pagina.

Suerte...
Marco-Luis
http://www.meteoven.org
http://yv1hx.no-ip.org
http://twitter.com/meteoven
Posts: 201
Joined: Sat Jul 21, 2012 10:09 pm
Location: Zulia, Venezuela
by micerinos » Wed Dec 05, 2012 7:15 pm
+1 para el dynamic dns.
Además, en lugar de usar el numerajo de la ip (que puede cambiar y es un engorro para los scripts), accedes directamente a través del nombre dns. Incluso si vuestro router lo permite, podeis configurar el servicio desde el router sin depender de que la raspi esté encendida.
Un saludo
Posts: 74
Joined: Fri Nov 09, 2012 11:15 am
Location: Madrid, Spain