Aujourd'hui notre monde informatique fonctionne quasi à *100%* en API.
Les serveurs DNS n'en font pas exception, par exemple avec PowerDNS sans surprise
il éxiste une API mais explorons ce qui marche très bien depuis des années : **DNSUpdate**
avec sa petite RFC[2136](https://datatracker.ietf.org/doc/html/rfc2136.html).
## DynDNS
En 2022 beaucoup d'ISP ne fournissent pas d'*IPv4* ou *IPv6* fixe. Elle change donc régulièrement au gré d'une coupure éléctrique ou plus de votre opérateur.
Il éxiste beaucoup de service en ligne pour faire ce travail via une API, peut-être même votre registrar.
Mais quand on héberge soit même son DNS il y a plus simple avec l'utilisation de **nsupdate** bien souvent déjà installé sur votre machine dès que vous avez besoin de creuser la question (*dig*). Sinon il est présent par exemple via le paquet *bind9-dnsutils* sous debian.
On va donc faire un tout petit script qui va obtenir son ipv4 et sa v6 public et les mettres à jours, ici sur le serveur **dnsupdate.verry.org** :
```bash
DOMAIN="verry.org"
HOST="raoul.verry.org"
ORIG_IPv4=$(dig +short a $HOST @dnsupdate.verry.org)
Un second cas d'usage que j'utilise est l'obtention de certificat let's encrypt via un challenge DNS. Mon [ACME](https://datatracker.ietf.org/doc/html/rfc8738) à moi est encore une fois quelque chose de simple mais de robuste : [dehydrated](https://github.com/dehydrated-io/dehydrated)
Avec dehydrated il est possible de faire un hook dans la config `HOOK=/etc/dehydrated/hook/hook.sh`.
Ce script fait appel à deux fonctions qui nous interesse `deploy_challenge()` :
On peut finement autorisé domaine par domaine le droit que nous allons mettre sur cette clé, par exemple le droit de faire des modifications dans la zone (dnsupdate) ou de transférer cette zone (axfr).
```
pdnsutil show-zone verry.org
```
côté metadata on peut voir:
```
Zone has following allowed TSIG key(s): tsig.verry.org
Metadata items:
TSIG-ALLOW-AXFR tsig.verry.org
TSIG-ALLOW-DNSUPDATE tsig.verry.org
```
### DNSUpdate
Ajoutons l'autorisation de faire des *dnsupdate* en whitelistant une IP.