# serveur_dns_public > **Pour qui :** l'hébergeur qui publie les noms de ses locataires sur Internet. **Le serveur DNS public du site.** Il est **secondaire** de toutes les zones publiques des locataires qu'il héberge. Il ne porte aucune donnée à lui : le locataire écrit sa zone, le site la sert. ## Le locataire écrit, le site sert ``` LOCATAIRE infra-dns-01 primaire caché de chezlepro.ca ─┐ NOTIFY (autorite: primaire-cache) │ AXFR signé TSIG, tiré par le site SITE site-dnspub-01 secondaire public ◄──────────────┘ ``` - **Le primaire reste chez le locataire.** Quand il part, il emporte sa zone, et le site n'a qu'à cesser d'être secondaire. Écrire les zones au site ferait de l'hébergeur la source des données du client. - **La liste des zones se dérive** de tous les locataires du site, dans `scripts/site_inventaire.py`. Jamais une liste tenue à la main. - **Uniquement `autorite: primaire-cache`.** Le rôle refuse une zone `.internal` : ce serveur répond à Internet. ## Ce que l'épreuve de l'outil a appris (2026-09-16, PowerDNS 4.9.17) Deux instances jetables, sept vérifications, avant d'écrire une ligne de ce rôle. | Constat | Ce que le rôle en fait | |---|---| | **`allow-axfr-ips` et TSIG sont alternatifs, pas cumulatifs** : une adresse listée obtient la zone *sans signature* | le primaire n'autorise **aucune** adresse ; seule la clé ouvre le transfert | | `allow-axfr-ips` autorise la boucle locale **par défaut** | un test négatif depuis la boucle locale n'en est pas un | | le backend `bind` seul ne stocke **aucune** métadonnée | `bind-dnssec-db` porte les clés TSIG | | la syntaxe exige `masters { ip:port; };` | sans accolades, **tout** le fichier est refusé | | le primaire notifie **aussi les adresses de ses NS** | le primaire restreint ses notifications au seul serveur public du site | ## Durcissement - **Secondaire seulement** : `secondary=yes`, `primary=no`. - **Aucun transfert sortant** en phase 1 (`disable-axfr=yes`). La réplication vers le site pair passera par le tunnel WireGuard, plus tard. - **Notifications acceptées des seuls primaires déclarés.** - **`version-string=anonymous`** : la version est la première chose qu'un balayage demande. - **`security-poll-suffix=`** vide : PowerDNS interroge par défaut un domaine de l'éditeur à chaque démarrage. Un serveur souverain n'appelle pas un tiers. - **Pas de récursion** : PowerDNS Authoritative ne récurse pas — vérifié, il répond `REFUSED`. ## Ce que la phase 1 n'expose pas **Aucun flux depuis Internet.** Le port 53 public viendra en phase 2, par la redirection de la frontière — et seulement après DNSSEC signé chez le locataire, CAA, et la limitation de débit des réponses. Le déclarer aujourd'hui dans `meta/flux.yml` ferait émettre au devis une règle sur le WAN que personne n'aurait décidée.