Enregistrements DNS
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:writepour créer ou modifier,dns:deletepour supprimer (policies géréesreadwrite,admin). Enreadonly, 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 zoneProvisionedouActive.
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 :
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
| Type | Cible (--target, répétable) | Règles |
|---|---|---|
A | adresse IPv4 | adresse publique uniquement |
AAAA | adresse IPv6 | adresse publique uniquement |
CNAME | nom d'hôte | une seule cible, jamais à l'apex (@) |
TXT | texte | 1 à 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 :
reason | Signification | Action |
|---|---|---|
Published | publié | — |
Conflict | le nom est déjà tenu par une autre source (voir ci-dessous) | libérer le nom, ou en choisir un autre |
Reserved | nom réservé à la plateforme | choisir un autre nom |
ZoneNotOwned | la 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'est | déclarer la zone, ou corriger zone |
ZoneNotReady | la zone est déclarée mais pas encore Provisioned ; publication automatique ensuite | finir la vérification |
Invalid | cible 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
TXTsur_dmarc: mettez les deux valeurs dans lestargetsd'un seul enregistrement) ; - un
CNAMEest 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 en2XS, 100 enXS, 200 enM, 400 enL, 800 enXL, 1 500 en2XL, 2 000 en3XL. - Wildcard :
*(tout nom de premier niveau) ou*.previewsont acceptés ; le*n'est permis qu'en tête. - Longueur :
namejusqu'à 200 caractères, nom complet jusqu'à 253. - Sortie machine :
--jsonsurset,list,describerenvoie l'objet de l'API (champsid,zone,default_zone,fqdn,ready,synced,reason,message…). - API :
setcorrespond àPUT /v1/dns/records(actiondns:write, ressourcednsrecord/<id>).
Voir aussi
- Votre zone par défaut
- Apporter un domaine
- Référence :
DNSRecord,sng dns record