# Gestionar registros DNS

> Crea, edita y borra registros DNS desde el panel, la CLI, la API o un asistente de IA, e importa o exporta zonas completas.

Los registros se gestionan por zona. Para leerlos basta el rol `readonly`; para cambiarlos hace falta `tech` o
superior. Cada cambio es una [versión nueva](https://developers.openwaf.dev/es/dns/zone-versions/) con su motivo.

Los nombres de los registros se pueden escribir como `@` (el apex), relativos (`www`) o completos con punto final
(`www.example.com.`). Nombres y destinos se guardan en minúsculas y sin el punto final. En
[Tipos de registro y validación](https://developers.openwaf.dev/es/dns/record-types/) tienes el contenido de cada tipo.

## Listar registros

**Panel**

Abre **DNS › Registros** del dominio. Busca, filtra por nombre, tipo, contenido, proxy, TTL o comentario, y elige las
columnas.
**CLI**

```sh
openwaf-cloud ctl records list example.com
```
**API**

```sh
curl "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/records" \
  -H "Authorization: Bearer $OPENWAF_TOKEN"
```
Cada elemento trae `id`, `type`, `name`, `content`, `ttl`, `priority` (MX y SRV), `proxied`, `comment`, `tags`,
`created_at` y `updated_at`.
**MCP**

`list_records` con `zone: "example.com"`. Los ids que devuelve son los que usan `update_record`, `delete_record` y
`apply_records_batch`.


## Crear un registro

**Panel**

Pulsa **Agregar registro**, elige el tipo y rellena nombre, contenido, TTL y estado del proxy. El **Comentario** y las
**Etiquetas** son opcionales, solo para tu referencia, y nunca se publican. La frase de vista previa explica qué hará
el registro.
**CLI**

```sh
openwaf-cloud ctl records add example.com type=A name=www content=203.0.113.10 proxied=true --reason "Alta de www"
openwaf-cloud ctl records add example.com type=MX name=@ content=mx1.example.net priority=10 --reason "Correo"
openwaf-cloud ctl records add example.com type=TXT name=@ content="v=spf1 mx -all" comment="SPF" --reason "SPF"
```
**API**

```sh
curl -X POST "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/records" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Change-Reason: Alta de www" \
  -d '{"type": "A", "name": "www", "content": "203.0.113.10", "ttl": 3600, "proxied": true,
       "comment": "servidor web", "tags": ["prod"]}'
```
Responde `201` con el registro y la versión nueva en `X-Config-Version`.
**MCP**

`create_record` con `zone`, `type`, `name`, `content` y, si hace falta, `ttl`, `priority`, `proxied`, `comment` y
`tags`, además de `reason`. El asistente simula primero (`confirm: false`), te enseña las diferencias y aplica con
`confirm: true` y `expected_version`.


## Editar un registro

Solo cambian los campos que envías. Cambiar `proxied` en un registro `A`, `AAAA` o `CNAME` lo cambia en todos los de
ese nombre.

**Panel**

Pulsa **Editar** en la fila del registro, cambia los campos y guarda. El interruptor de proxy de la fila alterna
directamente entre con proxy y solo DNS.
**CLI**

El registro se indica por su id o como `nombre/TIPO`:
```sh
openwaf-cloud ctl records set example.com www/A content=203.0.113.20 --reason "Servidor web nuevo"
```
**API**

```sh
curl -X PATCH "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/records/$RECORD" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "Content-Type: application/json" \
  -H "X-Change-Reason: Servidor web nuevo" \
  -d '{"content": "203.0.113.20"}'
```
Envía `"priority": null` para quitar una prioridad.
**MCP**

`update_record` con `zone`, `record` (el id de `list_records`) y los campos que cambian.


## Borrar un registro

Un registro borrado deja de resolver en cuanto se propaga el cambio. Borrar un registro con proxy deja de servir su
sitio.

**Panel**

Selecciona el registro y pulsa **Borrar**. Selecciona varios para borrarlos en un solo cambio.
**CLI**

```sh
openwaf-cloud ctl records rm example.com antiguo/CNAME --reason "Sin uso"
```
**API**

```sh
curl -X DELETE "https://dash.openwaf.dev/v1/orgs/$ORG/zones/$ZONE/records/$RECORD" \
  -H "Authorization: Bearer $OPENWAF_TOKEN" \
  -H "X-Change-Reason: Sin uso"
```
Responde `204`.
**MCP**

`delete_record` con `zone` y `record`.


## Importar registros

En las zonas delegadas puedes traer registros de tres fuentes. En todas puedes revisar la lista y aplicar los
registros elegidos como **una** sola versión.

- **El DNS público actual.** Al dar de alta una zona, OpenWAF copia sin proxy los registros que encuentra (y los
  nombres que aparecen en los registros públicos de certificados). **Volver a buscar** en el panel, o
  `GET /v1/orgs/{org}/zones/{zone}/import`, lista lo que aún no está en la zona.
- **Un fichero de zona BIND** (hasta 1 MiB) exportado de tu proveedor anterior: **Importar** en **DNS › Registros**, o
  la CLI. OpenWAF indica qué deja fuera y por qué (por ejemplo el `SOA`, los `NS` del apex o los tipos no admitidos).

  ```sh
  openwaf-cloud ctl records import example.com zona.txt --reason "Importación del proveedor anterior"
  ```

  Añade `--proxied` para importar con proxy los registros `A`, `AAAA` y `CNAME`. En la API,
  `POST /v1/orgs/{org}/zones/{zone}/import/bind` convierte el fichero en candidatos sin aplicar nada; aplica los que
  quieras conservar con un [lote](https://developers.openwaf.dev/es/dns/batch-changes/).
- **Muchos registros desde un script**: envíalos en un [lote](https://developers.openwaf.dev/es/dns/batch-changes/).

## Exportar registros

**Exportar** en **DNS › Registros** descarga la zona como fichero de zona BIND o CSV; con registros seleccionados,
**Exportar la selección** exporta solo esos.

## A tener en cuenta

- Los registros `NS` del apex y el `SOA` los gestiona OpenWAF y no se pueden editar. Los registros `NS` por debajo del
  apex delegan un subdominio en otros servidores de nombres.
- Un `CNAME` sin proxy en el apex se publica como alias: OpenWAF resuelve el destino y responde con sus direcciones
  (aplanado de CNAME), así que puede convivir con registros `MX` y `TXT`.
- En una [zona externa](https://developers.openwaf.dev/es/dns/external-zones/) solo se pueden añadir registros `A`, `AAAA` y `CNAME` con proxy: el resto
  del DNS vive en tu proveedor.
- Los registros de una zona desactivada no se pueden cambiar (`409 conflict`).
