R3.06/td1-milxc.md
Francois Lesueur aca6f75dca td1
2022-11-02 12:00:57 +01:00

14 KiB

TD1 + TD2 Découverte MI-LXC/SNSTER (3h, 2 séances)

Ce TP sera réalisé dans la VM MI-LXC/SNSTER disponible ici. Avant de lancer la VM, il peut être nécessaire de diminuer la RAM allouée. Par défaut, la VM a 3GO : si vous avez 4GO sur votre machine physique, il vaut mieux diminuer à 2GO, voire 1.5GO pour la VM (la VM devrait fonctionner de manière correcte toujours).

Pour vous connecter à la VM, utilisez le compte root avec le mot de passe root.

MI-LXC simule un internet minimaliste que nous utiliserons tout au long de la matière. Ce TD couvre la découverte de l'environnement existant et les premiers éléments qui seront nécessaires pour l'étendre par la suite.

Pour les curieux, le code de MI-LXC, qui sert à générer cette VM automatiquement, est disponible avec une procédure d'installation documentée ici. Attention, nous utilisons ici la branche SNSTER de MI-LXC, qui utilise le framework SNSTER en cours de mise au point.

La VM peut être affichée en plein écran. Si cela ne fonctionne pas, il faut parfois changer la taille de fenêtre manuellement, en tirant dans l'angle inférieur droit, pour que VirtualBox détecte que le redimensionnement automatique est disponible. Il y a une case adéquate (taille d'écran automatique) dans le menu écran qui doit être cochée. Si rien ne marche, c'est parfois en redémarrant la VM que cela peut se déclencher. Mais il faut la VM en grand écran.

Si vous êtes sous Windows et que la VM ne fonctionne pas avec VirtualBox, vous pouvez utiliser à la place VMWare Player. Dans ce cas, il faudra cliquer sur "Retry" lors de l'import.

Le compte-rendu est à déposer en binôme sur Moodle avant mercredi 23 novembre soir.

Cheat sheet

Voici un petit résumé des commandes dont vous aurez besoin :

Commande Description Utilisation
print Génère la cartographie du réseau snster print
attach Permet d'avoir un shell sur une machine snster attach target-sales
display Lance un affichage sur la machine cible snster display target-sales
start Lance la construction du bac à sable snster start
stop Éteint la plateforme pédagogique snster stop

Rappel: Vous devez être dans le répertoire /root/mi-lxc/ pour exécuter ces commandes.

Manipulation et navigation dans l'infrastructure pré-existante

Découverte du réseau

Vous devez vous connecter à la VM en root/root. MI-LXC est déjà installé et l'infrastructure déployée, il faut avec un terminal aller dans le dossier /root/mi-lxc. Commencez par afficher le plan du réseau avec snster print. Les rectangles sont les machines et les ovales les switchs réseau. L'infrastructure déployée simule un internet minimaliste :

  • un réseau de réseaux indépendants
  • chaque réseau propose des services internes et expose des services externes utilisés par d'autres réseaux
  • des services globaux nécessaires à l'interconnexion de l'ensemble sont déjà en place (cœur de réseau, racine DNS, ...)

Au milieu du plan, le cœur de réseau est constitué de 2 opérateurs nommés transit-a et transit-b (munis chacun d'une machine et d'un switch). D'autres organisations sont ensuite connectées à ces opérateurs afin de former globalement cet internet. Ces organisations sont classiquement construites avec une machine -router en entrée de réseau, un switch interne et d'autres machines branchées sur ce switch interne.

Question 1 : À partir de l'image de la topologie accessible ici, délimitez les réseaux (les AS) et essayez de préciser leur rôle dans le système global. Vous pouvez vous aider du listing présent dans le fichier doc/MI-IANA.fr.txt du dépôt github.

Utilisation

