Cloudflare DDNS y NetworkManager OpenVPN
Cloudflare DDNS y NetworkManager OpenVPN
Cloudflare DDNS y NetworkManager OpenVPN
Este post cubre un patron para consultar registros DNS en Cloudflare, comparar la IP publica actual y actualizar perfiles OpenVPN gestionados por NetworkManager.
Variables
1
2
3
4
CLOUDFLARE_API_TOKEN="<CLOUDFLARE_API_TOKEN>"
ZONE_ID="<ZONE_ID>"
FQDN="vpn.example.net"
NM_CONNECTION="<VPN_CONNECTION>"
IP publica actual
1
ip_actual="$(curl -fsS https://api.ipify.org)"
IP publicada en Cloudflare
1
2
3
4
5
ip_dns="$(curl -fsS \
-H "Authorization: Bearer $CLOUDFLARE_API_TOKEN" \
-H "Content-Type: application/json" \
"https://api.cloudflare.com/client/v4/zones/$ZONE_ID/dns_records?type=A&name=$FQDN" \
| jq -r '.result[0].content')"
Actualizar perfil OpenVPN
1
2
nmcli connection modify "$NM_CONNECTION" +vpn.data "remote=$ip_dns"
nmcli connection reload
Patron para varios perfiles
1
2
3
4
for conexion in "<VPN_1>" "<VPN_2>" "<VPN_3>"; do
nmcli connection modify "$conexion" +vpn.data "remote=$ip_dns"
done
nmcli connection reload
Modo dry-run
1
2
printf 'IP publica: %s\nIP DNS: %s\n' "$ip_actual" "$ip_dns"
printf 'Actualizaria %s con remote=%s\n' "$NM_CONNECTION" "$ip_dns"
Recomendaciones
- Usar tokens Cloudflare limitados a la zona DNS necesaria.
- No usar
X-Auth-Keyglobal si se puede usarAuthorization: Bearer. - Guardar tokens en variables de entorno o fichero
.envcon permisos600. - Añadir logs y salida diferenciada para cambios/no cambios.
This post is licensed under CC BY 4.0 by the author.