Post

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-Key global si se puede usar Authorization: Bearer.
  • Guardar tokens en variables de entorno o fichero .env con permisos 600.
  • Añadir logs y salida diferenciada para cambios/no cambios.
This post is licensed under CC BY 4.0 by the author.