# Implementación de Cloudflare en Caddy

---
Caddy gestiona certificados HTTPS de forma automática, pero si usas **Cloudflare como DNS**, puedes mejorar la seguridad y ocultar la IP de tu servidor. Para eso, puedes configurar el **ACME DNS Challenge**, que permite validar tus dominios usando Cloudflare en lugar del típico challenge HTTP.

---

### Requisitos previos

* Dominio gestionado en Cloudflare.
* Caddy instalado.
* Un API Token de Cloudflare con permisos DNS sobre tu dominio.

---

#### Paso 1: Crear el API Token en Cloudflare

1. Accede a [Cloudflare Dashboard](https://dash.cloudflare.com).
2. En tu perfil, entra a **API Tokens**.
3. Crea un token con:

   * **Zone\:DNS\:Edit** (limitado al dominio en cuestión).
4. Guarda el token en un sitio seguro.

---

#### Paso 2: Añadir el token al entorno

Guarda el token como variable de entorno para evitar escribirlo directamente en el `Caddyfile`.

```bash
# En ~/.bashrc o ~/.zshrc
export CLOUDFLARE_AUTH_TOKEN=tu_token_aqui
source ~/.bashrc  # o ~/.zshrc
```

---

#### Paso 3: Configurar el `Caddyfile`

Bloque global con soporte para DNS Challenge usando Cloudflare:

```caddyfile
{
    acme_dns cloudflare
    email admin@example.com
}

example.com {
    reverse_proxy http://192.168.1.10:8080
}

subdomain.example.com {
    reverse_proxy http://192.168.1.10:8081
}
```

> El token se toma de la variable de entorno `CLOUDFLARE_AUTH_TOKEN`.

---

#### Paso 4: Validar y recargar Caddy

```bash
caddy validate --config /etc/caddy/Caddyfile
sudo systemctl reload caddy
```

---

### Beneficios de usar Cloudflare con Caddy

* Ocultas la IP real del servidor.
* Añades mitigación contra ataques DDoS.
* Puedes aprovechar el cacheo de contenido estático.

---

### Detalles adicionales

* **Modo SSL en Cloudflare**: activa "Full (Strict)" para que Cloudflare acepte los certificados de Caddy.
* **Compilar Caddy con soporte DNS personalizado**: si no usas un binario precompilado, consulta esta guía:
  👉 [Usar binario de Caddy customizado](https://wiki.jtrapero.eu.org/books/scripts-utiles/page/construccion-de-caddy-con-xcaddy-y-modulos-personalizados)