Gabriel Cachadiña

Obtención de la IP pública de un Servidor

· Gabriel Cachadiña

En mi casa no tengo una IP pública fija, esto no sería un problema para la mayoría de usuarios que tenga un homelab con una serie de servicios a los cuales solo quiera acceder mediante su red local, pero, este no es mi caso.

Para mi comodidad me gusta poder acceder a mis servicios desde cualquier red externa. En este tutorial voy a mostrar alternativas para conseguir esto en función de las condiciones que se tengan en vuestras instalaciones.

IP Pública Fija

Muchas compañías ofrecen la posibilidad de tener una IP pública fija, es decir, una IP que nunca cambiará sin importar posibles apagones/resets de la conexión a internet. Esto proporciona una solución muy estable, ya que cualquier puerto podrá habilitarse por el router y ser accesible a internet si se introduce la IP pública y el puerto.

Además de esto, se podrá configurar una sola vez un dominio que apunte a esta IP, sin tener que pasar por el dolor de cabeza de configurar el DNS del mismo cada vez que cambie.

Esta solución es la más inmediata, pero tiene una serie de inconvenientes:

Dynamic DNS

Dynamic DNS o DDNS es una forma de que nuestro DNS apunte a la IP pública del sistema, escaneando la IP pública del mismo y alterándose en caso de un cambio de IP pública.

Si se usa un proveedor DNS que facilite esta opción como noip se podrán tener las ventajas de tener una IP pública no fija con un dominio que siempre apunte a nuestra IP.

Esta solución es la más recomendable siempre que:

Script Manual

Si no se tiene una IP fija ni tampoco se cuenta con un proveedor DNS que ofrezca la opción de que el mismo sea dinámico se podrá crear un pequeño script dentro del router o de un sistema en la red que comunique cambios en la IP pública.

En el caso de mis servidores alojados en VPS todos cuentan con una IP fija, por lo que el DNS apunta de forma constante a ellos, pero, en mi red de mi casa, que no cuenta con una IP pública fija; no se podría hacer esto.

Como los servicios de mi servidor casero no deben ser accesibles a internet por terceros (como si lo son servicios como esta página web), están detras de un VPN WireGuard explicado en otro post. Para configurarme desde los clientes solo necesitará una serie de credenciales fijas y la IP pública, por lo que solo tendré la necesidad de comunicar esto.

Para ello uso mi servidor XMPP para comunicar los cambios con el presente Script:

 1GetPublicIP = pkgs.writeShellScript "GetPublicIP" ''
 2IP_FILE="$HOME/.last_public_ip"
 3PASSWORD="YOURPASSWORD"
 4
 5# Get current public IP
 6CURRENT_IP=$(curl -s https://api.ipify.org)
 7
 8# If file doesn't exist, create it
 9if [ ! -f "$IP_FILE" ]; then
10    echo "$CURRENT_IP" > "$IP_FILE"
11    exit 0
12fi
13
14LAST_IP=$(cat "$IP_FILE")
15
16# Compare IPs
17if [ "$CURRENT_IP" != "$LAST_IP" ]; then
18    MESSAGE="Public IP in "CasaServer" changed: $LAST_IP -> $CURRENT_IP"
19
20    xmppc -j bot@xmpp.gabrielcachadina.com \
21          -p "$PASSWORD" \
22          -m message chat gabriel@xmpp.gabrielcachadina.com \
23          "$MESSAGE"
24
25    echo "$CURRENT_IP" > "$IP_FILE"
26fi

Denotar que uso la utilidad xmppc para enviar los mismos, pero este script podría ser modificado para mandar las actualizaciones por correo con la utilidad mail o mediante un volumen compartido mediante Syncthing

Con esto deberías tener una posible solución para cualquiera de las casuísticas en las que te encuentres que tus servicios estén expuestos al público, ya sea general o privado, de forma que cualquier cambio en la IP no sea un problema.

#self-hosted

Reply to this post by email ↪