54 lines
2.6 KiB
Markdown
54 lines
2.6 KiB
Markdown
|
|
# client_unbound
|
||
|
|
|
||
|
|
**Résolveur local** par nœud (Unbound) : cache + récursion, avec une **stub-zone** vers
|
||
|
|
l'autoritatif interne (PowerDNS). Rend la résolution *dynamique* sans casser Internet.
|
||
|
|
Troisième et dernière couche du DNS interne (`docs/dns-interne.md`).
|
||
|
|
|
||
|
|
## Les trois couches
|
||
|
|
1. `hosts_statiques` — plancher `/etc/hosts`, toujours là, indépendant de tout service ;
|
||
|
|
2. `serveur_powerdns` — autoritatif de la zone interne ;
|
||
|
|
3. **ce rôle** — résolveur local, **opt-in**, qui rend la résolution dynamique par nœud.
|
||
|
|
|
||
|
|
## Rôle
|
||
|
|
- Installe `unbound` et `bind9-dnsutils` (`dig`, pour valider **avant** de basculer).
|
||
|
|
- Déploie `setops.conf` : écoute sur `127.0.0.1`, stub-zone vers l'autoritatif interne,
|
||
|
|
récursion (ou transitaires) pour le reste d'Internet.
|
||
|
|
- Valide la configuration (`unbound-checkconf`), active le service.
|
||
|
|
- **Bascule** `/etc/resolv.conf` vers `127.0.0.1` — protégée (voir ci-dessous).
|
||
|
|
|
||
|
|
## Garde-fou de bascule (anti-coupure)
|
||
|
|
Changer le résolveur d'un nœud à distance, c'est risquer de le rendre muet. Le rôle exige
|
||
|
|
donc **deux** interrupteurs, et vérifie avant d'agir :
|
||
|
|
|
||
|
|
```yaml
|
||
|
|
client_unbound_apply: true
|
||
|
|
client_unbound_confirm: true
|
||
|
|
```
|
||
|
|
|
||
|
|
Sans les deux, le rôle installe et démarre Unbound mais **ne touche pas** à `/etc/resolv.conf`
|
||
|
|
(refus explicite). Avec les deux, il applique d'abord les redémarrages en attente, puis
|
||
|
|
**valide qu'Unbound résout réellement** (un nom interne *et* un nom Internet) — et ne bascule
|
||
|
|
qu'ensuite. Même doctrine que la règle 4 d'`AGENTS.md` : action risquée = confirmation explicite.
|
||
|
|
|
||
|
|
## Variables
|
||
|
|
| Variable | Défaut | Rôle |
|
||
|
|
| --- | --- | --- |
|
||
|
|
| `client_unbound_ecoute` | `127.0.0.1` | Écoute (boucle locale) |
|
||
|
|
| `client_unbound_zone_interne` | `{{ domaine_interne }}` | Zone en stub |
|
||
|
|
| `client_unbound_dns_autoritatif` | dérivé du groupe `serveur_powerdns` | Cible de la stub-zone |
|
||
|
|
| `client_unbound_transitaires` | `[]` | Vide = récursion propre (racine + DNSSEC) |
|
||
|
|
| `client_unbound_apply` / `_confirm` | `false` / `false` | Bascule de `/etc/resolv.conf` |
|
||
|
|
|
||
|
|
## Flux (`meta/flux.yml`)
|
||
|
|
`53/udp` entrant en **localhost** · `53/tcp` sortant vers `serveur_powerdns`.
|
||
|
|
|
||
|
|
## Notes / limites
|
||
|
|
- Transitaires vides = Unbound **récurse lui-même** (racine + DNSSEC). Si la récursion
|
||
|
|
sortante est bloquée par le réseau, renseigner `client_unbound_transitaires`.
|
||
|
|
- Le rôle exige l'IP de l'autoritatif interne (assertion) : `serveur_powerdns` doit être
|
||
|
|
dans l'inventaire avec un `ansible_host`.
|
||
|
|
- DoT (DNS chiffré) n'est pas encore branché — c'est un des flux restants du zéro-confiance.
|
||
|
|
|
||
|
|
## Prérequis
|
||
|
|
- `serveur_powerdns` actif. Couche **agents**.
|