Les bases de l'informatique

Infrastructure mars 12, 2020

Le domaine informatique est un domaine d'expertise.
Tout comme la conception des bâtiments, la conception de véhicules, il faut avoir une idée de ce que l'on veut faire. Puis, dans un second temps, il faut prototyper son système.
Dans cette série d'articles, je vous propose de créer un prototype de système informatique pas à pas.

Conception

Dans cette première phase de conception, nous allons avoir besoin de matériels. Ce matériel devra être inter-connectés. Pour commencer simplement, je vous propose d'opter pour une première machine qui fera office de serveur et une seconde qui fera office de client.

Un architecte de bâtiments ou constructeur de véhicules commence sur une maquette, et bien je vous propose de faire de même ici. Pourquoi dépenser de l'argent alors que nous ne sommes pas certain de notre architecture !

Pour maquetter notre système informatique, je vous propose d'utiliser GNS3. Il suffit de s'inscrire pour récupérer l’exécutable et de l'installer avec les options par défaut. Attention, ce logiciel est très sensible. Je rentrerai dans les détails de son installation prochainement. Ce n'est pas le seul logiciel qu'il va nous falloir, nous aurons besoin de VirtualBox. Là encore, je ne rentre pas dans les détails pour le moment, je vous laisse chercher un peu ;)

Première étape

