> ## Documentation Index
> Fetch the complete documentation index at: https://docs.basaltic.sh/llms.txt
> Use this file to discover all available pages before exploring further.

# Archivos de zona

> Importar un archivo maestro de BIND y exportar uno antes de un cambio masivo.

<a id="importing-a-zone-file" />

## Importar un archivo de zona

`POST /v1/zones/{zone_id}/import` toma un archivo maestro RFC 1035, el formato BIND que exporta cada proveedor.

<Tip>
  Si estás moviendo un dominio activo y tu proveedor no tiene exportación, es posible que no necesites un archivo en absoluto: `import_existing_records` en el momento de crear lee los registros directamente de ellos. Consulte [Mover un dominio activo](/es/dns/ownership#moving-a-live-domain).
</Tip>

<Tabs>
  <Tab title="Console">
    Abra la zona desde **DNS** y elija **Import zone file**. Pegue el archivo en la caja, o cargue uno desde el disco con **Choose a file**, luego elija **Import**.

    El cuadro de diálogo informa cuántos conjuntos de registros se han añadido y cuántos se han reemplazado, y enumera cualquier cosa que se ha omitido con la razón.
  </Tab>

  <Tab title="API">
    Envíalo como JSON en `zone_file`, o como el cuerpo sin procesar bajo cualquier otro tipo de contenido, así que esto funciona directamente:

    ```bash theme={null}
    curl --data-binary @db.example.com \
      -H 'Content-Type: text/plain' \
      https://dns.basaltic.sh/v1/zones/{zone_id}/import
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic dns zone import <zone-id> --zone-file "$(cat db.example.com)"
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    body, err := os.ReadFile("db.example.com")
    if err != nil {
        log.Fatal(err)
    }

    result, err := dns.New(cfg).ImportZoneFile(ctx, zoneID, &dns.ZoneImportRequest{
        ZoneFile: string(body),
    })
    ```
  </Tab>
</Tabs>

<AccordionGroup>
  <Accordion title="Se fusiona, nunca reemplaza" icon="git-merge">
    Un RRset en el archivo reemplaza el RRset con el mismo nombre y tipo por completo; un RRset que el archivo no menciona se deja exactamente como está.

    Así que una importación **no puede eliminar un registro**, e importar el mismo archivo dos veces es una no-op en lugar de un error, lo que hace que sea seguro volver a intentarlo.
  </Accordion>

  <Accordion title="Es todo o nada" icon="shield">
    Todo el archivo se valida antes de que se escriba un solo registro: cada registro se enfrenta al mismo tipo, nombre, TTL y comprobaciones de rdata que la creación de uno, la misma regla CNAME y la misma cuota de registro. Un registro malo rechaza el archivo y la zona no se toca.
  </Accordion>

  <Accordion title="Algunos registros se omiten por diseño" icon="filter">
    El conjunto de SOA y NS apex son de la plataforma: la zona es servida por nuestros servidores de nombres, y el NS apex es el que el padre delega. Los registros DNSSEC (`RRSIG`, `DNSKEY`, `DS`, `NSEC`, `NSEC3`, `NSEC3PARAM`, `CDS`, `CDNSKEY`) son generados por nuestro firmante a partir de claves que su archivo no puede conocer. Los registros colocados fuera de la zona también se omiten.

    Cada uno vuelve en `skipped` con una razón. Un archivo exportado desde una zona firmada los lleva todos, así que rechazar el archivo sobre ellos haría que la exportación/importación no sea utilizable.
  </Accordion>
</AccordionGroup>

El archivo tiene un límite de **1 MiB**. En caso de éxito, el serial SOA avanza una vez para toda la importación.

<a id="exporting-a-zone-file" />

## Exportación de un archivo de zona

`GET /v1/zones/{zone_id}/export` devuelve la zona como un archivo maestro RFC 1035 — el mismo formato que toma `/import`.

<Tabs>
  <Tab title="Console">
    Abra la zona desde **DNS** y elija **Export zone file**. Se descarga como `db.<zone name>`.
  </Tab>

  <Tab title="API">
    ```bash theme={null}
    curl -H "$AUTH" https://dns.basaltic.sh/v1/zones/$ZONE_ID/export \
      -o db.example.com
    ```
  </Tab>

  <Tab title="CLI">
    ```bash theme={null}
    basaltic dns zone export <zone-id> > db.example.com
    ```
  </Tab>

  <Tab title="Go">
    ```go theme={null}
    r, err := dns.New(cfg).ExportZoneFile(ctx, zoneID)
    if err != nil {
        log.Fatal(err)
    }
    defer r.Close()

    f, err := os.Create("db.example.com")
    if err != nil {
        log.Fatal(err)
    }
    defer f.Close()
    _, err = io.Copy(f, r)
    ```

    La exportación de flujos, así que copiarlo en lugar de leer todo en la memoria.
  </Tab>
</Tabs>

<Tip>
  **Tomar una antes de un cambio masivo.** La importación se fusiona y nunca se elimina, por lo que sin un archivo capturado previamente no hay forma de volver al estado anterior.
</Tip>

<Warning>
  **El archivo no puede describir toda la zona**, y lo dice en su propio encabezado. Un archivo de zona lleva registros y nada más, por lo que estos no están en él:

  * Asociaciones de VPC de zona privada

  La reimportación restaura los registros. Cualquier cosa anterior tiene que ser configurado de nuevo.
</Warning>

Los registros DNSSEC se omiten — firman las claves que tiene esta plataforma y no significan nada en ningún otro lugar; una zona importada en otro lugar está firmada por quien la sirve. El SOA y el NS de vértice se incluyen, como en cualquier archivo de zona, y un importador los reemplaza por los suyos.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.