MyDNS et le transfert de zones
Comme son nom l'indique, MyDNS est un serveur DNS basé sur MySQL. Comme ça, à première vue, on se dit "mouais, un serveur DNS qui utilise du SQL, drôle d'idée.", mais en fait c'est véritablement très pratique pour deux raisons :

1) Il est possible de modifier les entrées DNS à l'aide de requêtes MySQL, donc à partir de scripts Perl/PHP/C. Inutile de parser un fichier de configuration, et les modifications sont prises en comptes instantanément.
2) La réplication entre serveur primaire et serveurs secondaires peut se résumer à de la simple réplication MySQL, et non plus à du transfert de zones.

L'inconvénient souvent avancé de MyDNS, c'est qu'il n'est pas récursif, comprenez que si vous l'interrogez sur un domaine qu'il ne gère pas, il ne va pas aller interroger ses petits copains mais bien vous envoyer chercher votre solution ailleurs. Passons sur le fait qu'il est quand même possible de lui indiquer un serveur récursif[1] à interroger dans ce cas de figure, ce défaut étant plutôt un avantage à mon sens.
En effet, il est recommandé depuis longtemps de ne pas faire de ses serveurs primaires et secondaires publics des serveurs récursifs, et de garder ces derniers à part. Les attaques contre les serveurs récursifs ouverts de ces derniers mois[2][3] ont contribué à la prise en compte de cette recommendantion, d'autant qu'il est souvent plus efficace de séparer physiquement les serveurs récursifs internes des serveurs publics, plutôt que de jouer avec le mécanisme complexe des vues[4] et autres divertissements. Mais bref, ceci n'est pas un cours sur la sécurité d'une architecture DNS, ce dont je serais bien incapable, et que d'autres maitrisent parfaitement[5]

Revenons au sujet ce de billet, à savoir le transfert de zones avec MyDNS.
Le transfert de zones[6] consiste à permettre à un serveur DNS, en général un serveur secondaire, à interroger le serveur primaire de ce domaine, et à lui demander la configuration DNS intégrale le concernant. C'est une opération très pratique, voire même indispensable pour effectuer une synchronisation entre serveurs. Fort heureusement, MyDNS supporte cette opération ainsi que la possiblité de limiter les adresses IP autorisées à procéder à ce transfert, nous ne voulons pas donner ce genre di'nformations à n'importe qui.
Comme le fonctionnement de MyDNS sur ce point est un peu obscur à mon goût, voici la procédure que j'ai suivie et qui semble fonctionner :

1) modifier la table soa de MyDNS de la manière décrite ici, soit pour MySQL la commande :
ALTER TABLE mydns.soa ADD COLUMN xfer CHAR(255) NOT NULL;


2) modifier le fichier de configuration de MyDNS pour activer le transfert de zone :
allow-axfr = yes


3) indiquer pour les soa (les domaines) souhaités les adresses autorisées à effectuer un transfert de zone. Pour cela, vous devez entrer une liste d'adresses séparées par des virgules (pas virgule puis espace, virgule uniquement) dans la colonne xfer nouvellement créée pour le domaine qui vous intéresse. Seules les adresses indiquées auront le droit d'effectuer le transfert. En l'absence de valeur, le transfert est interdit. Il est également possible d'utiliser le caractère * pour autoriser le monde entier, ou encore les notations CIDR ou netmask.

4) relancer MyDNS

5) tester avec la commande (par exemple)
dig axfr mondomaine.test


Voilà, c'est la fin de ce billet de geek. Merci à ceux qui sont arrivés jusqu'ici sans tricher, ou plutôt toutes mes excuses pour cette torture :)

[1] voir l'option recursive
[2] DNS Amplification attacks : http://www.isotf.org/news/DNS-Amplification-Attacks.pdf
[3] The Continuing Denial of Service Threat Posed by DNS Recursion : http://www.us-cert.gov/reading_room/DNS-recursion121605.pdf
[4] http://www.isc.org/sw/bind/arm93/Bv9ARM.ch06.html#id2562349
[5] De la sécurité d'une architecture DNS d'entreprise, MISC 23
[6] axfr
snihf
Le 18/04/2006 à 23:02:20
Fen-X
Juste pour dire que tu auras un commentaire. ^^

Ah, le lien de la note [4] est pas cliquable, aussi. Mon commentaire n'aura pas servi à rien. :)
Le 18/04/2006 à 23:10:05
snihf
Ah, bien vu. Corrigé :)
Le 18/04/2006 à 23:11:33
Fen-X
Merci snihf. :)
Le 18/04/2006 à 23:12:50
latortue
moi aussi je peux poster un commentaire sur ... heu ... bah cette "chose".
pas mal comme post ; bravo. Go on pal.
...

Le 19/04/2006 à 10:36:28
Pifi
Plus un, qui font cinq.


Le 19/04/2006 à 14:03:02
Pinku-kev
Tu aurais pas plutôt des photos coquines de ton installation à nous faire partager ? :p

plus un qui font cinq aussi vu que je donne pas plus de 1h de vie à ce commentaire :)

Le 19/04/2006 à 17:05:21
latortue
"Pinku-kev" ... que j'aime ce pseudo ...

Le 19/04/2006 à 18:31:12
bao
Je te conseillerai plutot PowerDNS si tu veux un backend SQL.
Postgres ou MySQL au choix. Tu pourrais même faire de la récursivité si tu en as envie :)

Je suis en train de le déployer en prod, il est pas mal du tout.
Le 22/04/2006 à 11:31:41
snihf
Et il apporte quelque chose par rapport à MyDNS (hormis la récursivité dont je me fiche totalement :) ) ?
Niveau performance, MyDNS tient parfaitement la route, et je n'ai pas besoin des fonctionnalités de Postgres pour un backend dédié à un serveur DNS..
Le 22/04/2006 à 12:35:39
bao
C'est au choix, déjà ne serait-que pour une question de flexibilité je prendrai le PowerDNS. Pourquoi se priver d'éventuelles possibilités de faire face à telle ou telle situation, cela pourrait toujours t'élargir le champ d'action.
Il supporte même les fichiers de conf bind au cas où.
Le 22/04/2006 à 13:55:36

A ton tour de rétorquer :

Pseudo :
Texte :
XHTML 1.1 - CSS 2 - PHP 5 - XML - XSL - MySQL
Valid XHTML 1.1! Page générée en : 0.061s Valid CSS!