# Tipos de registro y validación

> Los tipos de registro DNS que admite OpenWAF, el formato del contenido de cada uno, los límites de TTL, nombres, prioridades y las reglas de convivencia.

Cada registro se valida al crearlo o cambiarlo, igual desde el panel, la API, la CLI o el servidor MCP. Un registro
rechazado responde `422 invalid` con el campo erróneo en `field` y un mensaje. Consulta
[Códigos de error](https://developers.openwaf.dev/es/dns/error-codes/).

## Tipos admitidos

| Tipo | Contenido | Ejemplo | Admite proxy |
|---|---|---|---|
| `A` | Dirección IPv4 | `203.0.113.10` | Sí |
| `AAAA` | Dirección IPv6 | `2001:db8::10` | Sí |
| `CNAME` | Nombre de host; no puede apuntar a sí mismo | `miapp.example.net` | Sí |
| `MX` | Nombre del servidor de correo, o `.` para un MX nulo; necesita `priority` | `mx1.example.net` | No |
| `TXT` | Texto sin comillas, hasta 4096 bytes de UTF-8 | `v=spf1 include:_spf.example.net -all` | No |
| `NS` | Servidor de nombres de un subdominio delegado (no en el apex) | `ns1.proveedor.net` | No |
| `SRV` | `peso puerto destino`; necesita `priority` | `5 5060 sip.example.com` | No |
| `CAA` | `flags etiqueta "valor"` | `0 issue "letsencrypt.org"` | No |

Cualquier otro tipo se rechaza: `unsupported record type (A, AAAA, CNAME, MX, TXT, NS, SRV, CAA)`.

Detalles del formato:

- `A`/`AAAA`: la dirección tiene que corresponder al tipo (una IPv6 que mapea una IPv4 no se acepta como `AAAA`). Se
  guarda en forma canónica.
- Los nombres de host (`CNAME`, `MX`, `NS` y destinos `SRV`) se guardan en minúsculas y sin el punto final.
- `TXT`: escribe el texto sin comillas. Los valores largos se parten automáticamente en cadenas de 255 bytes al
  publicarse.
- `SRV`: `peso` y `puerto` van de 0 a 65535. La prioridad va en `priority`, no en el contenido.
- `CAA`: `flags` va de 0 a 255 y la etiqueta no distingue mayúsculas; si dejas el valor sin comillas, se le añaden.

## Nombres

- `@` o un nombre vacío es el apex. Un nombre relativo (`www`) se completa con la zona. Un nombre que termina en punto
  se toma como completo y tiene que estar dentro de la zona.
- Etiquetas: letras, cifras, `-` y `_`, hasta 63 caracteres cada una y 253 en total. Los nombres se guardan en
  minúsculas.
- Una etiqueta `*` al principio crea un comodín (`*.example.com`). Los comodines y los nombres con `_` no admiten proxy.

## TTL

| | Valor |
|---|---|
| Permitido | De 60 a 86 400 segundos |
| Por defecto, si no se indica | 3600 segundos |
| Nombres con proxy | Se publican con un TTL corto que gestiona OpenWAF (aparece como **Auto**); el TTL que pongas se guarda para cuando quites el proxy |

## Prioridad

Los registros `MX` y `SRV` necesitan una `priority` entre 0 y 65 535. Los demás tipos no pueden tenerla
(`only MX and SRV records have a priority`).

## Comentarios y etiquetas

Los registros pueden llevar un `comment` (hasta 100 caracteres, sin caracteres de control) y hasta 10 `tags` (de 1 a 32
caracteres de `a-z`, `0-9`, `:`, `_` y `-`, empezando por letra o cifra; se guardan en minúsculas y sin duplicados). Se
versionan con la zona pero nunca se publican en el DNS.

## Reglas de convivencia

Los registros de un mismo nombre tienen que encajar entre sí. Estas reglas se comprueban en cada cambio y, en un
[lote](https://developers.openwaf.dev/es/dns/batch-changes/), sobre el estado final de cada nombre:

| Regla | Mensaje de error |
|---|---|
| No hay dos registros idénticos (mismo tipo, contenido y prioridad) | `an identical … record already exists at …` |
| Un solo `CNAME` por nombre | `… already has a CNAME record` |
| Un `CNAME` nunca junto a `A`/`AAAA` | `a CNAME cannot coexist with A/AAAA records at …` |
| Fuera del apex, un `CNAME` sin proxy está solo en su nombre | `an unproxied CNAME must be the only record at …` |
| Un nombre delegado con `NS` no tiene otros registros | `… is delegated with NS records; it cannot hold other records` |
| Todos los `A`, `AAAA` y `CNAME` de un nombre comparten el estado del proxy | `all A, AAAA and CNAME records at … must have the same proxied value` |

En el apex, un `CNAME` sin proxy se publica como alias (OpenWAF resuelve el destino y responde con sus direcciones), así
que puede convivir con registros `MX`, `TXT` y `CAA`. Un `CNAME` con proxy puede compartir nombre con `MX`, `TXT` y otros
registros que no son de dirección, porque el nombre publica las direcciones del borde.

## Gestionados por OpenWAF

- El registro `SOA` y los `NS` del apex (tu [pareja de servidores de nombres](https://developers.openwaf.dev/es/dns/delegate-a-zone/#nameserver-pair))
  los gestiona OpenWAF y no se pueden crear ni editar
  (`the zone apex NS records are the assigned pair and cannot be edited`).
- En una [zona externa](https://developers.openwaf.dev/es/dns/external-zones/) solo se aceptan registros `A`, `AAAA` y `CNAME` con proxy.
