RSS

Serveur DNS : PowerDNS (Serveur Web sur Debian Squeeze)

12 Déc

PowerDNS MySQL

Le choix de PowerDNS par rapport à Bind est simple : avec PowerDNS, on peut configurer l’ensemble des informations dans une base données MySQL.

Donc on commencer par stopper et désinstaller bind, qui peut être là :

/etc/init.d/bind9 stop
aptitude purge bind9

Et on install PowerDNS :

aptitude install pdns-server pdns-backend-mysql pdns-recursor libnet-dns-perl

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.

Commençons par la configuration du serveur DNS dans /etc/powerdns/pdns.conf :

allow-axfr-ips=217.70.177.40 217.70.177.53 213.186.33.199
cache-ttl=300
disable-axfr=no
launch=gmysql
local-address=

local-ipv6=::0
do-ipv6-additional-processing=yes

logging-facility=0
loglevel=4
query-cache-ttl=300
recursive-cache-ttl=150
recursor=127.0.0.1:54

L’AXFR est le protocole qui permet a un éventuel secondaire de recopier les zones que vous avez configuré sur votre serveur. Dans l’exemple, je les autorise depuis les adresses IP des serveurs de gandi et OVH. On paramètre tout ce qu’il faut pour que le serveur puisse répondre en IPv6. Enfin, on log grâce au syslog N° 0, configuré plus bas.

Puis, passons au recurseur qui est plus simple, dans le fichier /etc/powerdns/recursor.conf :

allow-from=127.0.0.0/8, 10.0.0.0/8, 192.168.0.0/16, 172.16.0.0/12, ::1/128, fe80::/10
local-port=54
log-common-errors=yes
logging-facility=1
#quiet=yes

On autorise son utilise uniquement pour des adresses locales (donc le serveur lui même) sur le port 54. On log ses éléments grâce au syslog N° 1.

Pour configurer les logs correctement via syslog, editez le fichier /etc/rsyslog.d/pdns.conf pour y mettre :

local0.* /home/var/log/pdns.log
local1.* /home/var/log/pdns-recursor.log

Et comme pour le PHP-FPM précédemment, on ne veut pas gardé ces logs indéfiniment.

Donc on ajoute dans le fichier /etc/logrotate.d/rsyslog en dessous de /var/log/php-suhosin.log :

/var/log/pdns.log
/var/log/pdns-recursor.log

PowerDNS est maintenant configuré. Mais il n’au aucune entrée DNS. Pire encore, la base de données de configurations n’existe pas encore.

Commençons par créer la base de données de configuration, nommé serverconf :

mysqladmin -p create serverconf

Puis nous allons créer les tables de cette base, grâche au fichier SQL de création que voici. Vous avez un accès SFTP : utilisez-le pour transférer ce fichier ! Pensez à modifier le mot de passe et le nom d’utilisateur avant de l’exécuter. D’ailleurs, pour l’exécuter en ligne de commande :

mysql -h localhost -u root --password=MOT_DE_PASSE_ROOT_MYSQL serverconf < /path/to/serverconf.sql

Et maintenant, il faut configurer PowerDNS pour utiliser notre structure de base de données correctement. Dans le fichier /etc/powerdns/pdns.d/pdns.local :

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

Remplacer bien sûr les première ligne par ce que vous aurez utiliser précédemment.

Tout est prêt et bien configuré. On redémarre les démons modifiés :

/etc/init.d/rsyslog force-reload
/etc/init.d/pdns-recursor force-reload
/etc/init.d/pdns force-reload

Le serveur PowerDNS n’inclue pas à ma connaissance un outil permettant de notifier automatiquement un DNS secondaire d’un changement de zone. Pour palier à cela, j’ai trouver une script perl qui permet d’envoyer cette notification manuellement en ligne de commande. Vous trouverez ce script sur github. Avec la ligne d’installation plus haut, vous devrez avoir tout en place pour l’utiliser.

Publicités
 
Poster un commentaire

Publié par le décembre 12, 2012 dans Admin Linux

 

Étiquettes : , ,

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

w

Connexion à %s

 
%d blogueurs aiment cette page :