Maquettes Claude Design avec visio de classe
This commit is contained in:
parent
238070ae54
commit
236d2d3567
243 changed files with 27992 additions and 0 deletions
206
design/js/contenus-reseau-1.js
Normal file
206
design/js/contenus-reseau-1.js
Normal file
|
|
@ -0,0 +1,206 @@
|
|||
// Cours complets · Réseaux lot 1 : IPv4 et sous-réseaux, VLAN 802.1Q, DHCP
|
||||
(function () {
|
||||
var K = 'stroke="#000" stroke-width="3"', F = 'font-family="Archivo,sans-serif" font-weight="800"', M = 'font-family="IBM Plex Mono,monospace" font-weight="600"';
|
||||
var bx = function (x, y, w, h, c, t, fs) { return '<rect x="' + x + '" y="' + y + '" width="' + w + '" height="' + h + '" fill="' + c + '" ' + K + '/><text x="' + (x + w / 2) + '" y="' + (y + h / 2 + 5) + '" text-anchor="middle" ' + F + ' font-size="' + (fs || 15) + '">' + t + '</text>'; };
|
||||
var tx = function (x, y, s, fs, mono) { return '<text x="' + x + '" y="' + y + '" ' + (mono ? M : F) + ' font-size="' + (fs || 14) + '">' + s + '</text>'; };
|
||||
var svg = function (w, h, b) { return '<svg viewBox="0 0 ' + w + ' ' + h + '" class="h-auto w-full" role="img">' + b + '</svg>'; };
|
||||
var Y = '#FFD23F', G = '#7CF2C0', P = '#FF6FB5', L = '#C4B5FD', N = '#F6F5F1', W = '#fff';
|
||||
var reg = function (c) {
|
||||
(window.CONTENUS_PRO = window.CONTENUS_PRO || []).unshift(c.cours);
|
||||
(window.CONTENUS_PLUS = window.CONTENUS_PLUS || {})[c.cours.id] = c.plus;
|
||||
(window.CONTENUS_EXEMPLES = window.CONTENUS_EXEMPLES || {})[c.cours.id] = c.exemples;
|
||||
(window.CONTENUS_LONG = window.CONTENUS_LONG || {})[c.cours.id] = c.long;
|
||||
(window.CONTENUS_SCHEMAS = window.CONTENUS_SCHEMAS || {})[c.cours.id] = c.schemas;
|
||||
};
|
||||
|
||||
// ============ IPv4, CIDR, masques, sous-réseaux ============
|
||||
reg({
|
||||
cours: { id: 'ipv4', match: /IPv4 : classes|CIDR|masques|sous-réseaux|VLSM/i,
|
||||
titre: 'Adressage IPv4 : masques, CIDR et découpage en sous-réseaux', duree: '',
|
||||
niveau: 'BTS SIO SISR · BTS CIEL IR · BUT R&T S1-S2 · TSSR',
|
||||
prerequis: ['Binaire : poids des bits d’un octet', 'Modèle OSI et TCP/IP'],
|
||||
competences: ['BTS SIO · Bloc 1 · Exploiter les éléments d’un réseau', 'BTS SIO SISR · Bloc 2 · Concevoir une solution d’infrastructure réseau', 'BTS CIEL · C03 · Concevoir un réseau', 'BUT R&T · Compétence « Connecter les entreprises et les usagers »'],
|
||||
intro: 'Chaque équipement qui communique sur un réseau IP possède une adresse, et chaque adresse appartient à un réseau. Savoir lire une adresse et son masque, c’est savoir si deux machines peuvent se parler directement ou doivent passer par un routeur, combien de postes un réseau peut accueillir et comment découper un espace d’adresses pour séparer les services d’un établissement. C’est la compétence la plus évaluée à l’épreuve pratique du BTS SIO SISR, et celle qu’un technicien utilise tous les jours.',
|
||||
cm: [
|
||||
{ t: 'Anatomie d’une adresse IPv4', d: '', html: 'Une adresse IPv4 est un nombre de <b>32 bits</b>. Pour la rendre lisible, on la découpe en quatre octets écrits en décimal et séparés par des points : c’est la notation <b>décimale pointée</b>. 192.168.10.65 correspond en binaire à 11000000.10101000.00001010.01000001.<br><br>Une adresse se divise toujours en deux parties. La <b>partie réseau</b>, à gauche, est commune à toutes les machines du même réseau. La <b>partie hôte</b>, à droite, distingue chaque machine au sein de ce réseau. C’est le <b>masque</b> qui indique où passe la frontière entre les deux.<br><br>Deux adresses de chaque réseau sont réservées et ne peuvent pas être attribuées à une machine : l’<b>adresse de réseau</b>, où tous les bits d’hôte valent 0, qui désigne le réseau lui-même, et l’<b>adresse de diffusion</b> (broadcast), où tous les bits d’hôte valent 1, qui permet d’envoyer un paquet à toutes les machines du réseau à la fois.' },
|
||||
{ t: 'Le masque de sous-réseau et la notation CIDR', d: '', html: 'Le masque est lui aussi un nombre de 32 bits, composé d’une suite continue de 1 (la partie réseau) suivie d’une suite de 0 (la partie hôte). 255.255.255.0 s’écrit 11111111.11111111.11111111.00000000 : 24 bits de réseau, 8 bits d’hôte.<br><br>La notation <b>CIDR</b> (Classless Inter-Domain Routing, RFC 4632) écrit simplement le nombre de bits à 1 après une barre oblique : 192.168.10.65/24. Elle est plus courte, sans ambiguïté, et c’est celle qu’utilisent Linux, les équipements réseau et les fournisseurs cloud.<br><br>Les valeurs possibles pour un octet de masque ne sont pas quelconques : comme les 1 sont contigus, un octet ne peut valoir que 0, 128, 192, 224, 240, 248, 252, 254 ou 255. Un masque comme 255.255.253.0 n’existe pas.', table: [['CIDR', 'Masque', 'Bits d’hôte', 'Adresses', 'Hôtes utilisables'], ['/8', '255.0.0.0', '24', '16 777 216', '16 777 214'], ['/16', '255.255.0.0', '16', '65 536', '65 534'], ['/22', '255.255.252.0', '10', '1 024', '1 022'], ['/24', '255.255.255.0', '8', '256', '254'], ['/25', '255.255.255.128', '7', '128', '126'], ['/26', '255.255.255.192', '6', '64', '62'], ['/27', '255.255.255.224', '5', '32', '30'], ['/28', '255.255.255.240', '4', '16', '14'], ['/30', '255.255.255.252', '2', '4', '2'], ['/32', '255.255.255.255', '0', '1', 'une seule machine']] },
|
||||
{ t: 'Calculer adresse de réseau, diffusion et plage', d: '', html: 'Le calcul se fait toujours de la même manière. On applique un <b>ET logique</b> bit à bit entre l’adresse et le masque : on obtient l’adresse de réseau. On met ensuite tous les bits d’hôte à 1 : on obtient l’adresse de diffusion. Les adresses utilisables sont toutes celles comprises entre les deux.<br><br>En pratique, on ne convertit que l’<b>octet significatif</b>, celui où le masque n’est ni 255 ni 0. Les octets à 255 se recopient, les octets à 0 deviennent 0 pour le réseau et 255 pour la diffusion.<br><br>Il existe un raccourci très efficace : le <b>nombre magique</b>. On calcule 256 moins la valeur de l’octet significatif du masque. Pour un /26, l’octet vaut 192, donc 256 − 192 = 64 : les réseaux commencent tous à un multiple de 64 (0, 64, 128, 192). L’adresse 192.168.10.100 tombe entre 64 et 127 : réseau .64, diffusion .127, hôtes de .65 à .126.', exemple: 'Adresse : 192.168.10.100/26\nMasque : 255.255.255.192 (octet significatif : le 4e)\nMagique : 256 − 192 = 64 → blocs 0, 64, 128, 192\n100 est dans le bloc 64 à 127\n\nRéseau : 192.168.10.64\nDiffusion : 192.168.10.127\nHôtes : 192.168.10.65 → 192.168.10.126 (62 adresses)', attention: 'Le nombre d’hôtes utilisables est 2ⁿ − 2, n étant le nombre de bits d’hôte. On retire toujours l’adresse de réseau et l’adresse de diffusion. Seule exception : le /31, réservé aux liaisons point à point entre deux routeurs (RFC 3021).' },
|
||||
{ t: 'Adresses privées, publiques et spéciales', d: '', html: 'Il n’y a qu’environ 4,3 milliards d’adresses IPv4, bien moins que le nombre d’appareils connectés. Pour ne pas les épuiser, la <b>RFC 1918</b> réserve trois plages <b>privées</b>, utilisables librement à l’intérieur d’un réseau mais jamais routées sur Internet. Les postes d’un lycée sont presque toujours en adresses privées et sortent sur Internet grâce au <b>NAT</b> du routeur, qui les traduit en une adresse publique.<br><br>D’autres plages ont un rôle particulier et doivent être reconnues au premier coup d’œil, car elles orientent immédiatement un diagnostic.', table: [['Plage', 'Rôle'], ['10.0.0.0/8', 'privée, grands réseaux (académies, entreprises)'], ['172.16.0.0/12', 'privée, de 172.16 à 172.31'], ['192.168.0.0/16', 'privée, box et petits réseaux'], ['127.0.0.0/8', 'boucle locale, la machine elle-même'], ['169.254.0.0/16', 'APIPA : aucun serveur DHCP n’a répondu'], ['100.64.0.0/10', 'CGNAT des opérateurs'], ['224.0.0.0/4', 'multidiffusion (multicast)'], ['0.0.0.0', 'toutes les interfaces / route par défaut']] },
|
||||
{ t: 'Les classes : un héritage à connaître', d: '', html: 'Avant 1993, les adresses étaient réparties en <b>classes</b> déterminées par les premiers bits : classe A (1 à 126, masque /8), classe B (128 à 191, /16), classe C (192 à 223, /24), classe D (multicast) et E (expérimentale). Ce système gaspillait énormément d’adresses : une entreprise qui avait besoin de 300 adresses recevait une classe B de 65 534 adresses.<br><br>Le CIDR a supprimé cette rigidité : le masque est désormais libre. Les classes n’ont plus d’existence technique, mais le vocabulaire reste, et certains sujets d’examen ou vieux équipements les mentionnent encore. Retenez surtout qu’aujourd’hui, <b>seul le masque compte</b>.' },
|
||||
{ t: 'Découper un réseau : le subnetting', d: '', html: 'Découper un réseau en sous-réseaux consiste à <b>emprunter des bits</b> à la partie hôte pour allonger la partie réseau. Chaque bit emprunté double le nombre de sous-réseaux et divise par deux leur taille.<br><br>Pourquoi découper ? Pour séparer les usages : administration, salles pédagogiques, Wi-Fi invités, serveurs, caméras. Chaque sous-réseau est un domaine de diffusion distinct, ce qui limite le trafic inutile, et le passage de l’un à l’autre se fait par un routeur ou un pare-feu où l’on peut filtrer. Un élève sur le Wi-Fi n’a alors aucun accès direct au serveur de notes.<br><br>La méthode : déterminer le nombre de sous-réseaux nécessaires, trouver la plus petite puissance de 2 qui le couvre, en déduire le nombre de bits à emprunter, puis le nouveau masque et le pas entre chaque sous-réseau.', exemple: 'Réseau de départ : 192.168.10.0/24, besoin de 4 sous-réseaux\n4 = 2² → on emprunte 2 bits → nouveau masque /26\nPas : 256 − 192 = 64\n\nSR1 : 192.168.10.0/26 hôtes .1 à .62 diffusion .63\nSR2 : 192.168.10.64/26 hôtes .65 à .126 diffusion .127\nSR3 : 192.168.10.128/26 hôtes .129 à .190 diffusion .191\nSR4 : 192.168.10.192/26 hôtes .193 à .254 diffusion .255' },
|
||||
{ t: 'VLSM : des sous-réseaux de tailles différentes', d: '', html: 'Dans la réalité, les besoins sont inégaux : 120 postes en salles pédagogiques, 50 à l’administration, 20 serveurs, et des liaisons entre routeurs qui n’ont besoin que de 2 adresses. Découper en parts égales gaspillerait des adresses. Le <b>VLSM</b> (Variable Length Subnet Mask) attribue à chaque besoin le masque juste suffisant.<br><br>La règle d’or est de <b>traiter les besoins du plus grand au plus petit</b>. On place le plus gros sous-réseau en premier, au début de la plage, puis le suivant immédiatement après, et ainsi de suite. En procédant dans cet ordre, chaque sous-réseau commence naturellement sur une frontière valide et aucun ne chevauche un autre.', exemple: 'Plage : 172.16.0.0/24 Besoins : 120, 50, 20 hôtes + 2 liaisons de 2\n\n120 hôtes → 2⁷ − 2 = 126 → /25 → 172.16.0.0/25 (.1 à .126)\n 50 hôtes → 2⁶ − 2 = 62 → /26 → 172.16.0.128/26 (.129 à .190)\n 20 hôtes → 2⁵ − 2 = 30 → /27 → 172.16.0.192/27 (.193 à .222)\n 2 hôtes → 2² − 2 = 2 → /30 → 172.16.0.224/30 (.225 et .226)\n 2 hôtes → /30 → 172.16.0.228/30 (.229 et .230)\nReste libre : 172.16.0.232 à 172.16.0.255', attention: 'Prévoyez toujours une marge de croissance. Un sous-réseau dimensionné à l’hôte près sera saturé à la rentrée suivante. En entreprise, on vise en général 30 % d’adresses libres.' },
|
||||
{ t: 'Agrégation de routes (supernetting)', d: '', html: 'L’opération inverse du découpage consiste à <b>résumer</b> plusieurs réseaux contigus en un seul préfixe plus court. Un routeur de site qui connaît 192.168.0.0/24, 192.168.1.0/24, 192.168.2.0/24 et 192.168.3.0/24 peut annoncer une seule route 192.168.0.0/22 au routeur central. Les tables de routage restent petites et les modifications internes au site ne perturbent pas le reste du réseau.<br><br>Pour trouver le préfixe résumé, on écrit les réseaux en binaire et on garde la plus longue suite de bits communs à tous.' }
|
||||
],
|
||||
synthese: ['Adresse IPv4 = 32 bits = partie réseau + partie hôte, séparées par le masque', 'Réseau = adresse ET masque ; diffusion = bits d’hôte à 1', 'Hôtes utilisables = 2ⁿ − 2', 'Nombre magique = 256 − octet significatif du masque', 'Subnetting : chaque bit emprunté double les sous-réseaux', 'VLSM : du plus grand besoin au plus petit, avec une marge', '10/8, 172.16/12, 192.168/16 sont privées ; 169.254 signale un échec DHCP'],
|
||||
qcm: [
|
||||
['Combien d’hôtes utilisables dans un /27 ?', ['32', '30', '27', '62'], 1, '2⁵ − 2 = 30.'],
|
||||
['Quelle est l’adresse de réseau de 10.4.77.200/20 ?', ['10.4.64.0', '10.4.77.0', '10.4.72.0', '10.4.0.0'], 0, 'Magique 256 − 240 = 16 sur le 3e octet : 77 est dans le bloc 64 à 79.'],
|
||||
['Quelle est l’adresse de diffusion de 192.168.5.130/25 ?', ['192.168.5.127', '192.168.5.255', '192.168.5.254', '192.168.5.128'], 1, 'Bloc de 128 : réseau .128, diffusion .255.'],
|
||||
['Quel masque correspond à /21 ?', ['255.255.248.0', '255.255.240.0', '255.255.252.0', '255.255.255.248'], 0, '21 = 16 + 5 bits : 11111000 = 248.'],
|
||||
['Un poste a l’adresse 169.254.33.7. Que s’est-il passé ?', ['Il est sur Internet', 'Il n’a reçu aucune réponse DHCP', 'Il est en IPv6', 'Il est en boucle locale'], 1, 'APIPA : adresse auto-attribuée.'],
|
||||
['Laquelle n’est PAS une adresse privée ?', ['10.200.1.1', '172.20.0.5', '172.40.0.5', '192.168.99.1'], 2, '172.16/12 va de 172.16 à 172.31.'],
|
||||
['On doit découper un /24 en 6 sous-réseaux égaux. Quel masque ?', ['/26', '/27', '/28', '/25'], 1, '6 → 8 = 2³, on emprunte 3 bits.'],
|
||||
['192.168.1.70/26 et 192.168.1.130/26 peuvent-ils communiquer sans routeur ?', ['Oui', 'Non, ils sont dans deux sous-réseaux différents', 'Seulement en IPv6', 'Seulement avec un switch'], 1, 'Réseaux .64 et .128.'],
|
||||
['En VLSM, dans quel ordre traite-t-on les besoins ?', ['Du plus petit au plus grand', 'Du plus grand au plus petit', 'Par ordre alphabétique', 'Peu importe'], 1, 'Pour que chaque bloc commence sur une frontière valide.'],
|
||||
['Quel préfixe résume 10.1.4.0/24 à 10.1.7.0/24 ?', ['10.1.4.0/22', '10.1.0.0/16', '10.1.4.0/23', '10.1.4.0/21'], 0, '4 = 000001 00 à 7 = 000001 11 : 22 bits communs.'],
|
||||
['Pourquoi le /31 est-il une exception ?', ['Il n’existe pas', 'Il est utilisé pour des liaisons point à point sans réseau ni diffusion', 'Il est réservé au multicast', 'Il est public'], 1, 'RFC 3021.'],
|
||||
['Combien de /26 dans un /22 ?', ['4', '8', '16', '32'], 2, '26 − 22 = 4 bits : 2⁴ = 16.']
|
||||
],
|
||||
td: [
|
||||
{ n: 'Échauffement', c: 'Pour chaque adresse, donner le masque en décimal pointé, l’adresse de réseau, la diffusion et le nombre d’hôtes : 192.168.1.37/24 · 10.0.0.200/25 · 172.16.8.50/28.', r: '255.255.255.0 · .0 · .255 · 254\n255.255.255.128 · 10.0.0.128 · 10.0.0.255 · 126\n255.255.255.240 · 172.16.8.48 · 172.16.8.63 · 14' },
|
||||
{ n: 'Échauffement', c: 'Classer en privée, publique ou spéciale : 8.8.8.8, 172.31.255.1, 172.32.0.1, 127.0.0.53, 169.254.1.1, 100.70.3.2.', r: 'publique · privée · publique · boucle locale · APIPA · CGNAT' },
|
||||
{ n: 'Application', c: 'Découper 192.168.20.0/24 en 8 sous-réseaux égaux. Donner pour chacun le réseau, la première et la dernière adresse utilisables et la diffusion.', r: '/27, pas de 32 : .0 (.1-.30, .31) · .32 (.33-.62, .63) · .64 · .96 · .128 · .160 · .192 · .224 (.225-.254, .255)' },
|
||||
{ n: 'Application', c: 'Un lycée dispose de 10.10.0.0/22. Besoins : pédagogie 400 postes, administration 100, Wi-Fi invités 200, serveurs 25, liaison vers le rectorat 2. Proposer un plan VLSM.', r: 'Pédagogie 400 → /23 : 10.10.0.0/23 (.0.1 à .1.254)\nInvités 200 → /24 : 10.10.2.0/24\nAdministration 100 → /25 : 10.10.3.0/25\nServeurs 25 → /27 : 10.10.3.128/27\nLiaison → /30 : 10.10.3.160/30\nReste : 10.10.3.164 à 10.10.3.255' },
|
||||
{ n: 'Application', c: 'Un technicien a configuré un poste en 192.168.10.140/24 alors que le réseau des salles est 192.168.10.128/26. Décrire les symptômes et la correction.', r: 'Le poste croit que tout 192.168.10.x est local : il n’enverra jamais à la passerelle les paquets destinés aux autres sous-réseaux (.0/26, .64/26, .192/26) et fera des requêtes ARP sans réponse. Correction : masque /26.' },
|
||||
{ n: 'Approfondissement', c: 'Résumer en un seul préfixe : 172.16.32.0/24, 172.16.33.0/24, 172.16.34.0/24, 172.16.35.0/24. Peut-on ajouter 172.16.36.0/24 au même résumé sans englober d’autres réseaux ?', r: '172.16.32.0/22. Avec .36, il faut un /21 (172.16.32.0/21) qui englobe aussi .37 à .39 : acceptable seulement si ces réseaux sont aussi derrière ce routeur.' },
|
||||
{ n: 'Approfondissement', c: 'Écrire en Python une fonction infos(cidr) qui renvoie réseau, diffusion et nombre d’hôtes, à l’aide du module ipaddress, puis la tester sur 10.4.77.200/20.', r: 'import ipaddress\ndef infos(c):\n n = ipaddress.ip_interface(c).network\n return n.network_address, n.broadcast_address, n.num_addresses - 2\n\nprint(infos("10.4.77.200/20"))\n# (IPv4Address(\'10.4.64.0\'), IPv4Address(\'10.4.79.255\'), 4094)' }
|
||||
],
|
||||
tp: { type: 'Générateur + Lab VM', url: 'apercu-generateur.html', desc: 'Exercices de sous-réseaux générés à l’infini, puis application du plan sur deux VM et un routeur.', etapes: ['20 calculs réseau / diffusion corrigés au fil de l’eau', 'Découpage en parts égales, puis en VLSM', 'Appliquer le plan : ip addr add sur deux VM', 'Vérifier que deux sous-réseaux ne se voient pas sans routeur', 'Ajouter la route et tester avec ping'] },
|
||||
plusLoin: [['RFC 1918 · adresses privées', 'https://www.rfc-editor.org/rfc/rfc1918'], ['RFC 4632 · CIDR', 'https://www.rfc-editor.org/rfc/rfc4632'], ['Module Python ipaddress', 'https://docs.python.org/fr/3/library/ipaddress.html'], ['Cisco Networking Academy · CCNA ITN', 'https://www.netacad.com/']] },
|
||||
plus: {
|
||||
cas: { titre: 'Mise en situation · Le plan d’adressage du nouveau bâtiment', texte: 'Le lycée ouvre un bâtiment de BTS avec trois salles de TP de 30 postes, un laboratoire réseau, une salle des professeurs et des bornes Wi-Fi. Le rectorat attribue la plage 10.62.48.0/22. Le technicien recense les besoins, ajoute 30 % de marge, construit un plan VLSM, le documente dans un tableur partagé avec la passerelle de chaque sous-réseau (toujours la première adresse, par convention), puis configure les étendues DHCP correspondantes. Six mois plus tard, l’ajout d’une quatrième salle se fait en dix minutes grâce à la réserve prévue.' },
|
||||
erreurs: ['Oublier de retirer 2 au nombre d’hôtes', 'Confondre adresse de réseau et première adresse utilisable', 'Écrire un masque impossible comme 255.255.250.0', 'Traiter les besoins VLSM du plus petit au plus grand et créer des chevauchements', 'Attribuer l’adresse de diffusion à une imprimante', 'Vérifier l’adresse d’un poste sans vérifier son masque', 'Oublier que 172.16/12 s’arrête à 172.31'],
|
||||
memo: [['Préfixe', 'Masque', 'Pas', 'Hôtes'], ['/24', '255.255.255.0', '256 (3e octet +1)', '254'], ['/25', '.128', '128', '126'], ['/26', '.192', '64', '62'], ['/27', '.224', '32', '30'], ['/28', '.240', '16', '14'], ['/29', '.248', '8', '6'], ['/30', '.252', '4', '2'], ['/23', '255.255.254.0', '2 sur le 3e octet', '510'], ['/22', '255.255.252.0', '4 sur le 3e octet', '1 022'], ['/20', '255.255.240.0', '16 sur le 3e octet', '4 094']],
|
||||
examen: { titre: 'Sujet type · 20 points', q: ['Pour 172.18.93.14/19 : masque, réseau, diffusion, première et dernière adresse, nombre d’hôtes. (5 pts)', 'Découper 192.168.100.0/24 en 5 sous-réseaux de taille égale et donner les 5 premiers. (4 pts)', 'Plan VLSM pour 10.0.0.0/23 : 200, 100, 60, 10 hôtes et deux liaisons point à point. (7 pts)', 'Expliquer pourquoi un poste en 169.254.x.x ne peut pas accéder au serveur de fichiers. (2 pts)', 'Donner le préfixe résumé de 10.8.8.0/24 à 10.8.11.0/24. (2 pts)'], r: ['255.255.224.0 · 172.18.64.0 · 172.18.95.255 · .64.1 à .95.254 · 8 190', '/27 : .0, .32, .64, .96, .128', '/24 10.0.0.0 · /25 10.0.1.0 · /26 10.0.1.128 · /28 10.0.1.192 · /30 10.0.1.208 et .212', 'Pas de DHCP : adresse hors du réseau, pas de passerelle', '10.8.8.0/22'] },
|
||||
prof: { deroule: [['Ouverture', 'Défi : « ces deux postes peuvent-ils se parler ? », vote à main levée puis explication'], ['Cours', 'Structure d’une adresse, masque, CIDR, calcul réseau et diffusion'], ['Entraînement', 'Générateur : 20 calculs, objectif 18/20'], ['Cours', 'Subnetting puis VLSM au tableau à partir d’un cas réel'], ['Pratique', 'TD VLSM en binômes, puis application sur les VM'], ['Clôture', 'Quiz flash de 5 questions']], diff: 'Élèves en difficulté : tableau des préfixes imprimé, méthode du nombre magique, exercices du générateur au niveau 1. Élèves avancés : agrégation de routes, module ipaddress en Python, défis de sous-réseaux chronométrés.', eval: 'Générateur (formatif), TD VLSM relevé, sujet type sur 20 en conditions d’examen.' }
|
||||
},
|
||||
exemples: [
|
||||
['Lire l’adresse d’un serveur', 'Première connexion à une VM.', 'ip -br addr show ens18', 'ens18 UP 192.168.10.20/26', 'Le /26 donne un pas de 64 : le serveur est dans 192.168.10.0/26, avec des hôtes de .1 à .62 et une diffusion en .63. Un poste en .70 est sur un autre sous-réseau et passera par la passerelle.'],
|
||||
['Calculer avec ipcalc', 'Vérifier un calcul avant de configurer un switch.', 'ipcalc 10.4.77.200/20', 'Network: 10.4.64.0/20\nNetmask: 255.255.240.0 = 20\nBroadcast: 10.4.79.255\nHostMin: 10.4.64.1\nHostMax: 10.4.79.254\nHosts/Net: 4094', 'ipcalc (paquet ipcalc) fait le calcul complet. Utile pour vérifier, mais à l’examen il faut savoir le faire à la main avec le nombre magique : 256 − 240 = 16 sur le 3e octet.'],
|
||||
['Découper en Python', 'Générer automatiquement le plan pour un script d’inventaire.', 'import ipaddress\nfor sr in ipaddress.ip_network("192.168.10.0/24").subnets(new_prefix=26):\n print(sr, sr[1], sr[-2])', '192.168.10.0/26 192.168.10.1 192.168.10.62\n192.168.10.64/26 192.168.10.65 192.168.10.126\n192.168.10.128/26 192.168.10.129 192.168.10.190\n192.168.10.192/26 192.168.10.193 192.168.10.254', 'subnets découpe le réseau ; sr[1] est la première adresse utilisable, sr[-2] la dernière (sr[-1] est la diffusion).'],
|
||||
['Repérer un mauvais masque', 'Un poste accède à Internet mais pas à l’imprimante 192.168.10.70.', 'ip -br addr ; ip route', 'ens3 UP 192.168.10.40/24\ndefault via 192.168.10.1\n192.168.10.0/24 dev ens3 scope link', 'Le réseau réel est en /26. Avec son /24, le poste croit l’imprimante locale et la cherche par ARP, sans réponse car elle est dans un autre sous-réseau. Correction : masque /26.'],
|
||||
['Tester qu’une adresse est dans un réseau', 'Script de contrôle des baux DHCP.', 'python3 -c "import ipaddress as i; print(i.ip_address(\'10.62.49.7\') in i.ip_network(\'10.62.48.0/23\'))"', 'True', '10.62.48.0/23 couvre 10.62.48.0 à 10.62.49.255 : l’adresse est bien dans la plage.'],
|
||||
['Ajouter une adresse temporaire', 'Tester un nouveau sous-réseau sur un serveur sans redémarrage.', 'sudo ip addr add 192.168.10.65/26 dev ens18\nip -br addr show ens18', 'ens18 UP 192.168.10.20/26 192.168.10.65/26', 'Une interface peut porter plusieurs adresses. Cette modification disparaît au redémarrage ; pour la rendre permanente, on l’ajoute dans /etc/network/interfaces.']
|
||||
],
|
||||
long: { figure: svg(720, 190, bx(20, 20, 510, 50, Y, '192.168.10 · partie réseau (26 bits)', 15) + bx(530, 20, 170, 50, G, 'hôte (6 bits)', 15) + tx(20, 110, '11000000.10101000.00001010.01', 16, 1) + tx(345, 110, '000001', 16, 1) + tx(20, 150, 'masque /26 = 255.255.255.192', 16, 1) + tx(20, 180, 'réseau .0 · hôtes .1 à .62 · diffusion .63', 15)), legende: 'Le masque /26 sépare 26 bits de réseau et 6 bits d’hôte.', photo: 'Photo : tableau blanc avec un plan d’adressage dessiné, ou armoire réseau d’un établissement',
|
||||
lecture: ['Un plan d’adressage, c’est la carte d’un réseau. Sans lui, personne ne sait quelle adresse est libre, quelle machine se cache derrière 10.62.48.37 ni pourquoi l’imprimante de la salle des professeurs n’est pas joignable depuis le CDI. Avec lui, chaque adresse raconte quelque chose : le bâtiment, l’usage, le type d’équipement.', 'Le masque est la notion qui pose le plus de difficultés, parce qu’elle est invisible pour l’utilisateur. Deux postes avec des adresses qui se ressemblent peuvent être dans deux réseaux différents, et deux adresses très différentes peuvent être dans le même réseau. Seul le calcul binaire tranche. Une fois ce calcul automatisé grâce au nombre magique, on lit un plan d’adressage comme on lit un plan de ville.', 'Le découpage en sous-réseaux n’est pas qu’un exercice de calcul. C’est un outil de sécurité et d’organisation. Isoler le Wi-Fi des invités, séparer les caméras de surveillance, mettre les serveurs à part, c’est limiter ce qu’un appareil compromis peut atteindre. Les recommandations de l’ANSSI sur le cloisonnement des réseaux reposent entièrement sur ce principe.', 'Enfin, IPv4 a ses limites : il n’y a plus d’adresses publiques disponibles, et le NAT est devenu la norme. IPv6, avec ses 128 bits, supprime ce problème et fait l’objet d’un chapitre à part. Mais IPv4 restera présent dans les réseaux d’établissement pendant encore de nombreuses années, et ce que vous apprenez ici sur les préfixes et le découpage se transpose directement en IPv6.'] },
|
||||
schemas: { termes: ['CIDR', 'VLSM', 'NAT', 'APIPA', 'RFC 1918', 'masque', 'nombre magique', 'adresse de réseau', 'adresse de diffusion', 'broadcast', 'ET logique', '/24', '/25', '/26', '/27', '/28', '/30', '/22', '255.255.255.192', '169.254', 'ipcalc', 'ipaddress', 'ip addr'],
|
||||
figs: [[2, 'Le nombre magique : 256 − 192 = 64', svg(720, 140, [['.0', Y], ['.64', G], ['.128', L], ['.192', P]].map(function (c, i) { return bx(20 + i * 172, 30, 162, 50, c[1], c[0] + ' → ' + [63, 127, 191, 255][i], 16); }).join('') + tx(20, 115, '192.168.10.100 tombe dans le bloc .64 → réseau .64, diffusion .127', 15))],
|
||||
[6, 'VLSM : du plus grand besoin au plus petit', svg(720, 110, bx(10, 30, 350, 50, Y, '/25 · 120 hôtes', 15) + bx(360, 30, 175, 50, G, '/26 · 50', 15) + bx(535, 30, 88, 50, L, '/27 · 20', 13) + bx(623, 30, 22, 50, P, '', 11) + bx(645, 30, 22, 50, P, '', 11) + bx(667, 30, 43, 50, N, 'libre', 11) + tx(623, 100, '/30 ×2', 12))]] }
|
||||
});
|
||||
|
||||
// ============ VLAN 802.1Q ============
|
||||
reg({
|
||||
cours: { id: 'vlan', match: /VLAN|802\.1Q|trunk/i,
|
||||
titre: 'VLAN 802.1Q : segmenter le réseau, trunk et routage inter-VLAN', duree: '',
|
||||
niveau: 'BTS SIO SISR · BTS CIEL IR · BUT R&T S2-S3 · TSSR',
|
||||
prerequis: ['Ethernet, adresses MAC, commutation', 'Adressage IPv4 et sous-réseaux'],
|
||||
competences: ['BTS SIO SISR · Bloc 2 · Concevoir une solution d’infrastructure réseau', 'BTS SIO · Bloc 3 · Sécuriser les équipements', 'BTS CIEL · C03 · Concevoir et configurer un réseau', 'BUT R&T · Compétence « Administrer les réseaux »'],
|
||||
intro: 'Dans un établissement, les postes des élèves, ceux de l’administration, les imprimantes, les caméras, la téléphonie et le Wi-Fi invités sont souvent branchés sur les mêmes switchs. Sans précaution, ils partagent un seul réseau : un élève peut voir le trafic de diffusion de l’administration et tenter d’atteindre le serveur de notes. Les VLAN permettent de créer plusieurs réseaux logiques étanches sur une même infrastructure physique, sans recâbler. C’est l’un des gestes les plus fréquents d’un technicien réseau, et un attendu central de l’option SISR.',
|
||||
cm: [
|
||||
{ t: 'Le problème : un seul domaine de diffusion', d: '', html: 'Un switch transmet les trames de <b>diffusion</b> (ARP, DHCP, certaines annonces) sur tous ses ports. Tous les équipements branchés sur des switchs reliés entre eux forment un seul <b>domaine de diffusion</b>. Plus il est grand, plus chaque machine reçoit de trafic inutile, et plus un incident (tempête de diffusion, faux serveur DHCP) touche de monde.<br><br>Le second problème est la sécurité. Sur un même domaine de diffusion, rien n’empêche une machine de parler directement à une autre. Le filtrage entre services est impossible, car le trafic ne passe par aucun routeur ni pare-feu.<br><br>La solution historique était d’acheter un switch par service. Coûteux, rigide, et impossible à faire évoluer quand un bureau change d’affectation. Le <b>VLAN</b> (Virtual LAN) règle le problème par la configuration.' },
|
||||
{ t: 'Principe du VLAN', d: '', html: 'Un VLAN est un domaine de diffusion logique identifié par un numéro, le <b>VLAN ID</b>, de 1 à 4094. Chaque port du switch est affecté à un VLAN. Deux ports dans des VLAN différents se comportent exactement comme s’ils étaient sur deux switchs séparés : aucune trame ne passe de l’un à l’autre.<br><br>Chaque VLAN correspond en pratique à un <b>sous-réseau IP</b> distinct. VLAN 10 pour l’administration en 10.62.10.0/24, VLAN 20 pour la pédagogie en 10.62.20.0/24, VLAN 30 pour le Wi-Fi invités, VLAN 99 pour l’administration des équipements. Cette correspondance un VLAN = un sous-réseau est la règle en entreprise ; la documenter évite bien des erreurs.<br><br>Le <b>VLAN 1</b> est le VLAN par défaut de tous les ports. Pour des raisons de sécurité, on ne l’utilise pas pour le trafic de production, et l’administration des switchs se fait dans un VLAN dédié.', table: [['VLAN', 'Nom', 'Sous-réseau', 'Passerelle'], ['10', 'ADMIN', '10.62.10.0/24', '10.62.10.1'], ['20', 'PEDAGO', '10.62.20.0/23', '10.62.20.1'], ['30', 'WIFI-INVITES', '10.62.30.0/24', '10.62.30.1'], ['40', 'SERVEURS', '10.62.40.0/27', '10.62.40.1'], ['99', 'MGMT', '10.62.99.0/28', '10.62.99.1']] },
|
||||
{ t: 'Ports d’accès et ports trunk', d: '', html: 'Un <b>port d’accès</b> (access) appartient à un seul VLAN. C’est le port sur lequel on branche un poste, une imprimante, une caméra. L’équipement branché ne sait pas qu’il est dans un VLAN : il envoie des trames Ethernet ordinaires, le switch s’occupe de tout.<br><br>Un <b>port trunk</b> (appelé tagged chez certains constructeurs) transporte plusieurs VLAN à la fois. On l’utilise entre deux switchs, entre un switch et un routeur, entre un switch et un hyperviseur, ou vers une borne Wi-Fi qui diffuse plusieurs réseaux. Pour que le switch d’en face sache à quel VLAN appartient chaque trame, on y ajoute une étiquette : c’est le rôle de la norme <b>IEEE 802.1Q</b>.' },
|
||||
{ t: 'La trame 802.1Q', d: '', html: 'La norme 802.1Q insère un <b>en-tête de 4 octets</b> dans la trame Ethernet, entre l’adresse MAC source et le champ EtherType. Ce <b>tag</b> contient l’identifiant de protocole 0x8100, 3 bits de priorité (PCP, utilisés pour la qualité de service de la téléphonie), 1 bit DEI et les 12 bits du VLAN ID. 12 bits donnent 4 096 valeurs, dont 0 et 4095 sont réservées : d’où la plage 1 à 4094.<br><br>Le switch ajoute le tag quand une trame sort par un trunk et le retire quand elle sort par un port d’accès. La trame s’allonge de 4 octets, ce qui explique que la taille maximale d’une trame étiquetée soit de 1 522 octets au lieu de 1 518.<br><br>Le <b>VLAN natif</b> est le VLAN dont les trames circulent sans tag sur un trunk. Les deux extrémités d’un trunk doivent avoir le même VLAN natif, sinon les trames non étiquetées changent de VLAN en traversant le lien.', exemple: '| MAC dest | MAC src | 0x8100 | PCP DEI VID=20 | EtherType 0x0800 | Données IP ... | FCS |\n <------- tag 802.1Q ------->', attention: 'Le VLAN natif est la cible de l’attaque par double étiquetage (VLAN hopping). Bonne pratique : choisir un VLAN natif inutilisé (par exemple 999), ne l’affecter à aucun port d’accès, et désactiver la négociation automatique des trunks (DTP chez Cisco).' },
|
||||
{ t: 'Configurer un switch', d: '', html: 'La syntaxe varie selon les constructeurs, mais la logique est identique : créer les VLAN, affecter les ports d’accès, configurer les trunks en listant explicitement les VLAN autorisés. Voici l’exemple d’un switch Cisco, très présent dans les établissements et dans les laboratoires de BTS.', exemple: 'Switch(config)# vlan 10\nSwitch(config-vlan)# name ADMIN\nSwitch(config)# vlan 20\nSwitch(config-vlan)# name PEDAGO\n\nSwitch(config)# interface range fa0/1 - 12\nSwitch(config-if-range)# switchport mode access\nSwitch(config-if-range)# switchport access vlan 20\n\nSwitch(config)# interface gi0/1\nSwitch(config-if)# switchport mode trunk\nSwitch(config-if)# switchport trunk allowed vlan 10,20,30,99\nSwitch(config-if)# switchport trunk native vlan 999\nSwitch(config-if)# switchport nonegotiate\n\nSwitch# show vlan brief\nSwitch# show interfaces trunk' },
|
||||
{ t: 'VLAN sous Linux', d: '', html: 'Un serveur Linux peut lui aussi recevoir un trunk et créer une <b>sous-interface</b> par VLAN. C’est le cas d’un routeur Linux, d’un pare-feu ou d’un hyperviseur qui héberge des VM dans plusieurs réseaux. Le module noyau 8021q gère l’étiquetage.', exemple: 'sudo ip link add link ens18 name ens18.10 type vlan id 10\nsudo ip addr add 10.62.10.1/24 dev ens18.10\nsudo ip link set ens18.10 up\n\nip -d link show ens18.10\n5: ens18.10@ens18: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500\n vlan protocol 802.1Q id 10 <REORDER_HDR>' },
|
||||
{ t: 'Le routage inter-VLAN', d: '', html: 'Puisque deux VLAN sont deux réseaux distincts, il faut un <b>routeur</b> pour les faire communiquer. C’est une bonne nouvelle : ce point de passage obligé est l’endroit où l’on filtre. On autorise la pédagogie à joindre le serveur de fichiers mais pas le serveur de vie scolaire, on autorise le Wi-Fi invités à sortir sur Internet mais à rien d’autre.<br><br>Trois architectures existent. Le <b>routeur sur un bâton</b> (router-on-a-stick) : un seul lien trunk vers un routeur ou un pare-feu qui possède une sous-interface par VLAN ; simple et économique, c’est la solution des petits sites et des laboratoires. Le <b>switch de niveau 3</b> : le switch route lui-même entre ses VLAN grâce à des interfaces virtuelles (SVI), à la vitesse du matériel ; c’est la solution des réseaux de campus. Le <b>pare-feu</b> en cœur de réseau, qui route et filtre à la fois ; c’est ce que recommandent les guides de cloisonnement.', exemple: '! Routeur sur un bâton (Cisco)\ninterface gi0/0.10\n encapsulation dot1Q 10\n ip address 10.62.10.1 255.255.255.0\ninterface gi0/0.20\n encapsulation dot1Q 20\n ip address 10.62.20.1 255.255.254.0\n\n! Switch de niveau 3\nip routing\ninterface vlan 10\n ip address 10.62.10.1 255.255.255.0' },
|
||||
{ t: 'Dépanner des VLAN', d: '', html: 'Les pannes de VLAN ont une signature typique : un poste obtient une adresse d’un autre réseau, ou n’en obtient aucune (169.254.x.x), ou voit certains équipements et pas d’autres. La démarche consiste à vérifier, dans l’ordre, le VLAN du port d’accès, la présence du VLAN sur tous les trunks traversés, la cohérence du VLAN natif aux deux bouts, puis la sous-interface ou la SVI de la passerelle. <code>show vlan brief</code> et <code>show interfaces trunk</code> répondent aux trois premières questions ; <code>show mac address-table</code> montre dans quel VLAN le switch a vu passer la MAC du poste.' }
|
||||
],
|
||||
synthese: ['Un VLAN = un domaine de diffusion = un sous-réseau IP', 'Port d’accès : un VLAN, trames sans tag ; trunk : plusieurs VLAN, trames étiquetées 802.1Q', 'Tag de 4 octets, VLAN ID sur 12 bits : 1 à 4094', 'Même VLAN natif aux deux bouts d’un trunk, et un VLAN natif inutilisé', 'Lister explicitement les VLAN autorisés sur un trunk', 'Routage inter-VLAN = point de filtrage : router-on-a-stick, switch L3 ou pare-feu'],
|
||||
qcm: [
|
||||
['Combien de VLAN utilisables permet 802.1Q ?', ['1 024', '4 094', '4 096', '65 535'], 1, '12 bits, 0 et 4095 réservés.'],
|
||||
['Sur quel type de port branche-t-on un poste élève ?', ['Trunk', 'Accès', 'Natif', 'Console'], 1, 'Un seul VLAN, trames non étiquetées.'],
|
||||
['Quelle est la taille du tag 802.1Q ?', ['2 octets', '4 octets', '8 octets', '12 bits'], 1, '4 octets, dont 12 bits de VLAN ID.'],
|
||||
['Deux postes dans deux VLAN différents sur le même switch peuvent communiquer :', ['directement', 'seulement via un routeur ou un switch L3', 'jamais', 'seulement en IPv6'], 1, 'Deux réseaux distincts.'],
|
||||
['Qu’est-ce que le VLAN natif ?', ['Le VLAN 1 obligatoirement', 'Le VLAN dont les trames circulent sans tag sur un trunk', 'Le VLAN d’administration', 'Le VLAN le plus utilisé'], 1, 'Il doit être identique des deux côtés.'],
|
||||
['Quelle commande Cisco affiche les trunks et les VLAN qu’ils transportent ?', ['show vlan brief', 'show interfaces trunk', 'show ip route', 'show running-config vlan'], 1, 'Elle liste aussi le VLAN natif.'],
|
||||
['Un poste d’une salle obtient une adresse du Wi-Fi invités. Cause probable ?', ['Câble abîmé', 'Port d’accès dans le mauvais VLAN', 'DNS en panne', 'Carte réseau défectueuse'], 1, 'Le DHCP qui répond est celui du VLAN du port.'],
|
||||
['Quel est l’avantage sécurité du routage inter-VLAN ?', ['Aucun', 'Un point de passage où l’on peut filtrer', 'Il chiffre le trafic', 'Il supprime ARP'], 1, 'On y place les règles de pare-feu.'],
|
||||
['Sous Linux, quelle commande crée la sous-interface du VLAN 20 sur ens18 ?', ['vlan add 20 ens18', 'ip link add link ens18 name ens18.20 type vlan id 20', 'ip addr add vlan 20', 'ifconfig ens18:20'], 1, 'Module 8021q.'],
|
||||
['Pourquoi éviter d’utiliser le VLAN 1 ?', ['Il est lent', 'Tous les ports y sont par défaut et il est visé par des attaques', 'Il est payant', 'Il ne supporte pas IP'], 1, 'Bonne pratique de sécurité.']
|
||||
],
|
||||
td: [
|
||||
{ n: 'Échauffement', c: 'Pour chaque équipement, dire s’il se branche sur un port d’accès ou un trunk : poste élève, lien entre deux switchs, imprimante, borne Wi-Fi diffusant 3 réseaux, hyperviseur hébergeant des VM de plusieurs VLAN, caméra.', r: 'accès · trunk · accès · trunk · trunk · accès' },
|
||||
{ n: 'Application', c: 'À partir du plan de VLAN du cours, écrire la configuration Cisco d’un switch de 24 ports : ports 1 à 16 en PEDAGO, 17 à 20 en ADMIN, 21 et 22 en SERVEURS, port Gi0/1 en trunk vers le cœur avec VLAN natif 999.', r: 'vlan 10/20/40/99/999 + name\ninterface range fa0/1-16 → switchport mode access, switchport access vlan 20\ninterface range fa0/17-20 → vlan 10\ninterface range fa0/21-22 → vlan 40\ninterface gi0/1 → switchport mode trunk, allowed vlan 10,20,30,40,99, native vlan 999, nonegotiate' },
|
||||
{ n: 'Application', c: 'Configurer sur un routeur Linux le routage entre les VLAN 10 et 20 reçus en trunk sur ens19, avec les passerelles du plan.', r: 'ip link add link ens19 name ens19.10 type vlan id 10\nip addr add 10.62.10.1/24 dev ens19.10\nip link add link ens19 name ens19.20 type vlan id 20\nip addr add 10.62.20.1/23 dev ens19.20\nip link set ens19.10 up ; ip link set ens19.20 up\nsysctl -w net.ipv4.ip_forward=1' },
|
||||
{ n: 'Application', c: 'Un poste du VLAN 20 branché sur le switch B n’obtient pas d’adresse, alors que les postes du VLAN 20 du switch A fonctionnent. Proposer trois vérifications et leurs commandes.', r: 'show vlan brief sur B (le port est-il en VLAN 20 ? le VLAN 20 existe-t-il ?)\nshow interfaces trunk sur A et B (le VLAN 20 est-il autorisé sur le trunk ?)\nnatif identique des deux côtés ; show mac address-table interface <port>' },
|
||||
{ n: 'Approfondissement', c: 'Expliquer le principe de l’attaque par double étiquetage et les deux configurations qui l’empêchent.', r: 'L’attaquant, dans le VLAN natif, envoie une trame avec deux tags : le premier (natif) est retiré par le premier switch, le second l’envoie dans le VLAN cible sur le trunk. Parades : VLAN natif inutilisé et différent de tous les VLAN d’accès, et étiquetage du VLAN natif (vlan dot1q tag native) ; désactiver DTP.' }
|
||||
],
|
||||
tp: { type: 'Lab VM', url: 'apercu-labs.html', desc: 'Un bridge Linux avec filtrage VLAN, trois VM clientes et un routeur Linux sur un bâton.', etapes: ['Créer les VLAN 10 et 20 sur le bridge', 'Placer chaque VM sur son port d’accès', 'Vérifier que les deux VLAN ne se voient pas', 'Configurer le trunk et les sous-interfaces du routeur', 'Activer le routage et tester le ping inter-VLAN', 'Ajouter une règle nftables qui bloque VLAN 20 → VLAN 10'] },
|
||||
plusLoin: [['IEEE 802.1Q (présentation de la norme)', 'https://standards.ieee.org/ieee/802.1Q/10323/'], ['ANSSI · Recommandations relatives à l’interconnexion d’un système d’information à Internet', 'https://cyber.gouv.fr/publications/definition-dune-architecture-de-passerelle-dinterconnexion-securisee'], ['Documentation iproute2 · ip-link (type vlan)', 'https://man7.org/linux/man-pages/man8/ip-link.8.html']] },
|
||||
plus: {
|
||||
cas: { titre: 'Mise en situation · Isoler le Wi-Fi des invités', texte: 'Lors des journées portes ouvertes, les visiteurs se connectent au Wi-Fi du lycée, qui est aujourd’hui sur le même réseau que les postes pédagogiques. Le proviseur demande de séparer les deux. Le technicien crée le VLAN 30 WIFI-INVITES, le transporte en trunk jusqu’aux bornes, associe le SSID « Lycee-Invites » à ce VLAN, crée une sous-interface sur le pare-feu avec une étendue DHCP dédiée, et n’autorise depuis ce VLAN que DNS, HTTP et HTTPS vers Internet. Il vérifie depuis un smartphone qu’aucun poste interne n’est joignable.' },
|
||||
erreurs: ['Oublier d’autoriser un nouveau VLAN sur un trunk intermédiaire', 'Deux VLAN natifs différents aux deux bouts d’un trunk', 'Laisser tous les postes dans le VLAN 1', 'Créer le VLAN sur un seul switch', 'Confondre VLAN et sous-réseau dans la documentation', 'Oublier d’activer ip_forward sur un routeur Linux', 'Oublier la sous-interface ou la SVI de passerelle du nouveau VLAN'],
|
||||
memo: [['Tâche', 'Cisco', 'Linux'], ['Créer un VLAN', 'vlan 20 / name PEDAGO', 'bridge vlan add vid 20 dev <port>'], ['Port d’accès', 'switchport mode access / access vlan 20', 'bridge vlan add vid 20 dev tap0 pvid untagged'], ['Trunk', 'switchport mode trunk / trunk allowed vlan …', 'ip link add link ens18 name ens18.20 type vlan id 20'], ['VLAN natif', 'switchport trunk native vlan 999', 'trames non étiquetées sur ens18'], ['Voir les VLAN', 'show vlan brief', 'bridge vlan show'], ['Voir les trunks', 'show interfaces trunk', 'ip -d link show'], ['Passerelle inter-VLAN', 'interface vlan 20 / ip address …', 'ip addr add … dev ens18.20'], ['Activer le routage', 'ip routing', 'sysctl -w net.ipv4.ip_forward=1'], ['Table MAC', 'show mac address-table', 'bridge fdb show']],
|
||||
examen: { titre: 'Sujet type · 20 points', q: ['Expliquer la différence entre un port d’accès et un port trunk, avec un exemple d’usage chacun. (3 pts)', 'Décrire le contenu du tag 802.1Q et justifier la plage 1 à 4094. (3 pts)', 'Écrire la configuration du switch et du routeur pour 3 VLAN donnés, en router-on-a-stick. (8 pts)', 'Diagnostiquer un cas de poste sans adresse à partir de sorties show fournies. (4 pts)', 'Citer deux bonnes pratiques de sécurité liées aux VLAN. (2 pts)'], r: ['Accès : un VLAN, poste ; trunk : plusieurs VLAN étiquetés, lien inter-switch', 'TPID 0x8100, PCP, DEI, VID 12 bits ; 0 et 4095 réservés', 'vlan / access / trunk allowed / sous-interfaces dot1Q + IP', 'Selon les sorties : VLAN absent du trunk, mauvais VLAN d’accès, natif incohérent', 'VLAN natif inutilisé, pas de VLAN 1, trunks explicites, DTP désactivé'] },
|
||||
prof: { deroule: [['Ouverture', 'Démonstration : capture d’un DHCP visible par toute la salle, puis la même chose après séparation en VLAN'], ['Cours', 'Domaine de diffusion, VLAN, accès et trunk, tag 802.1Q'], ['Démonstration', 'Configuration d’un switch en direct, show vlan brief'], ['Pratique', 'Lab VM : bridge VLAN, routeur sur un bâton, filtrage'], ['Clôture', 'Chaque binôme présente son plan de VLAN et ses règles de filtrage']], diff: 'Élèves en difficulté : plan de VLAN fourni, configuration à trous. Élèves avancés : switch de niveau 3, VLAN hopping en lab isolé, VLAN et hyperviseur Proxmox.', eval: 'Étapes du lab validées automatiquement, relevé de la configuration, sujet type.' }
|
||||
},
|
||||
exemples: [
|
||||
['Vérifier les VLAN d’un switch', 'Avant d’ajouter une salle.', 'Switch# show vlan brief', 'VLAN Name Status Ports\n1 default active Fa0/23, Fa0/24\n10 ADMIN active Fa0/17, Fa0/18, Fa0/19, Fa0/20\n20 PEDAGO active Fa0/1 - Fa0/16\n40 SERVEURS active Fa0/21, Fa0/22', 'On lit l’affectation de chaque port. Les ports 23 et 24 sont restés en VLAN 1 : à affecter ou à désactiver (shutdown) pour qu’aucun appareil branché dessus ne se retrouve dans le VLAN par défaut.'],
|
||||
['Contrôler un trunk', 'Un VLAN ne passe pas entre deux bâtiments.', 'Switch# show interfaces trunk', 'Port Mode Encapsulation Status Native vlan\nGi0/1 on 802.1q trunking 999\n\nPort Vlans allowed on trunk\nGi0/1 10,20,99', 'Le VLAN 30 (Wi-Fi invités) n’est pas dans la liste autorisée : les bornes de l’autre bâtiment ne le reçoivent pas. Correction : switchport trunk allowed vlan add 30.'],
|
||||
['Voir un tag 802.1Q', 'Vérifier qu’un trunk arrive bien étiqueté sur le routeur Linux.', 'sudo tcpdump -eni ens19 -c 2 vlan', '10:02:11 bc:24:11:5e:2a:10 > ff:ff:ff:ff:ff:ff, ethertype 802.1Q (0x8100), length 346: vlan 20, p 0, ethertype IPv4, 0.0.0.0.68 > 255.255.255.255.67: DHCP Discover', '-e affiche l’en-tête Ethernet. On voit le tag 0x8100, le VLAN 20 et la priorité 0 : une demande DHCP d’un poste du VLAN 20 arrive bien sur le trunk.'],
|
||||
['Créer une sous-interface Linux', 'Routeur Linux pour le laboratoire.', 'sudo ip link add link ens19 name ens19.30 type vlan id 30\nsudo ip addr add 10.62.30.1/24 dev ens19.30\nsudo ip link set ens19.30 up\nip -br addr show ens19.30', 'ens19.30@ens19 UP 10.62.30.1/24', 'Le routeur devient la passerelle du VLAN 30. Pour la rendre permanente, on déclare l’interface dans /etc/network/interfaces (iface ens19.30 inet static).'],
|
||||
['Retrouver le port d’un poste', 'Un poste suspect doit être localisé physiquement.', 'Switch# show mac address-table address 00:15:5d:0a:11:07', 'Vlan Mac Address Type Ports\n20 0015.5d0a.1107 DYNAMIC Fa0/9', 'Le poste est en VLAN 20 sur le port 9. Avec le plan de brassage, on retrouve la prise murale de la salle.'],
|
||||
['Filtrer entre VLAN', 'Interdire à la pédagogie d’accéder au VLAN administration.', 'sudo nft add rule inet filter forward iifname "ens19.20" oifname "ens19.10" drop\nsudo nft list chain inet filter forward', 'chain forward {\n iifname "ens19.20" oifname "ens19.10" drop\n}', 'Le routeur inter-VLAN est l’endroit idéal pour filtrer : tout le trafic entre VLAN passe par lui. On ajoute ensuite les exceptions nécessaires (serveur d’impression, par exemple) avant la règle de blocage.']
|
||||
],
|
||||
long: { figure: svg(720, 240, bx(250, 10, 220, 50, N, 'Routeur / pare-feu', 15) + '<line x1="360" y1="60" x2="360" y2="110" ' + K + ' stroke-dasharray="8 5"/>' + tx(372, 92, 'trunk 802.1Q : VLAN 10, 20, 30', 13) + bx(200, 110, 320, 50, W, 'Switch', 16) + [['VLAN 10 · ADMIN', Y], ['VLAN 20 · PEDAGO', G], ['VLAN 30 · INVITÉS', P]].map(function (v, i) { return '<line x1="' + (260 + i * 100) + '" y1="160" x2="' + (110 + i * 250) + '" y2="190" ' + K + '/>' + bx(20 + i * 250, 190, 180, 44, v[1], v[0], 14); }).join('')), legende: 'Un seul switch, trois réseaux étanches. Le passage de l’un à l’autre se fait par le routeur, où l’on filtre.', photo: 'Photo : switch administrable avec câbles de couleur par VLAN',
|
||||
lecture: ['Un VLAN, c’est une cloison posée dans un switch. Physiquement, tous les câbles arrivent au même endroit ; logiquement, chaque groupe de ports forme son propre réseau. On peut ainsi réorganiser un établissement entier depuis un clavier : déplacer un bureau, créer une salle d’examen isolée, ouvrir un réseau pour un événement, sans jamais toucher à un câble.', 'Les couleurs de câble dans les armoires ne sont pas décoratives : beaucoup d’établissements attribuent une couleur à chaque VLAN pour repérer d’un coup d’œil les usages. Ce n’est qu’une aide visuelle, la vérité est dans la configuration, mais elle évite des erreurs de brassage.', 'Le trunk est la notion clé. Un seul câble entre deux switchs transporte tous les VLAN, chaque trame portant son étiquette. Si un VLAN n’est pas autorisé sur un seul des trunks du chemin, il s’arrête là. La majorité des pannes de VLAN viennent de cet oubli.', 'Enfin, les VLAN sont un outil de sécurité, pas une sécurité en soi. Ils séparent, mais c’est le routeur ou le pare-feu entre les VLAN qui décide de ce qui passe. Un plan de VLAN sans règles de filtrage entre eux n’apporte qu’une partie du bénéfice.'] },
|
||||
schemas: { termes: ['VLAN', '802.1Q', 'trunk', 'VLAN natif', 'port d’accès', 'tag', 'VLAN ID', 'SVI', 'switchport', 'show vlan brief', 'show interfaces trunk', 'show mac address-table', 'dot1Q', 'ip_forward', 'router-on-a-stick', 'DTP', 'domaine de diffusion', 'nft'],
|
||||
figs: [[3, 'La trame étiquetée 802.1Q', svg(720, 110, bx(10, 30, 110, 50, N, 'MAC dest', 13) + bx(120, 30, 110, 50, N, 'MAC src', 13) + bx(230, 30, 150, 50, Y, 'tag 0x8100 · VID', 13) + bx(380, 30, 110, 50, N, 'EtherType', 13) + bx(490, 30, 150, 50, W, 'Données', 13) + bx(640, 30, 70, 50, N, 'FCS', 13) + tx(230, 100, '4 octets ajoutés sur le trunk', 13))]] }
|
||||
});
|
||||
|
||||
// ============ DHCP ============
|
||||
reg({
|
||||
cours: { id: 'dhcp', match: /DHCP/i,
|
||||
titre: 'DHCP : attribuer automatiquement les adresses, serveur, relais et baux', duree: '',
|
||||
niveau: 'BTS SIO SISR · BTS CIEL IR · BUT R&T S2 · TSSR',
|
||||
prerequis: ['Adressage IPv4 et sous-réseaux', 'VLAN 802.1Q (pour le relais)'],
|
||||
competences: ['BTS SIO SISR · Bloc 2 · Installer, configurer et administrer un service réseau', 'BTS SIO · Bloc 1 · Mettre à disposition des utilisateurs un service informatique', 'BTS CIEL · C04 · Installer un service réseau', 'BUT R&T · Compétence « Administrer »'],
|
||||
intro: 'Configurer à la main l’adresse, le masque, la passerelle et les serveurs DNS de 800 postes, 200 imprimantes et des centaines de téléphones qui arrivent chaque matin sur le Wi-Fi est impossible. Le protocole DHCP le fait automatiquement, en quelques millisecondes, à chaque connexion. Quand il tombe en panne, plus personne n’a de réseau. Savoir l’installer, le dimensionner, le sécuriser et le dépanner est donc une compétence de base du technicien réseau et un grand classique de l’épreuve SISR.',
|
||||
cm: [
|
||||
{ t: 'Ce que DHCP distribue', d: '', html: 'Le protocole <b>DHCP</b> (Dynamic Host Configuration Protocol, RFC 2131) fournit à un client toute sa configuration réseau : une <b>adresse IP</b> et son <b>masque</b>, la <b>passerelle</b> par défaut (option 3), les <b>serveurs DNS</b> (option 6), le <b>nom de domaine</b> (option 15), et selon les besoins le serveur NTP, le serveur de démarrage réseau PXE (options 66 et 67) ou le contrôleur des bornes Wi-Fi.<br><br>Cette configuration n’est pas donnée définitivement mais <b>prêtée</b> pour une durée limitée : le <b>bail</b>. À mi-bail, le client demande à le renouveler. S’il disparaît, l’adresse redevient libre à l’expiration. C’est ce qui permet de servir plus d’appareils qu’il n’y a d’adresses, tant qu’ils ne sont pas tous connectés en même temps.' },
|
||||
{ t: 'L’échange DORA', d: '', html: 'L’obtention d’un bail se fait en quatre messages, que l’on retient par l’acronyme <b>DORA</b>. Au départ, le client n’a pas d’adresse et ne connaît pas le serveur : il communique en <b>diffusion</b>, depuis l’adresse 0.0.0.0 vers 255.255.255.255, en UDP du port <b>68</b> (client) vers le port <b>67</b> (serveur).<br><br><b>Discover</b> : le client crie « y a-t-il un serveur DHCP ? ». <b>Offer</b> : chaque serveur qui l’entend propose une adresse. <b>Request</b> : le client choisit une offre et la demande officiellement, toujours en diffusion, pour que les autres serveurs sachent que leur offre est refusée. <b>Ack</b> : le serveur choisi confirme et le bail commence.<br><br>Avant d’utiliser l’adresse, un client bien conçu vérifie par une requête ARP que personne ne l’utilise déjà. Si c’est le cas, il envoie un <b>Decline</b> et recommence.', table: [['Message', 'Émetteur', 'Destination', 'Rôle'], ['DHCPDISCOVER', 'client 0.0.0.0:68', '255.255.255.255:67', 'chercher un serveur'], ['DHCPOFFER', 'serveur :67', 'client :68', 'proposer une adresse'], ['DHCPREQUEST', 'client 0.0.0.0:68', '255.255.255.255:67', 'accepter une offre'], ['DHCPACK', 'serveur :67', 'client :68', 'confirmer le bail'], ['DHCPNAK', 'serveur', 'client', 'refuser (adresse invalide)'], ['DHCPRELEASE', 'client', 'serveur', 'rendre l’adresse']] },
|
||||
{ t: 'Le cycle de vie d’un bail', d: '', html: 'Un bail ne se renouvelle pas au dernier moment. À <b>50 %</b> de sa durée (temps T1), le client envoie un Request directement à son serveur. Si le serveur répond, le bail repart pour une durée complète. Sans réponse, le client réessaie ; à <b>87,5 %</b> (temps T2), il passe en diffusion et accepte la réponse de n’importe quel serveur. À l’expiration, il perd son adresse et recommence un Discover.<br><br>Le choix de la durée est un compromis. Un bail long (8 jours) réduit le trafic et rend le réseau plus tolérant à une panne du serveur, mais garde les adresses des appareils partis. Un bail court (1 heure) libère vite les adresses, indispensable sur un Wi-Fi invités très fréquenté, mais multiplie les échanges. Dans un établissement, on choisit typiquement 8 heures à 1 jour pour les postes fixes et 1 à 2 heures pour le Wi-Fi.' },
|
||||
{ t: 'Étendues, exclusions et réservations', d: '', html: 'Une <b>étendue</b> (scope, ou subnet dans ISC) est la plage d’adresses que le serveur distribue sur un sous-réseau, avec ses options. On n’y met jamais tout le sous-réseau : on <b>exclut</b> les adresses fixes des équipements d’infrastructure (passerelle, serveurs, switchs, imprimantes réseau).<br><br>Une <b>réservation</b> associe une adresse précise à une adresse MAC. L’imprimante de la salle des professeurs reçoit ainsi toujours la même adresse tout en restant gérée par DHCP, ce qui est plus simple à maintenir qu’une adresse fixe configurée sur l’appareil : un changement de DNS, par exemple, se fait en un seul endroit.', table: [['Plage', 'Usage'], ['10.62.20.1', 'passerelle (exclue)'], ['10.62.20.2 à 10.62.20.19', 'serveurs et équipements fixes (exclus)'], ['10.62.20.20 à 10.62.21.200', 'étendue distribuée aux postes'], ['10.62.21.201 à 10.62.21.254', 'réservations (imprimantes, bornes)']] },
|
||||
{ t: 'Installer un serveur DHCP sous Debian', d: '', html: 'Le serveur historique <b>isc-dhcp-server</b> est encore très répandu dans les établissements et au programme des référentiels. Son successeur, <b>Kea</b>, développé par le même organisme (ISC), est recommandé pour les nouvelles installations ; sa configuration est en JSON mais les notions sont identiques. On configure d’abord l’interface d’écoute, puis les étendues.', exemple: '# /etc/default/isc-dhcp-server\nINTERFACESv4="ens18"\n\n# /etc/dhcp/dhcpd.conf\noption domain-name "lycee.local";\noption domain-name-servers 10.62.40.10, 10.62.40.11;\ndefault-lease-time 28800; # 8 h\nmax-lease-time 86400; # 24 h\nauthoritative;\n\nsubnet 10.62.20.0 netmask 255.255.254.0 {\n range 10.62.20.20 10.62.21.200;\n option routers 10.62.20.1;\n}\n\nhost imprimante-sdp {\n hardware ethernet 00:1b:a9:4c:22:10;\n fixed-address 10.62.21.210;\n}\n\n# Vérifier puis démarrer\nsudo dhcpd -t -cf /etc/dhcp/dhcpd.conf\nsudo systemctl restart isc-dhcp-server', attention: 'Le serveur doit posséder une adresse fixe dans chaque sous-réseau qu’il sert directement, et ne doit pas être client DHCP lui-même. Validez toujours la syntaxe avec dhcpd -t avant de redémarrer : une erreur de point-virgule arrête le service pour tout l’établissement.' },
|
||||
{ t: 'Le relais DHCP', d: '', html: 'Le Discover est une <b>diffusion</b> : il ne traverse pas les routeurs. Or dans un réseau segmenté en VLAN, on ne veut pas un serveur DHCP par VLAN. La solution est le <b>relais DHCP</b> (DHCP relay agent, commande ip helper-address chez Cisco) : le routeur ou le switch de niveau 3 qui sert de passerelle au VLAN intercepte le Discover et le retransmet en <b>unicast</b> au serveur central.<br><br>Le relais remplit le champ <b>giaddr</b> (gateway IP address) avec son adresse dans le VLAN du client. C’est ce champ qui permet au serveur de savoir de quel sous-réseau vient la demande, et donc dans quelle étendue choisir l’adresse. Un serveur qui reçoit une demande relayée sans étendue correspondant au giaddr ne répond pas.', exemple: '! Cisco, sur la passerelle du VLAN 20\ninterface vlan 20\n ip address 10.62.20.1 255.255.254.0\n ip helper-address 10.62.40.5\n\n# Linux, paquet isc-dhcp-relay\n# /etc/default/isc-dhcp-relay\nSERVERS="10.62.40.5"\nINTERFACES="ens19.20 ens19.30 ens19.40"' },
|
||||
{ t: 'Sécurité : faux serveurs et épuisement', d: '', html: 'DHCP n’a aucune authentification. Le premier serveur qui répond l’emporte. Un élève qui branche une box ou lance un serveur DHCP sur son ordinateur peut distribuer une fausse passerelle et intercepter tout le trafic de la salle : c’est le <b>faux serveur DHCP</b> (rogue DHCP). Une variante consiste à envoyer des milliers de Discover avec des MAC aléatoires pour vider l’étendue : c’est l’<b>épuisement</b> (DHCP starvation), qui prive tout le monde d’adresse.<br><br>La parade principale est le <b>DHCP snooping</b> des switchs : seuls les ports déclarés de confiance (trunk vers le serveur) ont le droit d’émettre des Offer et des Ack ; sur les ports d’accès, ces messages sont jetés. Couplé à une limite de débit par port et à la sécurité de port (nombre maximal de MAC), il neutralise les deux attaques.', exemple: 'Switch(config)# ip dhcp snooping\nSwitch(config)# ip dhcp snooping vlan 20,30\nSwitch(config)# interface gi0/1\nSwitch(config-if)# ip dhcp snooping trust\nSwitch(config)# interface range fa0/1 - 24\nSwitch(config-if-range)# ip dhcp snooping limit rate 10' },
|
||||
{ t: 'Dépanner DHCP', d: '', html: 'Le symptôme le plus courant est un poste en <b>169.254.x.x</b> : il n’a reçu aucune réponse. On vérifie dans l’ordre : le lien et le VLAN du port, la présence du relais sur la passerelle du VLAN, l’état du service et ses journaux sur le serveur, puis l’étendue elle-même (pleine ?). Le second symptôme est un poste qui reçoit une adresse d’un mauvais réseau : faux serveur, ou port dans le mauvais VLAN.<br><br>Côté client Linux, <code>sudo dhclient -v ens18</code> rejoue l’échange en affichant chaque message. Côté serveur, <code>journalctl -u isc-dhcp-server</code> montre les DHCPDISCOVER reçus et les réponses, et le fichier <code>/var/lib/dhcp/dhcpd.leases</code> liste tous les baux en cours. Une capture <code>tcpdump -ni ens18 port 67 or port 68</code> tranche en cas de doute.' }
|
||||
],
|
||||
synthese: ['DHCP distribue adresse, masque, passerelle, DNS et options pour la durée d’un bail', 'DORA : Discover, Offer, Request, Ack, en UDP 67/68 et en diffusion', 'Renouvellement à 50 % (T1) puis 87,5 % (T2)', 'Étendue + exclusions + réservations par MAC', 'Relais DHCP (ip helper-address) : la diffusion traverse le routeur grâce au champ giaddr', 'DHCP snooping contre les faux serveurs et l’épuisement', '169.254.x.x = aucun serveur n’a répondu'],
|
||||
qcm: [
|
||||
['Quels ports utilise DHCP ?', ['TCP 67/68', 'UDP 67 (serveur) et 68 (client)', 'UDP 53', 'TCP 80'], 1, 'UDP, serveur 67, client 68.'],
|
||||
['Dans quel ordre se déroule l’échange ?', ['Request, Offer, Discover, Ack', 'Discover, Offer, Request, Ack', 'Offer, Discover, Ack, Request', 'Discover, Request, Offer, Ack'], 1, 'DORA.'],
|
||||
['Pourquoi le Request est-il envoyé en diffusion ?', ['Par erreur', 'Pour informer les autres serveurs que leur offre est refusée', 'Pour aller plus vite', 'Parce que le client a déjà une IP'], 1, 'Tous les serveurs qui ont fait une offre l’entendent.'],
|
||||
['À quel moment un client tente-t-il de renouveler son bail ?', ['À l’expiration', 'À 50 % de la durée', 'Au redémarrage seulement', 'Toutes les heures'], 1, 'T1 = 50 %.'],
|
||||
['Pourquoi un serveur DHCP central ne reçoit-il pas les demandes d’un autre VLAN sans configuration ?', ['Le pare-feu bloque', 'Le Discover est une diffusion qui ne traverse pas les routeurs', 'DHCP ne supporte pas les VLAN', 'Il faut IPv6'], 1, 'Il faut un relais.'],
|
||||
['Quel champ permet au serveur de choisir la bonne étendue pour une demande relayée ?', ['chaddr', 'giaddr', 'yiaddr', 'ciaddr'], 1, 'L’adresse du relais dans le VLAN du client.'],
|
||||
['Quelle fonction de switch bloque les faux serveurs DHCP ?', ['Spanning tree', 'DHCP snooping', 'Port mirroring', 'LLDP'], 1, 'Seuls les ports de confiance peuvent envoyer Offer et Ack.'],
|
||||
['Un poste obtient 169.254.12.4. Première hypothèse ?', ['Il est sur Internet', 'Aucun serveur DHCP n’a répondu', 'Le DNS est en panne', 'Il a une adresse IPv6'], 1, 'APIPA.'],
|
||||
['Pour que l’imprimante ait toujours la même adresse tout en restant gérée par DHCP, on utilise :', ['une exclusion', 'une réservation par adresse MAC', 'un bail infini', 'une adresse APIPA'], 1, 'host … hardware ethernet … fixed-address.'],
|
||||
['Quelle commande valide la configuration d’isc-dhcp-server ?', ['dhcpd -t -cf /etc/dhcp/dhcpd.conf', 'systemctl check dhcp', 'dhcp --test', 'dhclient -t'], 0, 'À lancer avant chaque redémarrage.'],
|
||||
['Quelle durée de bail choisir pour un Wi-Fi invités très fréquenté ?', ['30 jours', '8 jours', '1 à 2 heures', 'Infinie'], 2, 'Pour libérer rapidement les adresses.']
|
||||
],
|
||||
td: [
|
||||
{ n: 'Échauffement', c: 'Compléter le tableau DORA : pour chaque message, adresse et port source, adresse et port destination.', r: 'Discover : 0.0.0.0:68 → 255.255.255.255:67\nOffer : serveur:67 → client ou diffusion:68\nRequest : 0.0.0.0:68 → 255.255.255.255:67\nAck : serveur:67 → client ou diffusion:68' },
|
||||
{ n: 'Échauffement', c: 'Un bail dure 8 heures et commence à 8 h. À quelle heure le client tente-t-il de le renouveler auprès de son serveur, puis auprès de n’importe quel serveur ?', r: 'T1 = 50 % → 12 h ; T2 = 87,5 % → 15 h' },
|
||||
{ n: 'Application', c: 'Écrire la configuration dhcpd.conf pour le VLAN 30 invités (10.62.30.0/24) : passerelle .1, DNS 10.62.40.10, étendue de .20 à .250, bail de 1 heure.', r: 'subnet 10.62.30.0 netmask 255.255.255.0 {\n range 10.62.30.20 10.62.30.250;\n option routers 10.62.30.1;\n option domain-name-servers 10.62.40.10;\n default-lease-time 3600;\n max-lease-time 7200;\n}' },
|
||||
{ n: 'Application', c: 'Le serveur DHCP est dans le VLAN 40 (10.62.40.5). Configurer la passerelle Cisco des VLAN 20 et 30 pour que leurs postes obtiennent une adresse.', r: 'interface vlan 20\n ip helper-address 10.62.40.5\ninterface vlan 30\n ip helper-address 10.62.40.5\n(et une étendue par sous-réseau sur le serveur)' },
|
||||
{ n: 'Application', c: 'Tous les postes de la salle B204 reçoivent une adresse en 192.168.1.x alors que la salle est en 10.62.20.0/23. Diagnostiquer et corriger.', r: 'Un faux serveur (box, VM en mode pont) répond plus vite que le vrai. Le trouver : tcpdump -ni ens18 port 67 et relever la MAC source de l’Offer, puis show mac address-table pour le port. Prévention : DHCP snooping.' },
|
||||
{ n: 'Approfondissement', c: 'L’étendue des invités (231 adresses, bail de 8 h) est pleine chaque matin de journée portes ouvertes. Proposer deux solutions et les chiffrer.', r: 'Réduire le bail à 1 h : les adresses des visiteurs partis sont libérées 7 h plus tôt. Agrandir en /23 (≈ 500 adresses). Idéalement les deux.' },
|
||||
{ n: 'Approfondissement', c: 'Expliquer le principe de l’attaque par épuisement DHCP et les deux protections à configurer sur un switch.', r: 'Des milliers de Discover avec des MAC aléatoires réservent toutes les adresses. Parades : ip dhcp snooping limit rate sur les ports d’accès, et port-security avec un nombre maximal de MAC par port.' }
|
||||
],
|
||||
tp: { type: 'Lab VM', url: 'apercu-labs.html', desc: 'Un serveur isc-dhcp-server, un relais Linux et des clients dans deux VLAN.', etapes: ['Installer isc-dhcp-server et fixer l’adresse du serveur', 'Créer l’étendue du VLAN serveurs et tester avec dhclient -v', 'Ajouter une réservation par MAC', 'Configurer le relais pour le VLAN 20', 'Observer DORA avec tcpdump', 'Consulter les baux dans dhcpd.leases'] },
|
||||
plusLoin: [['RFC 2131 · DHCP', 'https://www.rfc-editor.org/rfc/rfc2131'], ['RFC 2132 · options DHCP', 'https://www.rfc-editor.org/rfc/rfc2132'], ['ISC Kea · documentation', 'https://kea.readthedocs.io/'], ['Debian Wiki · DHCP Server', 'https://wiki.debian.org/DHCP_Server']] },
|
||||
plus: {
|
||||
cas: { titre: 'Mise en situation · La rentrée et ses 600 nouveaux appareils', texte: 'Le jour de la rentrée, les élèves de BTS connectent leurs ordinateurs personnels au Wi-Fi pédagogique. À 10 h, les nouveaux arrivants n’obtiennent plus d’adresse. Le technicien consulte les journaux du serveur : « no free leases » sur l’étendue Wi-Fi. L’étendue compte 200 adresses avec un bail de 7 jours, dimensionnée pour l’année précédente. Il passe le bail à 4 heures, étend le sous-réseau en /23 après accord de l’équipe réseau du rectorat, met à jour l’étendue, puis ajoute une supervision qui alerte à 80 % d’occupation.' },
|
||||
erreurs: ['Inclure l’adresse de la passerelle dans l’étendue', 'Oublier le relais sur un nouveau VLAN', 'Laisser le serveur DHCP en client DHCP', 'Redémarrer le service sans dhcpd -t : une faute de syntaxe coupe tout le monde', 'Choisir un bail de plusieurs jours sur un Wi-Fi public', 'Oublier authoritative et laisser les clients garder des adresses d’un ancien réseau', 'Ne pas activer le DHCP snooping'],
|
||||
memo: [['Besoin', 'Commande ou fichier'], ['Configurer le serveur', '/etc/dhcp/dhcpd.conf'], ['Choisir l’interface', '/etc/default/isc-dhcp-server'], ['Valider la syntaxe', 'dhcpd -t -cf /etc/dhcp/dhcpd.conf'], ['Redémarrer', 'systemctl restart isc-dhcp-server'], ['Voir les journaux', 'journalctl -u isc-dhcp-server -f'], ['Voir les baux', '/var/lib/dhcp/dhcpd.leases'], ['Tester côté client', 'dhclient -v ens18 · dhclient -r'], ['Capturer l’échange', 'tcpdump -ni ens18 port 67 or port 68'], ['Relais Cisco', 'ip helper-address <serveur>'], ['Protéger', 'ip dhcp snooping · trust sur le trunk']],
|
||||
examen: { titre: 'Sujet type · 20 points', q: ['Décrire l’échange DORA avec adresses et ports. (4 pts)', 'Écrire la configuration d’un serveur servant deux sous-réseaux, avec une réservation. (6 pts)', 'Expliquer le rôle du relais et du champ giaddr, et configurer le relais sur la passerelle. (4 pts)', 'Diagnostiquer un poste en 169.254.x.x à partir des sorties fournies. (4 pts)', 'Présenter le DHCP snooping. (2 pts)'], r: ['Voir tableau DORA du cours', 'deux blocs subnet + host … fixed-address', 'Relaie la diffusion en unicast ; giaddr = adresse du relais qui désigne l’étendue ; ip helper-address', 'VLAN, relais, service, étendue pleine', 'Ports de confiance, Offer/Ack jetés ailleurs'] },
|
||||
prof: { deroule: [['Ouverture', 'Chaque élève tape ip addr : d’où vient cette adresse ?'], ['Cours', 'DORA, bail, étendues, réservations'], ['Démonstration', 'tcpdump pendant un dhclient -v projeté au tableau'], ['Pratique', 'Lab VM : serveur, réservation, relais'], ['Cours', 'Sécurité : faux serveur et snooping'], ['Clôture', 'Quiz flash de 5 questions']], diff: 'Élèves en difficulté : configuration à compléter, schéma DORA imprimé. Élèves avancés : migration vers Kea, basculement entre deux serveurs, options PXE.', eval: 'Étapes du lab validées, analyse d’une capture DORA, sujet type.' }
|
||||
},
|
||||
exemples: [
|
||||
['Rejouer DORA côté client', 'Un poste Linux n’a pas d’adresse.', 'sudo dhclient -r ens18 && sudo dhclient -v ens18', 'DHCPDISCOVER on ens18 to 255.255.255.255 port 67 interval 3\nDHCPOFFER of 10.62.20.57 from 10.62.20.1\nDHCPREQUEST for 10.62.20.57 on ens18 to 255.255.255.255 port 67\nDHCPACK of 10.62.20.57 from 10.62.20.1\nbound to 10.62.20.57 -- renewal in 13906 seconds.', '-r rend le bail, -v affiche chaque message. L’offre vient de 10.62.20.1 : c’est le relais sur la passerelle. Renouvellement dans 13 906 s, soit environ la moitié d’un bail de 8 h.'],
|
||||
['Lire les journaux du serveur', 'Des postes n’obtiennent plus d’adresse.', 'journalctl -u isc-dhcp-server --since "10 min ago" | tail -3', 'DHCPDISCOVER from 3c:22:fb:10:7a:01 via 10.62.30.1: network 10.62.30.0/24: no free leases\nDHCPDISCOVER from 88:66:5a:0e:21:9c via 10.62.30.1: network 10.62.30.0/24: no free leases', '« via 10.62.30.1 » montre que le relais du VLAN 30 fonctionne ; « no free leases » que l’étendue est pleine. Il faut raccourcir le bail ou agrandir le sous-réseau.'],
|
||||
['Consulter un bail', 'Qui utilise l’adresse 10.62.20.57 ?', 'grep -A6 "lease 10.62.20.57" /var/lib/dhcp/dhcpd.leases', 'lease 10.62.20.57 {\n starts 3 2026/09/30 08:02:11;\n ends 3 2026/09/30 16:02:11;\n binding state active;\n hardware ethernet bc:24:11:5e:2a:10;\n client-hostname "PC-B204-07";\n}', 'Le fichier des baux indique la MAC et le nom de la machine. Avec show mac address-table sur le switch, on retrouve la prise physique.'],
|
||||
['Capturer un faux serveur', 'La salle reçoit des adresses en 192.168.1.x.', 'sudo tcpdump -eni ens18 -c 4 "udp port 67 or udp port 68"', '… 00:15:5d:0a:11:07 > ff:ff:ff:ff:ff:ff … 0.0.0.0.68 > 255.255.255.255.67: DHCP Discover\n… f4:ca:e5:31:88:02 > ff:ff:ff:ff:ff:ff … 192.168.1.1.67 > 255.255.255.255.68: DHCP Offer\n… 00:1b:a9:4c:22:01 > … 10.62.20.1.67 > 255.255.255.255.68: DHCP Offer', 'Deux offres arrivent : celle du vrai relais (10.62.20.1) et celle d’un intrus en 192.168.1.1, MAC f4:ca:e5:31:88:02. On la cherche sur le switch pour trouver le port, souvent une box ou un routeur Wi-Fi branché par un élève.'],
|
||||
['Tester la configuration avant redémarrage', 'Ajout d’une nouvelle étendue.', 'sudo dhcpd -t -cf /etc/dhcp/dhcpd.conf', '/etc/dhcp/dhcpd.conf line 24: semicolon expected.\n option routers 10.62.30.1\n ^\nConfiguration file errors encountered -- exiting', 'Il manque un point-virgule ligne 24. Sans ce test, le redémarrage aurait arrêté le service DHCP pour tout l’établissement.'],
|
||||
['Configurer le relais sur Linux', 'Le routeur Linux sert trois VLAN, le serveur est dans le VLAN 40.', 'sudo apt install isc-dhcp-relay\n# SERVERS="10.62.40.5" INTERFACES="ens19.20 ens19.30 ens19.40"\nsudo systemctl restart isc-dhcp-relay\njournalctl -u isc-dhcp-relay | tail -2', 'Forwarded BOOTREQUEST for bc:24:11:5e:2a:10 to 10.62.40.5\nForwarded BOOTREPLY for bc:24:11:5e:2a:10 to 10.62.20.57', 'Le relais reçoit la diffusion du poste et la transmet au serveur en unicast, puis relaie la réponse. L’interface du VLAN du serveur doit aussi figurer dans INTERFACES pour recevoir les réponses.']
|
||||
],
|
||||
long: { figure: svg(720, 250, bx(20, 20, 160, 50, Y, 'Client', 16) + bx(540, 20, 160, 50, G, 'Serveur DHCP', 16) + '<line x1="100" y1="70" x2="100" y2="240" ' + K + ' stroke-dasharray="6 6"/><line x1="620" y1="70" x2="620" y2="240" ' + K + ' stroke-dasharray="6 6"/>' + [['Discover', 1, 95], ['Offer', 0, 135], ['Request', 1, 175], ['Ack', 0, 215]].map(function (m) { var y = m[2]; return (m[1] ? '<line x1="100" y1="' + y + '" x2="615" y2="' + (y + 10) + '" ' + K + '/>' : '<line x1="620" y1="' + y + '" x2="105" y2="' + (y + 10) + '" ' + K + '/>') + tx(320, y - 4, m[0], 15); }).join('')), legende: 'DORA : quatre messages pour obtenir un bail.', photo: 'Photo : salle informatique avec des postes au démarrage',
|
||||
lecture: ['Quand un élève ouvre son ordinateur et que le Wi-Fi se connecte, il ne se passe en apparence rien. En réalité, en quelques millisecondes, son appareil a crié sur le réseau qu’il cherchait une adresse, un serveur lui en a proposé une, il l’a acceptée, et le serveur lui a confirmé son bail avec l’adresse de la passerelle et des DNS. Sans ce dialogue, il faudrait configurer chaque appareil à la main.', 'DHCP est l’un des rares services dont tout le monde dépend et que personne ne voit. C’est pour cela que sa panne est si spectaculaire : les appareils déjà connectés continuent quelques heures grâce à leur bail, puis tombent les uns après les autres. Un technicien averti sait qu’une panne DHCP se manifeste souvent avec un décalage, et regarde les journaux du serveur dès les premiers appels.', 'Dans un réseau segmenté en VLAN, un seul serveur central sert tous les sous-réseaux grâce aux relais. C’est plus simple à administrer, mais cela fait du serveur et des relais des points critiques. Les établissements importants installent deux serveurs en basculement (failover), qui se partagent les étendues et se remplacent mutuellement.', 'Enfin, DHCP illustre parfaitement une réalité de la sécurité réseau : les protocoles de base ont été conçus à une époque où tous les participants étaient de confiance. Il n’y a aucune authentification, et c’est au réseau lui-même, par le DHCP snooping des switchs, de faire respecter les règles.'] },
|
||||
schemas: { termes: ['DHCP', 'DORA', 'Discover', 'Offer', 'Request', 'Ack', 'NAK', 'bail', 'T1', 'T2', 'étendue', 'réservation', 'exclusion', 'relais', 'giaddr', 'ip helper-address', 'DHCP snooping', 'isc-dhcp-server', 'Kea', 'dhcpd.conf', 'dhcpd.leases', 'dhclient', 'APIPA', '169.254', 'UDP 67', 'UDP 68'],
|
||||
figs: [[5, 'Le relais transforme la diffusion en unicast', svg(720, 140, bx(10, 40, 140, 50, Y, 'Poste VLAN 20', 13) + '<line x1="150" y1="65" x2="258" y2="65" ' + K + '/>' + tx(160, 55, 'diffusion', 12) + bx(260, 30, 200, 70, L, 'Relais .20.1', 14) + '<line x1="460" y1="65" x2="568" y2="65" ' + K + '/>' + tx(470, 55, 'unicast', 12) + bx(570, 40, 140, 50, G, 'Serveur .40.5', 13) + tx(260, 125, 'giaddr = 10.62.20.1 → étendue du VLAN 20', 13))]] }
|
||||
});
|
||||
})();
|
||||
Loading…
Add table
Add a link
Reference in a new issue