:::info <center> # :book: Configuration de DNS Dynamique et Controleur de Domaine </center> ::: ## Résumé de cours > DNS = **D**omain **N**ame **S**ystem > FQDN = **F**ully **Q**ualified **D**omain **N**ame 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 : ![](https://i.imgur.com/u8VBLcC.png) - 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](https://hackmd.io/@thanush-a/config-dhcp-linux) ![](https://i.imgur.com/iDqPUO1.png) ## 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. ![](https://i.imgur.com/it9nDUr.png) - 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) ![](https://i.imgur.com/aDIQPQI.png) - Modifier le fichier /etc/dhcp/dhcpd.conf. Toute la config du serveur dhcp se trouve dans ce fichier. `nano /etc/dhcp/dhcpd.conf` ```bash= # 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` ```bash= debian.formation.local ``` - Modifier le fichier hosts `nano /etc/hosts` ```bash= 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` ```bash= multi on ``` - Modifier le fichier named.conf qui rassemble les trois autres fichiers de configuration. `nano /etc/bind/named.conf` ```bash= 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` ```bash= options { directory "/var/cache/bind"; }; ``` - Modifier le fichier named.conf.local qui est dédié à son domaine. `nano /etc/bind/named.conf.local` ```bash= 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` ```bash= # #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` ```bash= # #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` ```bash= # # 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` ![](https://i.imgur.com/rlBpBEu.png) ## 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` ![](https://i.imgur.com/fE6mIoa.png) - Nous allons lancer les mêmes commandes sur les clients. - Windows 7 `nslookup 192.168.65.200` `nslookup debian.formation.local` ![](https://i.imgur.com/payQ47j.png) - webmail (Client Debian) ![](https://i.imgur.com/q53s257.png) - Nous allons ensuite vérifier le comportement de DNS sur le fichier syslog et les fichiers de zone inversé. `tail -f /var/log/syslog` ![](https://i.imgur.com/b87ZPlq.png) `cat /var/cache/bind/db.formation.local` ![](https://i.imgur.com/E1DC2eg.png) `cat /var/cache/bind/rev.formation.local` ![](https://i.imgur.com/83O1DJX.png) ## 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` ```bash= #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` ![](https://i.imgur.com/PByGVOc.png) - Modifier ensuite le fichiers hosts `nano /etc/hosts` ```bash= 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` ```bash= debian.formation.local ``` - Modifier le fichier resolv.conf `nano /etc/resolv.conf` ```bash= 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` ```bash= #/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` ![](https://i.imgur.com/zBkfiTE.png) - 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` ```bash= #/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. ```bash= [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` ![](https://i.imgur.com/ckaNaZ9.png) ### 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 ![](https://i.imgur.com/dVS4tIo.png) - Test de la résolution des noms avec la commande nslookup ![](https://i.imgur.com/WVoiyko.png)