Créer une zone DNS

  1. En utilisateur root, éditer le fichier /etc/bind/named.conf.local
  2. Ajouter une zone avec le nom de domaine comme nom de zone
    zone "progysm.com" {
            type master;
            file "/var/lib/bind/progysm.com.zone";
    };
    
    N'oublier pas les points de virgues après chaque configuration et accolade fermante '}'.
  3. Créer le fichier /var/lib/bind/progysm.com.zone à l'aide d'un gabarit (/etc/bind/db.0) par exemple.
    $TTL 3h
    @	IN	SOA	ns01.progysm.com. root.progysm.com. (
    			2010041501	; Serial
    			    24H		; Refresh
    			     2H		; Retry
    			     1W		; Expire
    			     2D )	; Negative Cache TTL
    ;
    @	IN	NS	ns01.progysm.com.
    
    @	IN	A	69.70.71.74
    *	IN	A	69.70.71.74
    
  4. ns01.progysm.com est mon nom de domaine pour mon serveur DNS, root.progysm.com est mon adresse de courriel en cas de problème. Le premier point est transformé en @. Il est primordial de toujours changer le Serial à chaque fois qu'on modifie le fichier zone. J'utilise la date du jours à 8 chiffres et 2 chiffres d'incrémentation. Il est rare qu'on met à jour 100 fois un fichier zone.
  5. La liste des enregistrements (records DNS) avec un A pointe vers des adresses IPv4. Le * signifie toutes les sous-domaines de la zone en cours. Exemple (www.progysm.com, test.progysm.com, bla.progysm.com mais pas progysm.com). Le @ correspond au nom de la zone (progysm.com).
  6. Pour vérifier le fichier de configuration: named-checkconf -v /etc/bind/named.conf
  7. Pour vérifier la zone: named-checkzone progysm.com /var/lib/bind/progysm.com.zone
  8. Pour recharger bind9: /etc/init.d/bind9 reload

Sécurité?

Il est possible de télécharger la zone DNS à partir d'un dig AXFR @serveurdns nomdomaine. Pour éviter ce problème, on peut désactiver les transferts avec une option globale. options { allow-transfer {"none";}; }; Voir XFER. J'ai placé cette option dans le fichier /etc/bind/named.conf.options et j'ai rechargé la configuration.

; <<>> DiG 9.7.0-P1 <<>> AXFR @serveurdns nomdomaine
; (1 server found)
;; global options: +cmd
; Transfer failed.

Il faut vérifier que le serveur DNS ne répondra pas à des zones générales comme google.

dig A @ns01.serveur.com www.google.com

Firewall/router

Il faut débloquer le port 53, en UDP sur son router/switch. Pour permettre le transfert de zone, il faut débloquer le port 53 en TCP.

Serveurs primaire et secondaire

Voici un exemple de serveur primaire et secondaire avec échange de zone.

Connaître les serveurs, voici une fiche technique pour mon exemple:

IP Serveur primaire (master): 192.168.2.22
IP Serveur secondaire:        192.168.2.19
Nom de domaine:               test.local
IP du nom de domaine:         192.168.2.22
Fichier du domaine:           /var/lib/bind/test.local.zone (debian) ou /var/named/test.local.zone (fedora)

Serveur primaire

  • Installer le serveur bind9 (yum install bind9, apt-get install bind9).
  • En utilisateur root, éditer le fichier /etc/bind/named.conf.local (debian) ou /etc/named/named.conf (fedora).
  • Ajouter l'ip/port d'écoute externe dans les options {};.
    listen-on port 53 { 127.0.0.1; 192.168.2.22; };
    
  • Ajouter une zone avec le nom de domaine comme nom de zone. J'utilise la zone test.local.
    zone "test.local" {
            type master;
            file "/var/lib/bind/test.local.zone"; # j'utilise /var/named/test.local.zone sur fedora
            allow-update { none; };
            allow-transfer {192.168.2.19; };
    };
    
    Sur fedora, j'ai eu une erreur lorsque l'adresse IP du allow-transfer était précédée d'une espace.
  • Créer le fichier /var/lib/bind/test.local.zone (debian) ou /var/named/test.local.zone (fedora) à l'aide d'un gabarit (/etc/bind/db.0) par exemple. N'oubliez pas de changer le serial avec la date du jour.
    $TTL 3h
    @	IN	SOA	ns01.test.local. root.local.zone. (
    			2011041201	; Serial
    			    24H		; Refresh
    			     2H		; Retry
    			     1W		; Expire
    			     2D )	; Negative Cache TTL
    ;
    @	IN	NS	ns01.test.local.
    
    @	IN	A	192.168.2.22
    *	IN	A	192.168.2.22
    
  • Vérifier la conformité des fichiers de configuration et des zones et démarrer/redémarrer le serveur avec /etc/init.d/bind9 start (démarrage debian) ou /etc/init.d/named reload (rechargement fedora)..
  • Vérifier la résolution DNS avec la commande dig @127.0.0.1 test.local
  • Note, sur Fedora, le firewall empêchait les entrées sur le port 53. J'ai dû aller dans le menu gnome Système > Administration > Pare-feu, cocher le service DNS et cliquer sur le bouton Appliquer. Il s'agit d'une interface de configuration du fichier /etc/sysconfig/iptables qui ajoute les lignes suivantes (avant la ligne -A INPUT -j REJECT) et ensuite redémarre le service iptables.
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
    -A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
    

Serveur secondaire

  • En root, éditer le fichier /etc/bind/named.conf.local (debian) ou /etc/named/named.conf (fedora).
    zone "test.local" {
            type slave;
            file "/var/lib/bind/test.local.zone"; # j'utilise /var/named/test.local.zone sur fedora
            masters { 192.168.2.22; };
    };
    
  • Vérifier que le serveur master répond bien sur le port 53 en TCP: telnet 192.168.2.22 53. Quitter telnet avec les touches CTRL+] <Entrée< et CTRL+D.
  • Démarrer ou redémarrer le serveur.
  • Vérifier que le fichier de zone a été copiée correctement dans le répertoire /var/...
  • Vérifier la résolution DNS avec la commande dig @127.0.0.1 test.local

Débogage

Utiliser named-checkconf, named-checkzone et la commande rndc.

Utiliser les logs /var/log/sysconf ou /var/log/messages pour voir les effets des commandes rndc et /etc/init.d/{bind9|named} reload.

Utiliser netstat -lntp pour voir les IPs et ports en lecture sur le serveur.

Utiliser telnet ip port pour vérifier les connexions TCP.