Pour démarrer l'infrastructure, tapez snster start. Ensuite pour vous connecter à une machine :

  • snster display isp-a-home : pour afficher le bureau de la machine isp-a-home qui peut vous servir de navigateur web à l'intérieur du réseau de MI-LXC (en tant qu'utilisateur debian)
  • snster attach target-dmz : pour obtenir un shell sur la machine target-dmz (en tant qu'utilisateur root)

Toutes les machines ont les deux comptes suivants : debian/debian et root/root (login/mot de passe).

Question 2 : Depuis la machine isp-a-home, ouvrez un navigateur pour vous connecter à http://www.target.milxc. Vous accédez à une page Dokuwiki. Savez-vous sur quel serveur cette page est hébergée ?

Question 3 : Depuis la machine isp-a-home, ouvrez un navigateur pour vous connecter au site web de l'UBS. Cela fonctionne-t-il ? Cette page est-elle hébergée dans l'infrastructure MI-LXC ?

Question 4 : Ouvrez un shell sur la machine target-dmz (commande attach, donc). Installez le package nano grâce à l'outil apt et vérifiez que vous pouvez maintenant éditer des fichiers avec nano.

Dans la VM et sur les machines MI-LXC, vous pouvez donc installer des logiciels supplémentaires. Par défaut, vous avez mousepad pour éditer des fichiers de manière graphique.

Si la souris reste bloquée dans une fenêtre de display, appuyez sur CTRL+SHIFT pour la libérer. Un tuto vidéo de démarrage est proposé ici (attention, c'est pour une ancienne version avec des noms de commandes légèrement différents).

Extension de l'infrastructure

MI-LXC permet le prototypage rapide d'une infrastructure. Nous allons maintenant ajouter un AS à l'infrastructure existante.

Le déroulement va être le suivant :

  • Déclarer un numéro d'AS, une plage d'adresses IP et un nom de domaine pour cette nouvelle organisation
  • Créer cet AS minimaliste dans MI-LXC
  • Ajouter un autre hôte à cet AS
  • Modifier ce nouvel hôte

Déclaration d'un nouvel AS

Le fichier doc/MI-IANA.fr.txt représente l'annuaire de l'IANA. Vous pouvez y trouver un numéro d'AS libre ainsi qu'une plage d'IP libre. Les IPv4 routables sont attribuées dans l'espace 100.64.0.0/10 (réservé au CG-NAT et donc normalement sans risque de conflit local).

Vous pouvez aussi en profiter pour prévoir un nom de domaine en .milxc, qui sera utilisé lors d'une prochaine séance.

Faîtes valider ce plan par l'enseignant

Si vous n'êtes pas très à l'aise avec le choix de numéros d'AS et de plages d'IP, vous pouvez utiliser les paramètres de l'AS 9 "Evil" (cet AS n'est pas présent dans l'infrastructure fournie, ses paramètres sont donc libres).

Création de cet AS dans MI-LXC

Un AS est représenté par un groupe d'hôtes. La première étape est ainsi de déclarer ce nouveau groupe dans le dossier configuration, en créant un nouveau dossier dans ~/mi-lxc/ contenant la description du groupe dans un fichier group.yml. Par exemple, le groupe existant "gozilla", proche de vos besoins, est défini de la manière suivante :

  • un sous-dossier ~/mi-lxc/gozilla
  • un fichier ~/mi-lxc/gozilla/group.yml de description des hôtes du groupe (un routeur et une machine d'infrastructure)

Inspirez-vous de ce group.yml pour votre nouveau dossier en ne déclarant pour l'instant qu'un seul hôte routeur.

Les interfaces de l'hôte "router" décrivent sa connexion réseau et doivent être ajustées pour votre nouveau groupe. Pour chaque interface, il faut spécifier son bridge, son ipv4 et son ipv6 (optionnelle) de manière statique ici. Dans cet exemple :

  • transit-a est le bridge opéré par l'opérateur Transit-A, s'y connecter permet d'aller vers les autres AS, il faut utiliser une IP libre dans son réseau 100.64.0.1/24 et cette interface sera l'interface externe eth0
  • gozilla-lan est le bridge interne de l'organisation gozilla, on y associe une IP de son AS. Son nom doit impérativement commencer par le nom du groupe + "-", ici "gozilla-", et ne pas être trop long (max 15 caractères, contrainte de nommage des interfaces réseau niveau noyau). L'interface eth1 doit, pour vous, être connectée à un nouveau bridge dédié à votre nouvel AS et avoir une IP de votre nouvelle plage.

Le template bgprouter de l'hôte "router" décrit le paramétrage du routeur. Les champs asn, asdev, neighbors4, neighbors6 et interfaces doivent également être ajustés pour votre nouveau groupe :

  • asn est le numéro d'AS, tel que déclaré dans MI-IANA.fr.txt
  • asdev est l'interface réseau qui sera reliée au réseau interne de l'organisation (celle qui a les IP liées à l'AS, ce sera eth1 pour vous comme dans l'exemple)
  • neighbors4 sont les pairs BGP4 pour le routage IPv4 (au format IP_du_pair as ASN_du_pair)
  • neighbors6 sont les pairs BGP6 pour le routage IPv6 (optionnel, au format IP_du_pair as ASN_du_pair)

Pour intégrer votre nouvel AS, il faudra donc choisir à quel point de transit le connecter et avec quelle IP. Un snster print vous donne une vue générale des connexions et IP utilisées (tant que le YAML est bien formé...).

Une fois ceci défini, un snster print pour vérifier la topologie, puis snster create permet de créer la machine routeur associée à cet AS (ce sera un Alpine Linux). L'opération create est paresseuse, elle ne crée que les conteneurs non existants et sera donc rapide.

DANGER ZONE On va détruire un conteneur et uniquement un. Si vous faîtes une fausse manipulation, vous risquez de détruire l'infra complète et de mettre ensuite 15 minutes à tout reconstruire, ce n'est pas le but. Donc spécifiez bien le nom du conteneur à détruire et, si vous êtes dans une VM, ça peut être le moment de faire un snapshot...

À ce moment, par contre, le pair BGP (l'autre bout du tunnel BGP, par exemple le conteneur transit-a-router) ne connaît pas encore ce nouveau routeur. Il faut également déclarer ce nouveau pair de l'autre côté du tunnel BGP (ici, ce routeur du groupe "gozilla" est par exemple listé dans les pairs BGP du groupe "transit-a", défini dans le fichier ~/mi-lxc/transit-a/group.yml : il faut mettre à jour la liste des voisins de transit-a-router dans ce fichier !). Il faut ensuite le détruire et le re-générer : snster destroy transit-a-router (détruit uniquement le conteneur transit-a-router) puis snster create pour le re-générer.

On peut enfin faire un snster start et vérifier le bon démarrage.

Sur le routeur ou ses voisins BGP, les commandes birdc show route all et birdc show protocols permettent d'inspecter les tables de routage et vérifier l'établissement des sessions BGP.

Question 5 : Quels ajouts avez-vous fait dans group.yml de votre nouveau groupe ?

Question 6 : Vérifiez les sorties de birdc show route all et birdc show protocols de chaque côté de la connexion que vous avez rajoutée. Dans protocols, tout doit être "Established". Mettez des screenshots des sorties "protocols" dans votre compte-rendu.

Ajout d'un hôte dans le nouvel AS

Nous allons maintenant ajouter un nouvel hôte dans cet AS. Dans le dossier du groupe, nous allons compléter le fichier group.yml qui décrit la topologie interne du groupe.

Si vous explorez les autres groupes, vous verrez qu'en plus du group.yml, il y a un sous-dossier par machine pour le provisionning de chacun de ces hôtes. Ce sont les "recettes" de création de chaque hôte pré-existant. Vous n'aurez pas à procéder comme cela de votre côté mais les recettes des autres hôtes pourront parfois vous aider durant de prochaines séances.

En vous inspirant de ~/mi-lxc/gozilla/group.yml, ajoutez un second hôte à votre groupe. Ce YAML définit :

  • qu'il y a un conteneur qui s'appelle infra
  • qu'il a une interface réseau branchée sur le bridge gozilla-lan avec les IP spécifiées
  • que sa passerelle IPv4 est 100.83.0.1
  • qu'il utilise un template "resolv" (nous ne détaillerons pas, il vous faudra utiliser le même) qui désactive le DHCP et fixe le domaine et le serveur DNS

Une fois tout ceci fait, on peut faire snster print pour vérifier que le YAML est bien formé et que la topologie est conforme. Un snster create créera ce conteneur, puis snster start le lancera (inutile d'avoir stoppé les autres avant).

Question 7 : Quel contenu dans group.yml ?

Modification de cet hôte

Maintenant que cet hôte est créé, nous allons le modifier. Il s'agit d'une Debian basique sur laquelle il est donc possible d'ajouter des paquets, les configurer, etc. Installez le paquet nano et vérifiez son fonctionnement. Ouvrez enfin un display sur cette nouvelle machine et vérifiez que vous pouvez naviguer avec Firefox vers http://www.target.milxc et vers un site internet externe à MI-LXC.

Enfin, vous pouvez éteindre proprement MI-LXC en tapant snster stop et en arrêtant la VM (proprement également). Vos changements sont persistants : rallumez la VM, redémarrez MI-LXC et vérifiez que nano est toujours disponible sur votre nouvelle machine.

Question 8 : Montrez avec une capture d'écran que l'installation a bien fonctionné et que vous pouvez bien accéder à 'http://www.target.milxc' depuis votre nouvel hôte.

Organisation pour la suite de la matière

L'infrastructure pré-existante suit le paradigme de l'infrastructure-as-code, c'est à dire que la topologie, les installations et les configurations sont programmées (les yaml que vous avez manipulé ainsi que les provision.sh, par exemple dans ~/mi-lxc/target/dmz/provision.sh). Cela permet de sauvegarder/versionner les recettes et de facilement regénérer des hôtes en cas de mauvaise manipulation. La contrepartie est de programmer les configurations plutôt que de juste les faire.

A priori, vous n'utiliserez pas ces fonctionnalités (ce n'est en tous cas pas exigé). Vos configurations seront persistantes mais vous ne pourrez donc pas facilement revenir sur des erreurs de manipulation sur les hôtes rajoutés. Au-delà des comptes-rendus, vous avez donc tout intérêt à documenter vos actions.

Votre compte-rendu doit être déposé sur Moodle avant mercredi 23 novembre soir au format PDF uniquement