Pour mettre au point une première version de notre miniLAB, nous allons faire évoluer la situation finale du TP consacré au routage sous Linux :
Voici le schéma actuel :

Et voici le schéma de ce nous voulons obtenir :

Première étape, nous allons installer un environnement de bureau (xfce4) sur la machine debianB. Il faut tout d'abord la connecter à internet (par une connexion NAT) :

Une fois démarrée, on configure son interface réseau en DHCP :
sudo nano /etc/network/interfaces
Contenu du fichier (ici l'interface est enp0s3) :
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
allow-hotplug enp0s3
iface enp0s3 inet dhcp
On applique les modifications :
sudo systemctl restart networking
Et on installe l'environnement xfce4 et on redémarre :
sudo apt update
sudo apt upgrade
sudo apt install xfce4
sudo reboot
Pour finaliser complètement l'environnement GUI, utilisez les instructions ici : https://wiki.pminfo.fr/debian-gui-sous-virtualbox, à partir de installation des pilotes (guest additions).
On installe le client ssh :
sudo apt install openssh-client
On la reconnecte sur un réseau interne LAN :

Puis, temporairement, on va fixer son adresse IP sur 192.168.1.200 (lignes 3 et 4), en ajoutant également la future passerelle miniBox (ligne 5) :
sudo nano /etc/network/interfaces
Contenu du fichier :
...
allow-hotplug enp0s3
iface enp0s3 inet static
address 192.168.1.200/24
gateway 192.168.1.1
Occupons-nous maintenant de notre routeur miniBox, tout d'abord en reconnectant les interfaces réseau :


Après avoir démarrée la VM, on va configurer ces interfaces dans le système :
192.168.1.1/24sudo nano /etc/network/interfaces
Attention aux noms des interfaces qui peuvent varier selon votre contexte. Ci-dessous nous aurons
enp0s3pour le WAN etenp0s8pour le LAN.
Contenu du fichier :
source /etc/network/interfaces.d/*
# The loopback network interface
auto lo
iface lo inet loopback
# LAN
allow-hotplug enp0s8
iface enp0s8 inet static
address 192.168.1.1/24
# WAN
allow-hotplug enp0s3
iface enp0s3 inet dhcp
On commence par l'interface LAN (statique) puis la WAN (dhcp). Pourquoi ? si le bail DHCP pour WAN tarde à arriver, le service kea-dhcp que l'on met en place ensuite va se lancer alors que l'interface LAN ne sera pas encore up, et le service ne fonctionnera pas. Il faut donc configurer le LAN avant le WAN.
On relance le système :
sudo reboot
On vérifie les IP des interfaces :
ip a

Vérifiez que la VM accède correctement à internet, puis installez le serveur ssh :
ping -c3 debian.org
sudo apt install openssh-server
Il doit être possible maintenant d'accéder par SSH sur debianX depuis debianB :

Le routage sur cette machine a déjà été activé lors du précédent TP.
Cet outil va nous permettre de configurer le pare-feu de notre miniBox, pour mettre en place des règles de filtrage et de NAT.
Pour le moment, nous n'abordons pas le fonctionnement d'iptables. Nous mettons en place une configuration simple et minimale pour que la miniBox assure son service.
sudo apt install iptables
# effacement des règles (préventif, car inutile sur une machine "neuve")
sudo iptables -F
sudo iptables -t nat -F
sudo iptables -t mangle -F
## Supprime les chaînes personnalisées (idem)
sudo iptables -X
## Remet à zéro les compteurs (idem)
sudo iptables -Z
## Politiques par défaut permissives
sudo iptables -P INPUT ACCEPT
sudo iptables -P OUTPUT ACCEPT
sudo iptables -P FORWARD ACCEPT
Cette règle de Source NAT assure la fonction de masquerading, qui permet de "partager" l'adresse IP WAN unique (sur enp0s3) avec plusieurs IP du réseau 192.168.1.0/24 :
sudo iptables -t nat -A POSTROUTING -o enp0s3 -s 192.168.1.0/24 -j MASQUERADE
Pour rendre persistantes les règles.
sudo apt install iptables-persistent
répondre Oui pour enregistrer les règles actuelles pour IPv4.
A ce stade, la machine debianB accède à internet via debianX :
# depuis debianB
traceroute 1.1.1.1
1 192.168.1.1 (192.168.1.1) 0.905 ms 0.784 ms 0.721 ms
2 10.0.2.2 (10.0.2.2) 1.454 ms 1.366 ms 1.308 ms
...
9 141.101.67.125 (141.101.67.125) 30.520 ms 141.101.67.115 (141.101.67.115) 16.092 ms 141.101.67.69 (141.101.67.69) 16.003 ms
10 1.1.1.1 (1.1.1.1) 13.757 ms 13.972 ms 13.917 ms
Maintenant que le routage est en place, ajoutons un service bien utile sur le LAN, un serveur DHCP ; nous utiliserons kea, le remplaçant de l'historique ISC, désormais déprecié.
On installe le service (attention, on est de retour sur debianX) :
sudo apt update
sudo apt install kea-dhcp4-server
sudo mv /etc/kea/kea-dhcp4.conf /etc/kea/kea-dhcp4.conf.old
sudo nano /etc/kea/kea-dhcp4.conf
Le fichier de configuration kea-dhcp4.conf
192.168.1.0/24enp0s8192.168.1.100 et 192.168.1.1991.1.1.1 et 1.0.0.1 (CloudFlare)Copier cette configuration au format JSON :
{
"Dhcp4": {
"interfaces-config": {
"interfaces": [ "enp0s8" ]
},
"lease-database": {
"type": "memfile",
"lfc-interval": 3600
},
"expired-leases-processing": {
"reclaim-timer-wait-time": 10,
"flush-reclaimed-timer-wait-time": 25,
"hold-reclaimed-time": 3600,
"max-reclaim-leases": 100,
"max-reclaim-time": 250,
"unwarned-reclaim-cycles": 5
},
"renew-timer": 900,
"rebind-timer": 1800,
"valid-lifetime": 3600,
"option-data": [
{
"name": "domain-name-servers",
"data": "1.1.1.1, 1.0.0.1"
}
],
"subnet4": [
{
"id": 1,
"subnet": "192.168.1.0/24",
"pools": [ { "pool": "192.168.1.100 - 192.168.1.199" } ],
"option-data": [
{
"name": "routers",
"data": "192.168.1.1"
}
]
}
],
"loggers": [
{
"name": "kea-dhcp4",
"output_options": [
{
"output": "/var/log/kea/kea-dhcp4.log"
}
],
"severity": "INFO",
"debuglevel": 0
}
]
}
}
On relance le service :
sudo systemctl restart kea-dhcp4-server
sudo systemctl status kea-dhcp4-server
Pour vérifier le fonctionnement, nous allons reconfigurer l'interface réseau de debianB pour la passer de nouveau en dhcp :
# sur debianB :
sudo nano /etc/network/interfaces
avec :
...
allow-hotplug enp0s3
iface enp0s3 inet dhcp
Il peut arriver que le service kea se lance trop tôt, avant que l'interface LAN soit active. Dans ce cas, le service semble correct (systemctl status kea-dhcp4-server), mais aucun bail dhcp n'est donnée. On va donc retarder le lancement du service :
systemctl edit kea-dhcp4-server
Ajouter ceci entre les lignes indiquées (### Anything between... et ### Edits below...) :
[Service]
# On attend 10 secondes avant de lancer le programme
ExecStartPre=/usr/bin/sleep 10
Il reste un petit warning (une info en fait) sur le statut du service sudo systemctl status kea-dhcp4-server ; pour le faire disparaître on peut faire ce qui est proposé par le message (mais ce n'est pas nécessaire, car moins restrictif en réalité) :
sudo chmod 755 /etc/kea/
En cas de pépin, vérifier notamment les droits sur les logs :
mkdir -p /var/log/kea
# donner les droits à l'utilisateur Kea sur ce dossier :
chown _kea:root /var/log/kea
chmod 750 /var/log/kea
Si on veut exposer un service depuis le WAN, par exemple tcp/80 sur l'IP 192.168.1.40 :
sudo iptables -t nat -A PREROUTING -i enp0s3 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.40:80
On sauvegarde les modifications :
sudo netfilter-persistent save
Un autre service que l'on peut mettre en place est le DNS, si on veut notamment centraliser certaines résolutions de noms au sein du miniLab. Mais sans ce besoin, il n'est pas utile d'ajouter le service.
En cas d'installation du service, il faut alors modifier le serveur DNS dans la configuration DHCP (voir à la fin)
sudo apt update
sudo apt install bind9 bind9utils
sudo nano /etc/bind/named.conf.options
Le fichier de configuration (format JSON) :
options {
directory "/var/cache/bind";
// Écouter sur l'interface réseau local uniquement
listen-on { 127.0.0.1; 192.168.1.1; };
listen-on-v6 { none; };
// Permettre les requêtes uniquement du réseau local
allow-query { localhost; 192.168.1.0/24; };
// Configurer les redirecteurs (forwarders)
forwarders {
1.1.1.1;
1.0.0.1;
};
// Activer la récursion pour le réseau local
recursion yes;
allow-recursion { localhost; 192.168.1.0/24; };
// Sécurité et performance
dnssec-validation auto;
auth-nxdomain no;
version none;
};
named.conf.localOuvrez le fichier /etc/bind/named.conf.local et ajoute la définition de votre domaine local (appelons-le par exemple monreseau.local) :
DNS Zone file
zone "monreseau.local" {
type master;
file "/etc/bind/db.monreseau.local";
};
Créez maintenant le fichier /etc/bind/db.monreseau.local (on peut copier le modèle db.local pour gagner du temps) et configurez-le comme ceci :
DNS Zone file
$TTL 604800
@ IN SOA ns1.monreseau.local. admin.monreseau.local. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns1.monreseau.local.
ns1 IN A 192.168.1.1
; Exemple d'une résolution spécifique
serveurweb IN A 192.168.1.40
named-checkconf # ne doit rien renvoyer si c'est OK
named-checkzone monreseau.local /etc/bind/db.monreseau.local
sudo systemctl restart bind9
On modifie en conséquence notre serveur DHCP pour prendre en compte ce nouveau service DNS local :
sudo nano /etc/kea/kea-dhcp4.conf
Modifier cette section :
"option-data": [
{
"name": "domain-name-servers",
"data": "192.168.1.1"
}
]
Puis on relance les services :
sudo systemctl restart bind9
sudo systemctl restart kea-dhcp4-server
sudo systemctl status bind9
sudo systemctl status kea-dhcp4-server