Aller au contenu principal

Enregistrements DNS

Bêta

Fonctionnalité en cours de déploiement. L'interface décrite ici est celle de la prochaine livraison : elle peut encore évoluer, et n'est pas forcément activée sur votre tenant.

Un enregistrement DNS publie un nom de vos zones vers une adresse, un autre nom, un texte ou un serveur de messagerie. Vous le créez avec sng dns record set ou un manifeste DNSRecord ; la plateforme le vérifie, puis le publie en quelques minutes.

Prérequis​

  • Une session sur votre tenant (sng tenant use acme).
  • Le droit dns:write pour créer ou modifier, dns:delete pour supprimer (policies gérées readwrite, admin). En readonly, vous pouvez lister et décrire.
  • Pour un domaine apporté : une zone déclarée. Vous pouvez créer l'enregistrement avant la zone : il est accepté, reste en ZoneNotOwned, puis est publié tout seul (Published) quand la zone est prouvée. Il n'est publié qu'une fois la zone Provisioned ou Active.

1. Créer un enregistrement​

NAME est relatif à la zone : @ pour l'apex, www, a.b, *.preview, _dmarc. Sans --zone, c'est votre zone par défaut <tenant>.dev.stackngo.app.

# A dans la zone par défaut : www.acme.dev.stackngo.app
sng dns record set www --type A --target 203.0.113.10 --target 203.0.113.11

# MX à l'apex d'un domaine apporté
sng dns record set @ --zone exemple.fr --type MX --target "10 mx1.mail.ovh.net" --target "20 mx2.mail.ovh.net" --ttl 3600
enregistrement www.acme.dev.stackngo.app A créé : 203.0.113.10, 203.0.113.11 (id www-a-7c2e91d4)
effectif dans quelques minutes : sng dns record describe www-a-7c2e91d4

Gardez l'id : il sert à describe et delete. Il est dérivé de la zone, du nom et du type.

Le même MX en manifeste :

mail.yml
apiVersion: dns.stackngo.io/v1alpha1
kind: DNSRecord
metadata:
name: mail
spec:
zone: exemple.fr # absent : zone par défaut du tenant
name: "@" # apex ; à mettre entre guillemets en YAML
type: MX
ttl: 3600
targets: ["10 mx1.mail.ovh.net.", "20 mx2.mail.ovh.net."]
sng apply mail.yml

2. Choisir le type et les cibles​

TypeCible (--target, répétable)Règles
Aadresse IPv4adresse publique uniquement
AAAAadresse IPv6adresse publique uniquement
CNAMEnom d'hôteune seule cible, jamais à l'apex (@)
TXTtexte1 à 255 caractères ASCII imprimables par cible
MX"<priorité> <hôte>"priorité de 0 à 65535

Pour tous : 1 à 16 cibles, sans doublon ; TTL de 60 à 86 400 s, 300 par défaut. Les noms d'hôte s'écrivent en minuscules ; le point final est toléré.

Sont refusées comme adresses : privées (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, fc00::/7), partagées (100.64.0.0/10), de bouclage, link-local (dont 169.254.169.254), multicast et non spécifiées.

sng dns record set db --type A --target 10.0.0.12
targets[0] : 10.0.0.12 n'est pas une adresse publique

3. Modifier un enregistrement​

set est idempotent : un même couple zone + nom + type est mis à jour en place, cibles et TTL remplacés (pas ajoutés). Le message dit mis à jour au lieu de créé.

sng dns record set www --type A --target 203.0.113.20

Pour changer le nom ou le type, créez le nouvel enregistrement puis supprimez l'ancien.

4. Supprimer un enregistrement​

sng dns record delete www-a-7c2e91d4
⚠ Suppression de l'enregistrement "www-a-7c2e91d4" (tenant "acme").
Tapez « oui » pour confirmer : oui
enregistrement www-a-7c2e91d4 supprimé

L'enregistrement est retiré du DNS en quelques minutes. Depuis un script : --yes. Un enregistrement créé par sng apply se supprime avec son nom de manifeste : sng dns record delete mail ou sng kind delete DNSRecord mail.

Vérification​

sng dns record describe www-a-7c2e91d4
id: www-a-7c2e91d4
fqdn: www.acme.dev.stackngo.app
zone: acme.dev.stackngo.app (zone par défaut)
name: www
type: A
ttl: 300
targets: 203.0.113.20
ready: yes
reason: Published

ready: yes et Published : l'enregistrement est publié ; il répond en général dans la minute (dig +short www.acme.dev.stackngo.app). Les autres raisons :

reasonSignificationAction
Publishedpublié—
Conflictle nom est déjà tenu par une autre source (voir ci-dessous)libérer le nom, ou en choisir un autre
Reservednom réservé à la plateformechoisir un autre nom
ZoneNotOwnedla zone n'est pas (encore) déclarée et prouvée dans vos domaines apportés ; l'enregistrement est conservé et publié tout seul dès qu'elle l'estdéclarer la zone, ou corriger zone
ZoneNotReadyla zone est déclarée mais pas encore Provisioned ; publication automatique ensuitefinir la vérification
Invalidcible ou nom refusé (le message cite le champ)corriger, sng apply

Sans reason et avec synced: no : la plateforme n'a pas encore vu l'enregistrement. Patientez quelques minutes.

Conflits​

Un nom complet appartient à la première source qui le publie : un enregistrement, ou l'exposition d'une App. La règle, par nom :

  • deux sources du même type sont en conflit (deux TXT sur _dmarc : mettez les deux valeurs dans les targets d'un seul enregistrement) ;
  • un CNAME est exclusif : aucun autre type ne peut coexister avec lui ;
  • des types différents (A + TXT, A + MX) coexistent sans problème.

Le perdant passe Conflict (message : <nom> <type> déjà publié par …) et est retenté chaque minute : il est publié dès que le nom se libère. Une App exposée sur shop.acme.dev.stackngo.app et un DNSRecord A sur shop sont en conflit : n'écrivez pas d'enregistrement pour un nom servi par une App.

Dans votre tenant, l'API refuse aussi de déclarer deux fois le même nom et type (409 enregistrement … déjà déclaré).

Pour aller plus loin​

  • Nombre d'enregistrements : plafonné par l'offre — 20 en 3XS, 50 en 2XS, 100 en XS, 200 en M, 400 en L, 800 en XL, 1 500 en 2XL, 2 000 en 3XL.
  • Wildcard : * (tout nom de premier niveau) ou *.preview sont acceptés ; le * n'est permis qu'en tête.
  • Longueur : name jusqu'à 200 caractères, nom complet jusqu'à 253.
  • Sortie machine : --json sur set, list, describe renvoie l'objet de l'API (champs id, zone, default_zone, fqdn, ready, synced, reason, message…).
  • API : set correspond à PUT /v1/dns/records (action dns:write, ressource dnsrecord/<id>).

Voir aussi​