|
|
@@ -0,0 +1,332 @@
|
|
|
+# Installation de serveur DNS sous Debian
|
|
|
+
|
|
|
+## Introduction
|
|
|
+
|
|
|
+Ceci est une procédure permettant d'installer un serveur DHCP sur une machine Debian ainsi qu'une passerelle réseau.
|
|
|
+
|
|
|
+Son nom sera: `netgateway`.
|
|
|
+
|
|
|
+Cette machine comportera :
|
|
|
+
|
|
|
+* 256 Mo de RAM
|
|
|
+* 3 Go de disque dur
|
|
|
+* 2 cartes réseau montées sur deux `vmnet` différents
|
|
|
+* aucune carte son, ni imprimante
|
|
|
+
|
|
|
+## Configuration du réseau
|
|
|
+
|
|
|
+On désigne par `vmnet` une carte réseau virtuelle.
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+Dans ce cas précis, on utilise une VM qui comporte deux cartes (et donc connectée à deux `vmnet` différents) :
|
|
|
+
|
|
|
+* une dont le réseau est le réseau externe (le nom `eth0` peut changer selon la machine).
|
|
|
+* une dont le réseau est 172.16.81.0/24 (le nom `eth1` peut changer selon la machine).
|
|
|
+
|
|
|
+Vous **devrez** sans doute **adapter les noms des interfaces**.
|
|
|
+
|
|
|
+Pour en connaître les noms réelles, utilisez:
|
|
|
+
|
|
|
+```bash
|
|
|
+ip a
|
|
|
+```
|
|
|
+
|
|
|
+**Vous devez impérativement gérer ces deux réseaux sur deux *vmnet* différents.**
|
|
|
+
|
|
|
+### Préparation obligatoire
|
|
|
+
|
|
|
+Prenez un papier et un crayon et préparez votre travail en amont afin d'éviter les erreurs.
|
|
|
+
|
|
|
+**Faites vérifier votre préparation (schémas) par le formateur.**
|
|
|
+
|
|
|
+Ceci est aussi à adapter **aux besoins** (c'est-à-dire au plan d'adressage que vous auriez mis en place)
|
|
|
+
|
|
|
+### Avertissement
|
|
|
+
|
|
|
+Toute configuration ne respectant pas ce qui précède risque de **provoquer des dysfonctionnements** sur le réseau local. Il est de votre responsabilité de configurer correctement vos cartes `vmnet`.
|
|
|
+
|
|
|
+### Configuration spécifique pour une machine avec deux cartes réseau
|
|
|
+
|
|
|
+Dans ce qui suit, vous allez devoir modifier les fichiers **en adaptant le nom de l'interface réseau** :
|
|
|
+
|
|
|
+- `eth0` doit être remplacé par `ensXX`;
|
|
|
+- `eth1` doit être remplacé par `ensYY`.
|
|
|
+
|
|
|
+#### Carte réseau eth1
|
|
|
+
|
|
|
+**Exercice**: vous allez adapter le nom de cette interface selon le nom de l'interface donné par le système d'exploitation.*
|
|
|
+
|
|
|
+**IMPORTANT: faites des sauvegardes de votre configuration ou utilisez `etckeeper`**
|
|
|
+
|
|
|
+Ecrivez un script qui édite `/etc/network/interfaces` en rajoutant les informations nécessaires, et surtout **en adaptant les identifiants des interfaces réseau.**
|
|
|
+
|
|
|
+Les paramètres suivants sont à utiliser:
|
|
|
+
|
|
|
+```
|
|
|
+INTERFACE_WAN=eth0
|
|
|
+INTERFACE_LAN=eth1
|
|
|
+LAN_IP=172.16.81.2
|
|
|
+LAN_NET=172.16.81.0
|
|
|
+LAN_MASK=255.255.255.0
|
|
|
+LAN_BROADCAST=172.16.81.255
|
|
|
+```
|
|
|
+
|
|
|
+Pour cela, utilisez l'exemple suivant:
|
|
|
+
|
|
|
+```conf
|
|
|
+# The loopback network interface
|
|
|
+auto lo
|
|
|
+iface lo inet loopback
|
|
|
+
|
|
|
+# The primary network interface
|
|
|
+allow-hotplug eth0
|
|
|
+iface eth0 inet dhcp
|
|
|
+
|
|
|
+auto eth1
|
|
|
+iface eth1 inet static
|
|
|
+ address 172.16.81.2
|
|
|
+ dns-nameservers 172.16.81.2
|
|
|
+ network 172.16.81.0
|
|
|
+ netmask 255.255.255.0
|
|
|
+ broadcast 172.16.81.255
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+Note: il n'y a pas de gateway (`eth1` n'est pas la passerelle vers Internet)
|
|
|
+
|
|
|
+On redémarre:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo systemctl restart networking
|
|
|
+```
|
|
|
+
|
|
|
+## Installation des services
|
|
|
+
|
|
|
+### Serveur DHCP
|
|
|
+
|
|
|
+#### Installation
|
|
|
+
|
|
|
+On installe `isc-dhcp`:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo apt-get install isc-dhcp-server
|
|
|
+```
|
|
|
+
|
|
|
+On fait une **copie de sauvegarde** du fichier de configuration:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo cp /etc/dhcp/dhcpd.conf /etc/dhcp/dhcpd.conf.bak
|
|
|
+```
|
|
|
+
|
|
|
+#### Interface réseau
|
|
|
+
|
|
|
+Editer le fichier `/etc/default/isc-dhcp-server`
|
|
|
+
|
|
|
+Modifier la valeur de INTERFACES:
|
|
|
+```conf
|
|
|
+INTERFACES="eth1"
|
|
|
+```
|
|
|
+
|
|
|
+#### Configuration des adresses
|
|
|
+
|
|
|
+On édite ce fichier `/etc/dhcp/dhcpd.conf`:
|
|
|
+
|
|
|
+```conf
|
|
|
+ddns-update-style none;
|
|
|
+
|
|
|
+# option definitions common to all supported networks...
|
|
|
+option domain-name "exemple.cesi";
|
|
|
+
|
|
|
+option domain-name-servers 172.16.81.2;
|
|
|
+
|
|
|
+default-lease-time 600;
|
|
|
+max-lease-time 7200;
|
|
|
+
|
|
|
+# If this DHCP server is the official DHCP server for the local
|
|
|
+# network, the authoritative directive should be uncommented.
|
|
|
+authoritative;
|
|
|
+
|
|
|
+# Use this to send dhcp log messages to a different log file (you also
|
|
|
+# have to hack syslog.conf to complete the redirection).
|
|
|
+log-facility local7;
|
|
|
+
|
|
|
+# No service will be given on this subnet, but declaring it helps the
|
|
|
+# DHCP server to understand the network topology.
|
|
|
+subnet 192.168.0.0 netmask 255.255.255.0 {
|
|
|
+}
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+On ajoute le paragraphe suivant:
|
|
|
+
|
|
|
+```conf
|
|
|
+subnet 172.16.81.0 netmask 255.255.255.0 {
|
|
|
+ authoritative;
|
|
|
+ range 172.16.81.13 172.16.81.50;
|
|
|
+ option domain-name-servers 172.16.81.2 ;
|
|
|
+ option domain-name "example.com";
|
|
|
+ option routers 172.16.81.2;
|
|
|
+ default-lease-time 3600;
|
|
|
+ max-lease-time 3600;
|
|
|
+ option subnet-mask 255.255.255.0;
|
|
|
+ option broadcast-address 172.16.81.255;
|
|
|
+
|
|
|
+}
|
|
|
+
|
|
|
+```
|
|
|
+
|
|
|
+### Ajout d'un hôte
|
|
|
+
|
|
|
+On ajoute le paragraphe suivant pour permettre à un hôte de se connecter et obtenir une adresse IP:
|
|
|
+
|
|
|
+```conf
|
|
|
+host debiantsr {
|
|
|
+ hardware ethernet 00:0c:29:be:f9:93;
|
|
|
+ fixed-address 172.16.81.11;
|
|
|
+}
|
|
|
+```
|
|
|
+
|
|
|
+#### Redémarrage du serveur
|
|
|
+
|
|
|
+Une fois le réseau redémarré et isc-dhcp configuré on peut le démarrer (ou redémarrer avec `restart`):
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo systemctl start isc-dhcp-server
|
|
|
+```
|
|
|
+
|
|
|
+#### Affichage de la liste des réservations d'adresse
|
|
|
+
|
|
|
+Le fichier `/var/lib/dhcp/dhcpd.leases` contient les réservations en cours:
|
|
|
+
|
|
|
+```bash
|
|
|
+less /var/lib/dhcp/dhcpd.leases
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+#### Journaux
|
|
|
+Les journaux permettent d'afficher les informations renvoyées par le serveur:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo journalctl -f -u isc-dhcp-server
|
|
|
+```
|
|
|
+
|
|
|
+Enlever `-f` pour un affichage normal (c'est-à-dire qui utilise la commande `less`).
|
|
|
+
|
|
|
+Le paramètre `-f` permet d'avoir le même comportement que `tail -f`
|
|
|
+
|
|
|
+### Autres outils associés
|
|
|
+
|
|
|
+Voir cette page:
|
|
|
+https://www.isc.org/community/tools/
|
|
|
+
|
|
|
+## Mise en place de la passerelle réseau
|
|
|
+
|
|
|
+### IP Forwarding
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo ne /etc/sysctl.conf
|
|
|
+```
|
|
|
+
|
|
|
+On décommente les lignes suivantes:
|
|
|
+
|
|
|
+```conf
|
|
|
+net.ipv4.ip_forward=1
|
|
|
+# ...
|
|
|
+net.ipv6.conf.all.forwarding=1
|
|
|
+```
|
|
|
+
|
|
|
+On met à jour le système par rapport à cette nouvelle configuration
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo sysctl -p
|
|
|
+```
|
|
|
+
|
|
|
+Et on vérifie que l'on obtient 1 en appelant cette commande:
|
|
|
+
|
|
|
+```bash
|
|
|
+$ cat /proc/sys/net/ipv4/ip_forward
|
|
|
+1
|
|
|
+```
|
|
|
+
|
|
|
+
|
|
|
+#### Exercice
|
|
|
+
|
|
|
+Ecrire un script qui remplace:
|
|
|
+
|
|
|
+- `net.ipv4.ip_forward=1` par `net.ipv4.ip_forward=0`
|
|
|
+- `net.ipv6.conf.all.forwarding=1` par `net.ipv6.conf.all.forwarding=1`
|
|
|
+
|
|
|
+### Règles iptables
|
|
|
+
|
|
|
+#### Définition
|
|
|
+
|
|
|
+Afin de permettre à une machine se connectant à cette passerelle d'accéder à Internet, il faut ajouter la règle suivante (n'oubliez pas d'adapter l'identifiant réseau):
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
|
|
|
+```
|
|
|
+
|
|
|
+Cependant, cette règle sera perdue au prochain redémarrage de la machine.
|
|
|
+
|
|
|
+#### Sauvegarde
|
|
|
+
|
|
|
+Pour éviter cela, on va installer un paquet qui permet de sauvegarder la configuration iptables et de la restaurer automatiquement au démarrage.
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo apt-get install iptables-persistent
|
|
|
+```
|
|
|
+
|
|
|
+Au moment de l'installation, l'installeur nous demande si nous souhaitons sauvegarder les règles. Ce qui est ici le cas.
|
|
|
+
|
|
|
+#### Sauvegarde en cas de modification
|
|
|
+
|
|
|
+
|
|
|
+Imaginons que nous effectuions un changement temporaire. Par exemple une règle de NAT qui redirige le port 80 vers le port 8080:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080
|
|
|
+```
|
|
|
+
|
|
|
+Si on veut rendre cette nouvelle règle permanente (c'est-à-dire active au prochain redémarrage de la machine), il suffit de relancer la commande suivante pour sauvegarder à nouveaux les règles iptables:
|
|
|
+
|
|
|
+```bash
|
|
|
+sudo dpkg-reconfigure -p critical iptables-persistent
|
|
|
+```
|
|
|
+
|
|
|
+#### Information complémentaire
|
|
|
+
|
|
|
+Cette dernière commande (`dpkg-reconfigure`) est l'équivalent de l'exécution des commandes suivantes:
|
|
|
+
|
|
|
+```bash
|
|
|
+ iptables-save >/etc/iptables/rules.v4
|
|
|
+ ip6tables-save >/etc/iptables/rules.v6
|
|
|
+```
|
|
|
+
|
|
|
+Au redémarrage, on a l'équivalent des commandes suivantes qui est exécuté par `iptables-persistent`
|
|
|
+
|
|
|
+```bash
|
|
|
+iptables-restore < /etc/iptables/rules.v4
|
|
|
+ip6tables-restore < /etc/iptables/rules.v6
|
|
|
+```
|
|
|
+
|
|
|
+Voir [cette réponse sur StackOverflow](https://stackoverflow.com/a/30819095/1011366)
|
|
|
+
|
|
|
+#### Effacement des règles iptables
|
|
|
+
|
|
|
+Les commandes suivantes permettent de supprimer toutes les règles iptables:
|
|
|
+
|
|
|
+```bash
|
|
|
+iptables -F
|
|
|
+iptables -t nat -F
|
|
|
+iptables -t mangle -F
|
|
|
+iptables -X
|
|
|
+```
|
|
|
+
|
|
|
+Ecrivez un script qui vérifie qu'il est lancé par `root` et qui lance ces commandes.
|
|
|
+
|
|
|
+### Tests
|
|
|
+
|
|
|
+Vous devez tester que vos machines clientes se connectent à Internet.
|
|
|
+
|
|
|
+Vous devez que vos scripts fonctionnent (par exemple qu'ils désactivent l'accès Internet puis le réactivent).
|