UPDATE : voir la version à jour pour Debian Squeeze.
J'ai choisi PowerDNS plutôt que Bind parce que sa configuration peut se faire de différentes façons. J'ai choisi d'utiliser MySQL. On désinstalle donc bind avant d'installer PowerDNS :
apt-get remove bind9
apt-get install pdns-server pdns-backend-mysql pdns-recursor
PowerDNS est découpé de deux façon différentes et indépendantes : le serveur qui permet de définir vos zones (vos sites, sous-domaines, etc...) et le recursor qui permet d'effectuer des requêtes DNS vers l'extérieur.
Configurons d'abord le serveur DNS dans /etc/powerdns/pdns.conf :
allow-axfr-ips=217.70.177.40
allow-recursion=127.0.0.1
disable-axfr=no
cache-ttl=300
launch=gmysql
logging-facility=0
out-of-zone-additional-processing=yes
query-cache-ttl=300
recursive-cache-ttl=150
recursor=127.0.0.1:54
Les paramètres avec axfr sont utilisé pour autoriser les transfert de zones vers l'IP 217.70.177.40, qui n'est autre que ns6.gandi.net, le DNS secondaire des domaines que j'utilise. De cette façon, lorsque je fait une mise à jour de mes DNS sur mon serveur, Gandi vérifie régulièrement la version de mon paramètrage et met à jour ses DNS si besoin.
On paramètre bien sûr du cache pour ne pas rappeler tout le temps les mêmes requêtes MySQL. On sélectionne le backend mysql avec le paramètre launch, active les log en précisant le logging-facility à 0 (cf plus bas) et en indiquant l'adresse du recursor. Recursor que l'on configure tout de suite dans /etc/powerdns/recursor.conf :
allow-from=127.0.0.1
local-address=127.0.0.1
local-port=54
logging-facility=1
On le lance sur le port 54, en n'autorisant les requêtes que locales et en logant les fichiers via logging-facility 1.
Mais qu'est ce que ces logging-facility ? Il s'agit en fait d'utiliser le démon rsyslog fourni avec Debian pour loggé les fichiers. Les logs seront en fait crée sous le nom localN, où N est le numéro que nous avons indiqués. Il faut donc paramétrer rsyslog pour gérer ces fichiers :
echo "local0.* /var/log/pdns.log" > /etc/rsyslog.d/pdns.conf
echo "local1.* /var/log/pdns-recursor.log" >> /etc/rsyslog.d/pdns.conf
Dans le même temps, paramétrons ces log pour ne pas qu'ils fassent une taille énorme via le proccessus des logrotate. Pour ce fait, ajouter simplement dans /etc/logrotate.d/rsyslog les lignes suivantes, juste après /var/log/messages
/var/log/pdns.log
/var/log/pdns-recursor.log
On recharge rsyslog pour être tranquille avec les logs :
/etc/init.d/rsyslog force-reload
Mais maintenant, il reste encore à paramétrer le backend MySQL pour exécuter les requêtes correctes sur le serveur. Et pour faire ça, il faut qu'une base de données soit prête pour contenir toutes les informations nécessaires. Appelons (et créons) cette base serverconf :
mysqladmin -p create serverconf
Comme le schéma de la base est assez simple, je ne vais pas le décrire ici. Vous pouvez simplement télécharger le fichier de création.
Ce fichier créé aussi l'utilisateur associé et son mot de passe. A vous de modifier... Exécutons simplement ce script :
mysql -h localhost -u root --password=MySQL serverconf < /PATH/TO/powerdns.sql
Enfin, éditons le fichier /etc/powerdns/pdns.d/pdns.local pour paramétrer la connexion et toutes les requêtes du serveur DNS :
gmysql-socket=/var/run/mysqld/mysqld.sock
gmysql-dbname=serverconf
gmysql-user=serverconfuser
gmysql-password=serverconfpass
gmysql-basic-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name='%s'
gmysql-id-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name='%s' and domain_id=%d
gmysql-any-query=select content,ttl,prio,type,domain_id,name from record where name='%s'
gmysql-any-id-query=select content,ttl,prio,type,domain_id,name from record where name='%s' and domain_id=%d
gmysql-list-query=select content,ttl,prio,type,domain_id,name from record where domain_id=%d
gmysql-master-zone-query=select master from domainDNS where name='%s' and type='SLAVE'
gmysql-info-zone-query=select domain_id AS id,name,master,last_check,notified_serial,type from domainDNS where name='%s'
gmysql-info-all-slaves-query=select domain_id AS id,name,master,last_check,type from domainDNS where type='SLAVE'
gmysql-supermaster-query=select account from supermaster where ip='%s' and nameserver='%s'
gmysql-insert-slave-query=insert into domainDNS (type,name,master,account) values('SLAVE','%s','%s','%s')
gmysql-insert-record-query=insert into record (content,ttl,prio,type,domain_id,name) values ('%s',%d,%d,'%s',%d,'%s')
gmysql-update-serial-query=update domainDNS set notified_serial=%d where id=%d
gmysql-update-lastcheck-query=update domainDNS set notified_serial=%d where id=%d
gmysql-info-all-master-query=select domain_id,name,master,last_check,notified_serial,type from domainDNS where type='MASTER'
gmysql-delete-zone-query=delete from record where domain_id=%d
gmysql-wildcard-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name like '%s'
gmysql-wildcard-id-query=select content,ttl,prio,type,domain_id,name from record where type='%s' and name like '%s' and domain_id=%d
gmysql-wildcard-any-query=select content,ttl,prio,type,domain_id,name from record where name like '%s'
gmysql-wildcard-any-id-query=select content,ttl,prio,type,domain_id,name from record where name like '%s' and domain_id=%d
Et on finit par recharger les deux démons :
/etc/init.d/pdns-recursor force-reload
/etc/init.d/pdns force-reload
Prêt pour passer au plus gros, le serveur de mail ?
Retour au sommaire.
Commentaires.
#1 par Loiseau2nuit
C'est encore moi :-)
Il m'arrive un truc bizarre là et je ne saurais trop dire à quoi c'est dû dans toute la démarche. Je m'explique :
Comme je ne gère pas les mails sur ma machine (je les sous-traite à GoogleApps for your domain") je n'ai d'une part pas installé postfix, devcot, dspam and consor, et dans ma table serverconf.record, j'ai donc remplacé le MX que tu préconises par ceux de google (yen a 5 ou 6 avec des prios bien définies.)
Jusque là tout va bien, la redirection des mails se fait bien.
En revanche, là où j'ai un problème, c'est sur les URL personnalisées d'accès au service google (ex: pour accéder aux webmails de ton domaine, à l'origine tu dois taper mail.google.com/a/ton_dom... mais tu peux si tu le souhiates mettre en place une adresse moins ésotérique du genre mail.ton_domaine.dtd/)
Pour cela, il faut en fait créer un CNAME de mail.ton_domaine.dtd vers ghs.google.com , ce que j'ai fait mais la redirection ne se fait pas vers l'interface Google MAIS vers le index.php que nous avons mis en place dans /home/var/log/ (et qui redirige donc selon tes précos, vers mon domaine principale soit www.ton_domaine.dtd)
Je me demande si ce n'est pas le record '*.ton_domaine.dtd A mon_ip_de_serveur' qui me fout la zone mais pourtant j'ai besoin de ce record pour la suite car le CMS doit permettre au client pour qui je l'installe de créer par la suite des blogs à la volée en sous domaine xyzabc.ton_domaine.dtd
Est-ce que tu vois un moyen de contourner ou adapter ce comportement ?
Merci par avance ;-)
le Vendredi 26 Mars 2010 à 16:16:00
#2 par Nyro
Essaie en remplissant le champ prio vers un nombre comme 50 pour la ligne du CNAME.
Bien sûr, n'oublie pas de vider les cache DNS du serveur, mais aussi de ta machine et/ou du routeur de la connexion...
le Vendredi 26 Mars 2010 à 16:19:16
#3 par Loiseau2nuit
>> Bien sûr, n'oublie pas de vider les cache DNS du serveur, mais aussi de ta machine et/ou du routeur de la
>> connexion...
houla... euh... pour la petit histoire, moi je suis un webdesigner qui s'est retrouvé propulsé sysadmin par accident.
Tu peux me dire comment on fait ça STP ?
En tout cas, merci pour ta réponse rapide :-)
le Vendredi 26 Mars 2010 à 16:31:17
#4 par Simon
Bonjour,
J'ai moi même un dédier personnel. J'ai dessus plusieurs sites de petites entreprises et d'autres services pour une utilisation personnel. Je suis pour l'instant sur un RPS d'ovh et d'ici un mois je vais transférer vers un kimsufi. Je suis arrivé sur votre blog fort intéressant (Mon Ascension du Mont Blanc m'a fait rêver peut être un jour je passerai par la aussi...)
Je me demandais quelles sont les raisons de vouloir installer un serveur DNS ?
C'est juste pour une résolution des noms de domaines plus rapide ? Ce gain est-il véritablement significatif ?
Pour la sécurité d'un serveur on m'a toujours dit d'installer le moins de service possible. N'est ce pas un service redondant ?
J'aurai aimé avoir votre avis merci.
Simon
le Jeudi 18 Novembre 2010 à 15:23:48
#5 par seotons
hello !
Je crains fort que tu n'ais pas le choix si tu souhaites que la résolution de noms se fasse. Pour ma part, tous mes précédents commentaires faisaient également référence à une installation sur serveur dédié RPS et rien n'y a fait, les DNS d'OVH n'ont jamais fonctionné dans mon cas.
Cependant, je dois dire que PowerDNS m'ayant donné beaucoup de fil à retordre, je suis tout prosaïquement repassé sous un bon vieux BIND dont la configuration s'est finalement avéré bien moins complexe que ce que je criagnais au départ et surtout, bien plus rapide que celle de pDNS.
Après, tout dépend des usages que l'on en fait je pense.
signé Loiseau2nuit
(je m'excuse pour le pseudo et le lien mais je suis en plein concours de référencement et avais grandement besoin d'un lien sur ce mot bizaroïde)
le Jeudi 18 Novembre 2010 à 16:46:43
#6 par cheap oakley sunglasses
When we talk about this view, i agree with your point, thanks for sharing.
www.usunglasses.com
le Samedi 26 Février 2011 à 13:53:04
#7 par cheap bracelets
Thanks a lot!your tutorial is very very usefull for me.
le Mardi 15 Mars 2011 à 10:10:02
#8 par burberry uk
je suis tout prosaïquement repassé sous un bon vieux BIND dont la configuration s'est finalement avéré bien moins complexe que ce que je criagnais au départ et surtout, bien plus rapide que celle de pDNS.
le Vendredi 15 Juillet 2011 à 11:01:26
Ajouter un commentaire.