Je vous laisse seul installer un client. Je vous propose de commencer par installer une machine virtuelle sous Linux avec la distribution Peppermint (attention lors de la rédaction, le certificat de sécurité de ce site était expiré. Il s'agit pourtant du site officiel...), elle est simple, légère et efficace.

Seconde étape

Je vous laisse seul installer un serveur. Je vous propose également une distribution : Debian (sans interface graphique).

Troisième étape

Ensuite, je vous propose d'intégrer les machines virtuelles sous VirtualBox à GNS3.

Pour cela, sous GNS3, ouvrir le panneau de gauche avec tous les équipements disponible et sélectionner l'ajout d'un modèle (template) :

intégrer une VM VirtualBox sous GNS3
import d'une machine virtuelle sous Virtualbox

Ici, il faut choisir un modèle manuel, puis se rendre dans la partie VirtualBox VM et choisir nouveau (New), la liste de vos machines précédemment installées va s'afficher dans un menu déroulant. Il vous faudra choisir le nom de votre machine et valider, comme suit :

intégrer une VM VirtualBox sous GNS3
Intégration d'une machine virtualbox sous GNS3

Ensuite, il faudra éditer ce modèle et se rendre dans la partie réseau (onglet Network) pour cocher la case "Allow GNS3 to use any configured network adapter", puis valider et quitter l'assistant. Cette étape est à renouveler deux fois pour chacune des deux machines.

Une fois que c'est fait, vous allez pouvoir choisir vos équipements dans la liste du menu gauche de GNS3 :

intégrer une VM VirtualBox sous GNS3
GNS3 avec une machine virtuelle intégrée

Vous allez maintenant pouvoir créer un projet (si ce n'est pas déjà fait) et glisser vos équipements sur l'espace de travail. En faisant un clic droit sur l'objet et en sélectionnant "start" vous allez pouvoir démarrer votre VM dans GNS3.

Enfin, vous allez pouvoir récupérer les adresses MAC des interfaces (ainsi que leur nom) et annoté ces informations sur le projet, vous devriez avoir le résultat suivant :

intégrer une VM VirtualBox sous GNS3
Deux objets VirtualBox dans GNS3

Il vous faut maintenant connecter ces deux équipements. Pour cela vous allez pouvoir utiliser le commutateur simple de GNS3 (ethernet switch) et sélectionner un port du commutateur avec l'outil câblage puis sélectionner le port de chaque équipement :

intégrer une VM VirtualBox sous GNS3
Architecture simple

Adressage logique

Maintenant, vous voulez que vos deux équipements échangent des données. Pour cela, il faut mettre en place un adressage IP.

La plupart des services réseaux utilise ce protocole pour acheminer les messages d'un hôte à un autre. La première question à se poser est : Comment adresser mes équipements de façon efficace ?

Pour cela, il est possible de faire comme tout le monde et choisir un plan d'adressage issue de la RFC 1918 régissant les adresses IPv4 (nous reparlerons d'IPv6 plus tard) tel que 192.168.1.0/24. Puis de proposer l'adresse .1 pour le serveur et l'adresse .2 pour le client.

En configurant cela (et juste cela) la communication est possible avec par exemple l'outil de test de connectivité "ping" :

test de connectivité
Ping vers l'adresse IP du serveur

Le problème de cette méthode est qu'elle n'est pas efficace car n'importe qui pourrait connecter un équipement sur le réseau et avoir accès à tous les services qui y sont disponible. Pas top d'un point de vue de la sécurité de l'accès au réseau et donc aux données...

De plus, lorsqu'il y aura de nombreuses machines, il sera compliqué de se rappeler des adresses utilisées. Je vous propose donc de mettre en œuvre deux services réseaux essentiels : DHCP et DNS.

Dans un premier temps, je vous propose temporairement d'ajouter un accès internet sur le serveur. Pour cela, il faut ajouter une deuxième interface réseau via l'objet NAT.

topologie avec internet
Projet avec le NAT pour l'accès Internet

DHCP

DHCP est le protocole qui permet de configurer automatiquement et dynamiquement les hôtes d'un réseau. Il va nous permettre de ne plus avoir besoin de configurer manuellement les adresses sur notre réseau. Pour cela, il faut concevoir un plan d'adressage qui permette à deux machines de communiquer : 192.168.1.0/30 par exemple.

Nous allons installer isc-dhcp-server, via la commande d'installation suivante :

sudo apt install isc-dhcp-server

Ce service dhcp est le plus connu sous linux. Il se configure via deux fichiers. Le premier /etc/dhcp/dhcpd.conf permet de définir la distribution des adresses :

default-lease-time 600;
max-lease-time 7200;
authoritative;
log-facility local7;
deny unknown-clients;

subnet 192.168.1.0 netmask 255.255.255.252 {
    host client {
    hardware ethernet 08:00:27:b1:48:14;
    fixed-address 192.168.1.2;
    }
}

Et le second dans lequel on va spécifier l'interface d’écoute de ce service dans le fichier /etc/default/isc-dhcp-server avec la valeurs interfacev4 à enp0s3 (dans mon cas).

Comme les interfaces peuvent changer de nom, je vous propose de les ajouter au schéma sur le projet :

architecture avec dhcp et internet
Proet avec les noms des interfaces

DNS

DNS est le protocole qui permet de ne plus utiliser les adresses IP mais des noms tel que client ou serveur. Pour cela, il faut installer l'application bind9 sur le serveur. Le paquet pour linux se nomme bind9 et comme pour le dhcp, il y a deux fichiers à configurer pour que le service fonctionne.
La commande pour l'installation est la suivante :

sudo apt install bind9

Le premier fichier est /etc/bind/named.conf.options, il gère les options générales du service dns dans lequel nous allons juste configurer l'écoute sur l'adresse IP de notre serveur via la commande directive suivante :

listen-on { 127.0.0.1; 192.168.1.1; };

Ensuite il faut définir les zones de nommages dans le fichier /etc/bind/named.conf.local :

zone "local.test" {
    type master;
    file "/var/cache/bind/db.local.test";
    };

zone "1.168.192.in-addr.arpa" {
    type master;
    file "/var/cache/bind/1.168.192.in-addr.arpa"; 
    };

Enfin, le fichier de zone directe /var/cache/bind/db.local.test permet de définir la zone principale de notre domaine local (à ne pas confondre avec un domaine public bien que ce soit le même principe). Il doit être formaté comme suit :

$TTL    3600 
@       IN      SOA     ns1.local.test. root.local.test. (
                2020022401; Serial
                3600; Refresh [1h]
                600; Retry   [10m]
                86400; Expire  [1d]
                600 ); Negative Cache TTL [1h]
;
@       IN      NS      ns1.local.test.
serveur IN      A       192.168.1.1
client  IN      A       192.168.1.2

Le second fichier permet d'avoir une résolution ip vers nom /var/cache/bind/1.168.192.in-addr.arpa comme suit :

@ IN SOA        ns1.local.test. root.local.test. (
                2020022401; Serial
                3600; Refresh [1h]
                600; Retry   [10m]
                86400; Expire  [1d]
                600); Negative Cache TTL [1h]
;
@       IN      NS      ns1.local.test.
1       IN      PTR     ns1.local.test.
2       IN      PTR     client.local.test.

Enfin il suffit de tester la configuration avec la commande named-checkconf -z, si tout est ok vous devriez avoir la réponse suivante :

#named-checkconf -z
zone local.test/IN: loaded serial 20200224
zone 1.168.192.in-addr.arpa/IN: loaded serial 20200224
zone 127.in-addr.arpa/IN: loaded serial 1
zone 0.in-addr.arpa/IN: loaded serial 1
zone 255.in-addr.arpa/IN: loaded serial 1

Il ne reste qu'à modifier notre DHCP pour qu'il informe le client des ces changements via l'ajout des directives suivantes :

option domain-name-servers 192.168.1.1;
option domain-name "local.test";

et redémarrer les services isc-dhcp-server et bind9.

Lors du démarrage de notre client nous seront ainsi à même d'utiliser serveur ou ns1 comme nom au lieu de l'IP, idem côté serveur qui sera capable de trouver l'adresse ip du nom client. Par exemple en exécutant la commande ping serveur qui donnera alors le résultat suivant :

PING serveur.local.test (192.168.1.1) 56(84) bytes of data.
64 bytes from ns1.local.test (192.168.1.1): icmp_seq=1 ttl=64 time=1.01ms
^C
--- serveur.local.test ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 1.011/1.011/1.011/0.000 ms

Voilà qui est intéressant, plus besoin de retenir les noms de nos équipements tant que les fichiers suivants sont mis à jours :

  • /var/cache/bind/db.local.test
  • /var/cache/bind/1.168.192.in-addr.arpa

Conclusion

Avec un petit changement de symbole, votre architecture ressemble plus à ce qu'elle devrait être. D'une façon générale, vous disposez d'une box qui doit donc être matérialisée sur le schéma. Cette box est le point d'entrée sur le réseau de votre opérateur. Elle fournit un accès à différents services et propose généralement quelques services réseaux (comme c'est le cas ici).

Projet complet avec la représentation de la box

Hormis ce changement sur le schéma, je ne vais pas entrer dans le détail de son fonctionnement pour l'instant.

Vous disposez à présent d'un petit réseau fonctionnel qu'il ne reste plus qu'à agrémenter de services tel que le partage de fichiers ou l'installation d'applications métiers.

Pour cela, rendez-vous dans la suite de cette série d'articles, dans les semaines à venir.