Si se tiene un servicio de Internet con IP dinámica, el acceso remoto a un equipo se complica cada vez que la IP cambia. Para sobrellevar esto es posible generar un script que informe cuál es la nueva dirección IP, el script puede programarse para escribir un archivo de texto alojado en una carpeta que se sincronice en la nube y de esta forma poder consultarlo remotamente, dicho script puede invocarse desde una configuración en cron.
La dirección IP resultante se guarda en el archivo ip.txt que se almacena en dos directorios sincronizados con mis dispositivos:
El ejemplo de script sería:
El comando para configurar cron es:
crontab -ePara evitar que cron envíe mail reportando cada ejecución programada hay dos opciones:
1) Deshabilitar mail para todas las actividades de cron del usuario, escribir lo siguiente antes de las tareas de cron:
MAILTO=""2) Deshabilitar mail para tareas específicas de cron, escribir lo siguiente a un lado de la tarea sobre la que no se desea recibir notificación:
>/dev/null 2>&1Ejemplo:
# ejemplo de entrada en crontab para ejecutar este script cada 30 minutos:
# m h dom mon dow command
*/30 * * * * /home/lionstone/.local/bin/ip_script.sh >/dev/null 2>&1
Nota: tomar en cuenta el límite en la frecuencia de consultas al servicio desde el que se obtiene la IP, he tenido que modificar el script en cuatro ocasiones por cuidar este detalle. Por ejemplo, para el script propuesto aquí se usa http://myexternalip.com que describe así sus límites:
Rate limit: if you exceed the rate limit of 30 requests/minute, you will receive status code 429 If you continue to exceed that limit and start to annoy me you will get banned at the IP filter level. Sorry, but I do not see the need to retrieve the IP more than maybe once every minute, 30 requests per minute is good will on my behalf.
El comando para consultar la configuración actual de cron para el usuario es:
crontab -lGuardo un respaldo del script que me ha funcionado en:
/home/leoperbo/Software/Mis scripts de bash/ip_script.sh
Referencias:
- El script fue tomado de una respuesta en esta consulta de Ask Ubuntu
- Posteriormente, combiné el script anterior con el siguiente publicado en Stackexchange. Es decir, sustituí
curl(que requiere usar expresiones regulares para filtrar la dirección IP) pordig(que permite obtener la dirección IP de un servicio DNS).