Es posible utilizar Cloudflare de forma gratuita para proyectos o hobbies de carácter personal.

Registro

Registrarse en Cloudflare es un proceso muy sencillo:

  • Acceder a https://dash.cloudflare.com/sign-up
  • Rellenar el formulario:
    • Dirección de correo electrónico: usuario@midominio.com
    • Contraseña: *********
    • No marcar la opción para recibir correos ocasionales
  • Pulsar el botón Sign Up

Una vez hecho ésto, se recibirán dos correos electrónicos:

  • Welcome to Cloudflare Access
  • [Cloudflare]: Please verify your email address

Hay que seguir el enlace del segundo mensaje para verificar el correo electrónico y poder acceder al Dashboard de Cloudflare en https://dash.cloudflare.com/.

Cloudflare DNS

Para tener DNS dinámico, lo primero es añadir una website o dominio a Cloudflare:

  • Acceder a Websites en el menú de la izquierda
  • Pulsar el botón (+) Add Site
  • Indicar el nombre del sitio/dominio: midominio.com
  • Pulsar el botón Add site

En el paso 1 del asistente hay que seleccionar el plan gratuito Free $0/month que tiene las siguientes características:

  • DNS rápido y fácil de usar
  • Protección DDoS no medida
  • CDN global
  • Certificado SSL Universal
  • Conjunto de reglas administradas gratuitas
  • Mitigación sencilla de bots
  • 3 Reglas de página
  • 5 Reglas WAF

En el paso 2, se obtienen los registros DNS actuales del dominio que se ha indicado y se muestran en pantalla para poder revisarlos:

Registros DNS

Nota: Aquí se podría editar o borrar los registros existentes así como añadir nuevos registros (por ejemplo vault.midominio.com para acceder a una instalación de Vaultwarden local).

  • Una vez revisados, se pulsa el botón Continue

En el paso 3, y último, se dan las instrucciones para cambiar los nameservers desde el registrador actual a Cloudflare:

  • Determinar el registrador actual
  • Acceder al registrador con una cuenta de administración
  • Borrar los servidores de nombre actuales
  • Introducir los servidores de nombres de Cloudflare que se indican en el asistente, por ejemplo:
    • romina.ns.cloudflare.com
    • vick.ns.cloudflare.com
  • Pulsar el botón Done, check nameservers

Finalmente, se podrían configurar los parámetros del dominio para aumentar la seguridad, optimizar el rendimiento, etc. pero no es necesario hacerlo en este momento por lo que se pulsará la opción Finish later:

  • Improve security
    • Automatic HTTPS Rewrites
    • Always use HTTPS
  • Optimize performance

Nota: Los registradores pueden tardar hasta 24h en procesar los cambios. Hay que ser paciente y esperar antes de continuar con cualquier proceso que requiera del DNS en Cloudflare (por ejemplo, crear un certificado SSL de Let’s Encrypt desde Nginx Proxy Manager).

DNS dinámico

Se puede usar Cloudflare para tener DNS dinámico al estilo de Duck DNS o No-IP.

El uso habitual de este servicio sería tener un dominio, por ejemplo casa.midominio.com, que apunte a la IP pública que proporciona el proveedor de Internet.

La idea es crear un registro de tipo A y después usar alguna opción para que se actualice automáticamente, por ejemplo:

API Token

Para poder actualizar los registros DNS de forma automatizada, es necesario crear un token que asigne los permisos necesarios para hacerlo:

  • Acceder a My ProfileAPI Tokens
  • Pulsar el botón Create Token
  • Seleccionar la plantilla Edit Zone DNS pulsando el botón Use template

Nota: Esta plantilla agrega únicamente el permiso Zone > DNS > Edit por lo que será necesario añadir uno más.

  • Agregar un nuevo permiso Zone > Zone > Read
  • Seleccionar la zona que se incluirá: Zone > Specific zone > midominio.com
  • Pulsar el botón Continue to summary
  • Finalmente, pulsar el botón Create Token

Este proceso creará un token similar al mostrado a continuación que se deberá copiar en algún lugar seguro ya que únicamente se muestra una vez:

8-3x-wz_B7cZXjMNE3Bz1bLMa4YsYQ-XESthjXe3

Docker de Timothy Miller

La implementación docker de Timothy Miller no funciona correctamente en mi entorno.

Tal como se indica en la issue 111 del proyecto, ésto es debido al uso de 1.1.1.1 en lugar de cloudflare.com para obtener la IP pública.

Una posible “solución”, sería descargar el fichero cloudflare-ddns.py, revertir el cambio y ejecutarlo cada 5 minutos usando crontab.

El fichero de configuración config.json que se debería usar sería el siguiente:

{
  "cloudflare": [
    {
      "authentication": {
        "api_token": "8-3x-wz_B7cZXjMNE3Bz1bLMa4YsYQ-XESthjXe3"
      },
      "zone_id": "a4eb0ce4b412b3d2ae53a0e0ab22502a",
      "subdomains": [
        {
          "name": "casa",
          "proxied": false
        }
      ]
    }
  ],
  "a": true,
  "aaaa": false,
  "purgeUnknownRecords": false,
  "ttl": 300
}

Docker de Oznu

La implementación docker de Oznu es bastante sencilla y funciona correctamente usando un fichero docker-compose.yml similar al siguiente:

version: "2"
services:
  cloudflare-ddns:
    image: oznu/cloudflare-ddns:latest
    container_name: cloudflare-ddns
    environment:
      - API_KEY=8-3x-wz_B7cZXjMNE3Bz1bLMa4YsYQ-XESthjXe3
      - ZONE=midominio.com
      - SUBDOMAIN=casa
      - PROXIED=false
      - RRTYPE=A
      - DELETE_ON_STOP=false
      - DNS_SERVER=9.9.9.9
    restart: unless-stopped

Script de K0p1-Git

El script de K0p1-Git es bastante sencillo y funciona correctamente usando una configuración similar a la siguiente:

auth_email=""
auth_method="token"
auth_key="8-3x-wz_B7cZXjMNE3Bz1bLMa4YsYQ-XESthjXe3"
zone_identifier="a4eb0ce4b412b3d2ae53a0e0ab22502a"
record_name="casa.midominio.com"
ttl="300"
proxy="false"

Túneles

Los túneles se gestionan desde un Dashboard diferente: https://one.dash.cloudflare.com/ y se suelen usar cuando no se puede, o no se quiere, abrir puertos en el router por estar detrás de un CGNAT.

Nota: Si se utiliza un túnel hay que extremar la seguridad para no dejar nada abierto y que los ciberdelincuentes entren hasta la cocina.

Si se quiere acceder a Home Assistant, es mucho más recomendable pagar una subscripción a Nabu Casa y evitar los problemas de seguridad que pueden tener los túneles.

De todos modos, lo mejor es conectarse a la red local usando WireGuard como VPN. De esta manera, se puede acceder a los servicios usando la dirección IP privada de cada servicio.

Referencias