Try   HackMD

:book: Configuration de DNS Dynamique et Controleur de Domaine

Résumé de cours

DNS = Domain Name System
FQDN = Fully Qualified Domain Name

DNS permet d'établir une correspondance entre un nom d'hôte FQDN et une adresse IP pour chaque machine des différents réseaux à tous les niveaux.
L'objectif est de pouvoir manipuler des noms plutôt que des numéros pour accéder à des machines car c'est beaucoup plus pratique.
C'est un annuaire et les domaines ont une structure hiérarchique :

  • Le plus haut se trouve la racine.
  • puis on trouve les TLD (Top Level Domain) tels que : com, org, arpa, net, fr
  • en dessous on trouve les SLD (Second Level Domain). Un SLD est sous-domaine d'un domaine de premier niveau.

Architecture proposée :

Pour cela, nous allons nous basés sur le serveur DHCP et les clients que nous avons dernièrement configurés.

:link: Liens vers le cours DHCP

1. Configuration de serveur DNS Dynamique

:no_entry_sign: Il est recommandé de sauvegarder les fichiers de configuration avant les modifications, ou de bien vouloir faire un snapshot.

  • Nous allons d'abord configurer la carte réseau en NAT ou Bridged pour télécharger des paquets sur Internet et ensuite nous changerons la carte reseau en VMNet1.

  • Dans la première étape, connectez-vous à votre machine avec un compte avec des privilèges root ou directement avec l'utilisateur root et assurez-vous que votre système Debian est à jour avec les derniers correctifs de sécurité et versions de logiciels et de packages, en exécutant la commande suivante.

    apt-get update
    apt-get upgrade

  • Le paquet dnsutils fournit des outils très pratiques pour tester et débugger le service DNS. La documentation BIND9 peut également être trouvée dans le paquet bind9-doc.
    apt-get install dnsutils
    apt-get install bind9-doc

  • Modifier la carte réseau en VmNet1 (Host Only)

  • Modifier le fichier /etc/dhcp/dhcpd.conf. Toute la config du serveur dhcp se trouve dans ce fichier.
    nano /etc/dhcp/dhcpd.conf

    ​​​​# dhcpd.conf ​​​​# ​​​​# Sample configuration file for ISC dhcpd ​​​​# ​​​​# option definitions common to all supported networks... ​​​​# debut - mis en commentaire par thanush ​​​​option domain-name "formation.local"; ​​​​option domain-name-servers debian.formation.local; ​​​​# Fin - mis en commentaire par thanush ​​​​default-lease-time 600; ​​​​max-lease-time 7200; ​​​​# The ddns-updates-style parameter controls whether or not the server will ​​​​# attempt to do a DNS update when a lease is confirmed. We default to the ​​​​# behavior of the version 2 packages ('none', since DHCP v2 didn't ​​​​# have support for DDNS.) ​​​​ddns-update-style interim; ​​​​ddns-updates on; ​​​​ignore client-updates; ​​​​update-static-leases on; ​​​​allow-unknown-client; ​​​​authoritative; ​​​​log-facility local7; ​​​​subnet 192.168.65.0 netmask 255.255.255.0 { ​​​​ range 192.168.65.221 192.168.65.230; ​​​​ option domain-name-servers 192.168.65.200; ​​​​ option domain-name "formation.local"; ​​​​ option routers 192.168.65.254; ​​​​ option broadcast-address 192.168.65.255; ​​​​ default-lease-time 600; ​​​​ max-lease-time 7200; ​​​​} ​​​​# ip fixe pour ubuntu18 ​​​​host webmail { ​​​​ hardware ethernet 00:0C:29:BB:82:0F; ​​​​ fixed-address 192.168.65.230; ​​​​} ​​​​# ip fixe pour windows8.1 ​​​​host WIN-LP1H52JV14 { ​​​​ hardware ethernet 00:0c:29:75:72:12; ​​​​ deny booting; ​​​​} ​​​​zone formation.local.{ ​​​​ primary 127.0.0.1; ​​​​} ​​​​zone 65.168.192.in-addr.arpa.{ ​​​​ primary 127.0.0.1; ​​​​}
  • Modifier le fichier hostname
    nano /etc/hostname

    ​​​​debian.formation.local
  • Modifier le fichier hosts
    nano /etc/hosts

    ​​​​127.0.0.1 localhost ​​​​127.0.1.1 debian.formation.local debian ​​​​192.168.65.200 debian.formation.local debian ​​​​ ​​​​#The following lines are desirable for IPv6 capable hosts ​​​​::1 localhost ip6-localhost ip6-loopback ​​​​ff02::1 ip6-allnodes ​​​​ff02::2 ip6-allrouters
  • Modifier le fichier host.conf
    nano /etc/host.conf

    ​​​​multi on
  • Modifier le fichier named.conf qui rassemble les trois autres fichiers de configuration.
    nano /etc/bind/named.conf

    ​​​​include "/etc/bind/named.conf.options"; ​​​​include "/etc/bind/named.conf.local";
  • Modifier le fichier named.conf.options qui permet de configurer les options du serveur
    nano /etc/bind/named.conf.options

    ​​​​options { ​​​​ directory "/var/cache/bind"; ​​​​};
  • Modifier le fichier named.conf.local qui est dédié à son domaine.
    nano /etc/bind/named.conf.local

    ​​​​zone "formation.local" IN { ​​​​ type master; ​​​​ file "/var/cache/bind/db.formation.local"; ​​​​ allow-update { 127.0.0.1; }; ​​​​}; ​​​​zone "65.168.192.in-addr.arpa" IN { ​​​​ type master; ​​​​ file "/var/cache/bind/rev.formation.local"; ​​​​ allow-update { 127.0.0.1; }; ​​​​};
  • Copier les fichier db.local et db.127 et renommer comme ci-dessous
    cp /etc/bind/db.local /etc/bind/db.formation.local
    cp /etc/bind/db.127 /etc/bind/rev.formation.local

  • Modifier le fichier db.formation.local
    nano /etc/bind/db.formation.local

    ​​​​# ​​​​#BIND data file for local loopback interface ​​​​# ​​​​$TTL 604800 ​​​​@ IN SOA formation.local. debian.formation.local. ( ​​​​ 2 ; Serial ​​​​ 604800 ; Refresh ​​​​ 86400 ; Retry ​​​​ 2419200 ; Expire ​​​​ 604800 ) ; Negative Cache TTL ​​​​@ IN NS debian.formation.local. ​​​​debian IN A 192.168.65.200 ​​​​#webmail IN A 192.168.65.230 ​​​​#windows7 IN A 192.168.65.225 ​​​​#www IN CNAME webmail
  • Modifier le fichier rev.formation.local
    nano /etc/bin/rev.formation.local

    ​​​​# ​​​​#BIND reverse data file for local loopback interface ​​​​# ​​​​$TTL 604800 ​​​​@ IN SOA formation.local. debian.formation.local. ( ​​​​ 1 ; Serial ​​​​ 604800 ; Refresh ​​​​ 86400 ; Retry ​​​​ 2419200 ; Expire ​​​​ 604800 ) ; Negative Cache TTL ​​​​; ​​​​@ IN NS formation.local. ​​​​200 IN PTR debian.formation.local. ​​​​#230 IN PTR webmail.formation.local. ​​​​#225 IN PTR windows7.formation.local.
  • Copier les fichier db.local et db.127 dans le repertoire /var/cache/bind/
    cp /etc/bind/db.local /var/cache/bind/db.formation.local
    cp /etc/bind/db.127 /var/cache/bind/rev.formation.local

  • Modifier les droits de dossier bind
    chgrp bind /var/cache/bind/*
    chmod 664 /var/cache/bind/*

  • Modifier le fichier /etc/default/bind9
    nano /etc/default/bind9

    ​​​​# ​​​​# run resolvconf? ​​​​RESOLVCONF=no ​​​​# startup options for the server ​​​​OPTIONS="-u bind -4"
  • Nous allons ensuite lancer les commandes suivantes pour redémarrer le service dns.
    /etc/init.d/networking restart
    /etc/init.d/isc-dhcp-server restart
    /etc/init.d/bind9 restart

  • Vérifier avec le paramètre 'status' pour consulter les details
    systemctl status bind9

2. Intéroger le serveur DNS

  • A l'aide de la commande nslookup nous allons donc d'interroger le serveur DNS pour obtenir les informations définies dans notre domaine formation.local.

    nslookup 192.168.65.225
    nslookup windows7.formation.local

  • Nous allons lancer les mêmes commandes sur les clients.

    • Windows 7
      nslookup 192.168.65.200
      nslookup debian.formation.local

    • webmail (Client Debian)

  • Nous allons ensuite vérifier le comportement de DNS sur le fichier syslog et les fichiers de zone inversé.

    tail -f /var/log/syslog

    cat /var/cache/bind/db.formation.local

    cat /var/cache/bind/rev.formation.local

3. Configuration d'un controleur de domaine

3.1. Préparation et Installation

  • Modifier le fichier interfaces pour configurer l’ipv4 de notre serveur en ip statique.
    nano /etc/network/interfaces
#This file describes the network interfaces available on your system #and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* #The loopback network interface auto lo iface lo inet loopback auto ens33 allow-hotplug esn33 iface ens33 inet static address 192.168.65.200 netmask 255.255.255.0 gateway 192.168.65.254 dns-nameservers 192.168.65.200 8.8.8.8 dns-search formation.local
  • Redémarrer le service networking et vérifier que l’adresse IP est bien configurer.
    /etc/init.d/networking restart

  • Modifier ensuite le fichiers hosts
    nano /etc/hosts

    ​​​​127.0.0.1 localhost ​​​​127.0.1.1 debian.formation.local debian ​​​​192.168.65.200 debian.formation.local debian ​​​​#The following lines are desirable for IPv6 capable hosts ​​​​::1 localhost ip6-localhost ip6-loopback ​​​​ff02::1 ip6-allnodes ​​​​ff02::2 ip6-allrouters
  • Modifier le fichier hostname.
    nano /etc/hostname

    ​​​​debian.formation.local
  • Modifier le fichier resolv.conf
    nano /etc/resolv.conf

    ​​​​domain formation.local ​​​​search formation.local ​​​​nameserver 127.0.0.1 ​​​​nameserver 192.168.65.200
  • Installer et activer le service ntp.
    apt-get install ntp
    systemctl enable ntp

  • Editer le ficher /etc/ntp.conf et ajoutez l’adresse de votre réseau local ainsi que l’adresse de broadcast pour la diffusion du temps sur votre réseau. Avec la directive restrict, aucun autre réseau ne pourra requêter le serveur :
    nano /etc/ntp.conf

    ​​​​#/etc/ntp.conf, configuration for ntpd; see ntp.conf(5) for help ​​​​driftfile /var/lib/ntp/ntp.drift ​​​​#Leap seconds definition provided by tzdata ​​​​leapfile /usr/share/zoneinfo/leap-seconds.list ​​​​#Enable this if you want statistics to be logged. ​​​​#statsdir /var/log/ntpstats/ ​​​​statistics loopstats peerstats clockstats ​​​​filegen loopstats file loopstats type day enable ​​​​filegen peerstats file peerstats type day enable ​​​​filegen clockstats file clockstats type day enable ​​​​#You do need to talk to an NTP server or two (or three). ​​​​#server ntp.your-provider.example ​​​​#pool.ntp.org maps to about 1000 low-stratum NTP servers. Your server will ​​​​#pick a different set every time it starts up. Please consider joining the ​​​​#pool: <http://www.pool.ntp.org/join.html> ​​​​pool 0.debian.pool.ntp.org iburst ​​​​pool 1.debian.pool.ntp.org iburst ​​​​pool 2.debian.pool.ntp.org iburst ​​​​pool 3.debian.pool.ntp.org iburst ​​​​#Access control configuration; see /usr/share/doc/ntp-doc/html/accopt.html for ​​​​#details. The web page <http://support.ntp.org/bin/view/Support/AccessRestrictions> ​​​​#might also be helpful. ​​​​#Note that "restrict" applies to both servers and clients, so a configuration ​​​​#that might be intended to block requests from certain clients could also end ​​​​#up blocking replies from your own upstream servers. ​​​​#By default, exchange time with everybody, but don't allow configuration. ​​​​restrict -4 default kod notrap nomodify nopeer noquery limited ​​​​restrict -6 default kod notrap nomodify nopeer noquery limited ​​​​#Local users may interrogate the ntp server more closely. ​​​​#restrict 127.0.0.1 ​​​​#restrict ::1 ​​​​restrict 192.168.65.0 ​​​​#Needed for adding pool entries ​​​​restrict source notrap nomodify noquery ​​​​#Clients from this (example!) subnet have unlimited access, but only if ​​​​#cryptographically authenticated. ​​​​#restrict 192.168.123.0 mask 255.255.255.0 notrust ​​​​#If you want to provide time to your local subnet, change the next line. ​​​​#(Again, the address is an example only.) ​​​​#broadcast 192.168.123.255 ​​​​broadcast 192.168.65.255 ​​​​#If you want to listen to time broadcasts on your local subnet, de-comment the ​​​​#next lines. Please do this only if you trust everybody on the network! ​​​​#disable auth ​​​​#broadcastclient ​​​​#virtual environment ​​​​tinker panic 0
  • Redémarrer le service :
    /etc/init.d/ntp restart
    /etc/init.d/ntp status

  • Pour utiliser les fonctionnalités avancées de Samba4 vous avez besoin d’un système de fichiers qui prend en charge les ACL et les attributs étendus. L’option barrière=1 garantit que les transactions tdb (Tide Data Base) sont protégées contre les pertes de courant inattendues. Beaucoup ont corrompu leur base de données AD dans sam.ldb parce qu’ils n’avaient pas activé cette option.

  • Editer le fichier /etc/fstab :
    nano /etc/fstab

    ​​​​#/etc/fstab: static file system information. ​​​​#Use 'blkid' to print the universally unique identifier for a ​​​​#device; this may be used with UUID= as a more robust way to name devices ​​​​#that works even if disks are added and removed. See fstab(5). ​​​​#<file system> <mount point> <type> <options> <dump> <pass> ​​​​#/ was on /dev/sda1 during installation ​​​​UUID=6a858da6-8f51-45af-bd21-a923e76eae84 / ext4 errors=remount-ro 0 1 ​​​​# /home was on /dev/sda6 during installation ​​​​UUID=acb03080-02b3-4bf4-b084-99a4e85a9879 /home ext4 defaults 0 2 ​​​​# swap was on /dev/sda5 during installation ​​​​UUID=b85a0c39-b5be-4ed0-be74-0a516c063c1b none swap sw 0 0 ​​​​/dev/sr0 /media/cdrom0 udf,iso9660 user,noauto 0 0 ​​​​/dev/sda1 / ext4 defaults,user_xattr,acl,barrier=1 1 1
  • Redémarrer le serveur
    reboot now

  • Mettre à jour le système et installer les paquets nécessaires :

    apt-get update && apt-get upgrade

    apt-get install attr autoconf gdb bind9utils bison build-essential debhelper dnsutils docbook-xml docbook-xsl flex gdb libjansson-dev libacl1-dev libaio-dev libarchive-dev libattr1-dev libblkid-dev libbsd-dev libcap-dev libcups2-dev libgnutls28-dev libgpgme-dev libjson-perl libldap2-dev libncurses5-dev libpam0g-dev libparse-yapp-perl libpopt-dev libreadline-dev nettle-dev perl-modules-5.* pkg-config python-all-dev python-dev python-dbg python-dev python-dnspython python3-dnspython python-gpg python3-gpg python-markdown python3-markdown python3-dev xsltproc zlib1g-dev liblmdb-dev lmdb-utils docbook-xsl cups git libsasl2-dev libaio-dev libpam-dev valgrind autoconf ldap-utils krb5-user

    apt-get install samba attr winbind libpam-winbind libnss-winbind libpam-krb5 krb5-config libgssrpc4 libkadm5clnt-mit11 libkadm5srv-mit11 libkdb5-* libldb1 libtalloc2 libtdb1 libtevent0 libwbclient0 python-ldb python-samba python-talloc python-tdb samba-common samba-common-bin samba-dsdb-modules samba-libs samba-vfs-modules tdb-tools krb5-doc ldbtools smbldap-tools ufw -y

  • Vous allez être interrogé par kerberos sur

    • le royaume : formation.local

    • Serveur Kerberos du rayaume : debian

    • Serveur administratif : debian

  • Exécuter la commande qui va promouvoir le serveur en contrôleur de domaine.

    • Déplacer d'abord le fichier smb.conf
      mv /etc/samba/smb.conf /tmp/
    • Lancer la commande de promotion, appuyer sur Entrée et saisir le Mot de Passe P@ssword01 qui respecte les exigences de Windows Server.

3.2. Fichier krb5.conf

  • Une fois l’opération terminée, on va remplacer le fichier krb5.conf d’origine par celui généré par samba-tool. D’abord, on renomme l’ancien fichier :
    mv /etc/krb5.conf /etc/krb5.conf.old

  • Puis on copie celui généré par samba-tool. Son emplacement et affiché dans le résultat de la commande de promotion. Dans mon cas il se trouve ici :
    cp /var/lib/samba/private/krb5.conf /etc/

  • Vérifier le fichier krb5.conf et l'adapter avec vos paramètres.

    ​​​​[libdefaults] ​​​​default_realm = FORMATION.LOCAL ​​​​dns_lookup_realm = false ​​​​dns_lookup_kdc = true ​​​​kdc_timesync = 1 ​​​​ccache_type = 4 ​​​​forwardable = true ​​​​proxiable = true ​​​​fcc-mit-ticketflags = true ​​​​[realms] ​​​​FORMATION.LOCAL = { ​​​​kdc = debian.formation.local ​​​​admin_server = debian.formation.local ​​​​default_domain = formation.local ​​​​database_module = ldapconf ​​​​} ​​​​[domain_realm] ​​​​.formation.local = FORMATION.LOCAL ​​​​formation.local = FORMATION.LOCAL

3.3. Paramètres DNS

  • On va maintenant vérifier le redirecteur DNS qui s’est configuré dans le fichier smb.conf. C’est l’outil samba-tool qui l’a configuré automatiquement. On va donc voir si cela s’est bien produit. Si ce n’est pas le cas, on entrera l’adresse du bon redirecteur DNS. De mon côté, le redirecteur est le DNS de mon FAI.
    cat /etc/samba/smb.conf

3.4. Gérer le service samba

  • démarrer manuellement les services Samba AD en tapant simplement :
    samba

  • Pour automatiser le démarrage des services au démarrage du système :
    systemctl unmask samba-ad-dc

  • Puis :
    systemctl enable samba-ad-dc

  • Après ces nombreuses manipulations, redémarrons le serveur :
    reboot

  • Créer la zone DNS de recherche inversée (PTR) :
    samba-tool dns zonecreate 192.168.65.200 65.168.192.in-addr.arpa -U administrator

  • Test d’authentification Kerberos, Entrer la commande suivante et le mot de passe du compte administrator devrait être demandé : ( mot de passe choisi est P@ssword01)
    kinit administrator

3.5. Configuration du poste d’administration Windows 10 Pro

  • Sur le client Windows 10 afin de configurer son réseau, le serveur de temps, installer les outils RSAT et l’intégrer au domaine. Ce sera donc un poste qui permettra l’administration du serveur avec des outils graphiques.

  • Loguez-vous en administrateur local pour faire les opérations suivante.

  • Pensez à lui donner un nom distinctif, par exemple CLI01-WIN.

  • On intègre maintenant le Windows 10 dans le domaine formation.local

  • Test de la résolution des noms avec la commande nslookup