===== DHCP ===== Kea est à relancer dès que la VM SQL est éteinte : les services kea plantent et ne redémarrent pas seuls lorsque le SQL n'est plus joignable Les fichiers de configurations de Kea sont disponibles sur le [[http://gitlab.minet.net/adh6/kea|gitlab]] Nous utilisons [[http://kea.isc.org/wiki|ISC-KEA]], notamment car il permet l'enregistrement de réservations d'adresses IP directement depuis une base de donnée (MySQL, pgSQL), pour ne plus dépendre d'un [[http://gitlab.minet.net/adh5/dhcp-http-json|patch]] qui permettait au serveur ISC-DHCP d'obtenir les réservations depuis l'API JSON d'ADH5. === Installation === Kea est actuellement disponible pour Debian depuis les dépôts Stretch, l'installation sur Debian Jessie s'effectue comme suit : $ echo "deb http://ftp.debian.org/debian stretch main"\n"deb-src http://ftp.debian.org/debian stretch main" > /etc/apt/sources.list.d/stretch.list $ echo "APT::Default-Release "jessie";" > /etc/apt/apt.conf.d/default-release $ apt update $ apt -t stretch install kea-dhcp4-server kea-dhcp6-server kea-admin kea-doc Pour une installation depuis les sources, la procédure est détaillée [[http://kea.isc.org/docs/kea-guide.html#installation|ici]] === Considérations réseau === Pour le filaire, le DHCP reçoit (en unicast) les requêtes depuis le routeur de MiNET qui intercepte les messages DHCP broadcastés par les utilisateurs, le DHCP n'a donc pas besoin d'une interface dans les VLANs adhérents, mais dans les vlans 102 (IPv4) et 2 (IPv6). Du côté du routeur, il suffit de rajouter, dans les configurations des interfaces VLANs adhérents : ip helper-address 192.168.102.28 ipv6 dhcp relay destination 2001:660:3203:422::A28 Pour le wifi, le DHCP distribue des adresses de façon dynamique derrière un NAT, il reçoit alors directement les requêtes sur ses interfaces dans les VLANs 6,10,17 respectivement, pour les Wi-Fi U1/U2/U4,U3/U5,U6/U7/Foyer. Il suffit donc d'indiquer sur les WLC et chaque bornes autonomes l'adresse IP de ces interfaces. En bref, Kea a seulement besoin d'une interface dans les vlans 102,2(ipv6),6,10,17 et les adresses de ces interfaces doivent être renseignées au niveau du routeur (vlan 102,2) et des WLC (vlan 10,17) et des bornes autonomes (vlan 6). ==== DHCPv4 ==== apt install kea-dhcp4-server == Options DHCP == Un serveur DHCP, en plus de distribuer des adresses IP, peut faire parvenir au client différents paramètres et configurations réseau. Nous utilisons les options DHCP qui permettent de pousser au client une configuration DNS, l'adresse IP de la gateway du sous-réseau, ainsi que le nom de domaine du réseau sur lequel il est connecté. === Filaire === Pour le filaire, le dhcp pourrait être qualifié de "statique" étant donné que les sous-réseaux enregistrés dans sa configuration n'ont pas de pool d'adresses disponible. En effet, les adresses sont attribuées uniquement par réservation, ainsi, un client se verra toujours attribuer la même adresse IP par Kea. En IPv4, l'adresse MAC de l'interface du client est utilisée comme identifiant pour la réservation, les réservations sont alors une table de correspondance MAC vers IP. Concrètement, lors de l'ajout d'un appareil sur ADH, des adresses IPv4 & IPv6 sont associées à l'adresse MAC saisie au sein de la base de donnée, qui est ensuite lu directement par KEA lorsqu'une requête lui parvient. Dans le cas d'une requête qui lui parviendrais avec une adresse MAC client introuvable dans la base de donnée, KEA, ne pouvant trouver de réservation pour cette MAC, essayera de lui attribuer une adresse depuis les pools spécifiées sur le sous-réseau depuis lequel le client contacte KEA, mais puisqu'aucune pool d'adresse n'est spécifiée pour les sous-réseaux adhérents en filaire, le client n'obtiens finalement pas d'adresse. (Ce dernier cas de figure peut se présenter uniquement pour un port désauthentifié ou un appareil pouvant utiliser MAB, puisque le serveur radius n'autorise pas les appareils dont l'adresse MAC ne figure pas dans la base de donnée). === Wifi === Pour le wifi, les adresses sont distribuées de façon dynamique sur les plages 172.21.0.0/16 (U1,U2,U4), 172.25.0.0/16 (U3,U5), 172.27.0.0/16 (U6,U7,Wifi-foyer) ; il n'y a donc plus de réservations. ==== DHCPv6 ==== apt install kea-dhcp6-server == Options DHCP == Les options DHCP utilisée sur le DHCPv6 sont celles permettant de pousser au client une configuration DNS, à savoir l'adresse IP de nos DNS, ainsi que le nom de domaine du réseau sur lequel il est connecté. === Filaire === Le fonctionnement du DHCPv6 filaire est actuellement assez similaire à celui du DHCPv4 ; il faut cependant faire attention puisque les messages clients sont relayés par le routeur en unicast au serveur Kea-DHCPv6, qui lui écoute, par défaut, uniquement sur l'adresse du groupe multicast utilisé pour les discussions entre client et serveur DHCPv6. Ainsi, il faut bien faire attention à indiquer dans la configuration de Kea-DHCPv6 de bien écouter en unicast en spécifiant l'adresse IP link global utilisée sur l'interface d'écoute. === Wifi === Pour l'instant, aucun adressage IPv6 n'est effectué sur le Wi-Fi. ==== Backend SQL ==== C'est une, sinon la, fonctionnalité pour laquelle nous utilisons ISC-KEA. KEA dispose de plusieurs backend (CSV, MySQL, PgSQL, CQL) pour garder en mémoire les leases DHCP et, ce qui nous intéresse, les réservations d'hôtes. Actuellement, le backend MySQL est utilisé uniquement pour les réservations d'hôtes (lecture seule) tandis que le backend CSV est utilisé pour les leases DHCP (lecture et écriture). === Initialisation de la DB === apt install kea-admin Ce paquet debian installe dans '' /usr/share/kea-admin/scripts/'' un certain nombre de scripts d'administration pour Kea et sa base de donnée, notamment '' /usr/share/kea-admin/scripts/mysql/dhcpdb_create.mysql'' qui contient le schéma de la base de donnée utilisée par Kea (importer le fichier .mysql dans le MySQL MiNET pour initialiser la base utilisée par Kea), et un certain nombre de script de mise à jour du schéma de la base de donnée (si jamais une maj de Kea change le schéma). === Création des réservations d'hôtes à partir de la base d'ADH === Pour construire les réservations d'hôtes à partir de la base d'ADH de manière dynamique, nous remplaçons uniquement deux tables de la BDD de KEA par des vues faites à partir de champs des tables de la base ADH et de champs statiques. La vue ''hosts'' utilise la requête de sélection suivante : select `adh5-prod`.`ordinateurs`.`id` AS `host_id`, unhex(replace(`adh5-prod`.`ordinateurs`.`mac`,'-','')) AS `dhcp_identifier`, 0 AS `dhcp_identifier_type`,`adh5-prod`.`vlans`.`numero` AS `dhcp4_subnet_id`, `adh5-prod`.`vlans`.`numero` AS `dhcp6_subnet_id`, inet_aton(`adh5-prod`.`ordinateurs`.`ip`) AS `ipv4_address`, NULL AS `hostname`, NULL AS `dhcp4_client_classes`, NULL AS `dhcp6_client_classes`, NULL AS `dhcp4_next_server`, NULL AS `dhcp4_server_hostname`, NULL AS `dhcp4_boot_file_name` from (((`adh5-prod`.`ordinateurs` join `adh5-prod`.`adherents`) join `adh5-prod`.`chambres`) join `adh5-prod`.`vlans`) where ((`adh5-prod`.`ordinateurs`.`adherent_id` = `adh5-prod`.`adherents`.`id`) and (`adh5-prod`.`adherents`.`chambre_id` = `adh5-prod`.`chambres`.`id`) and (`adh5-prod`.`chambres`.`vlan_id` = `adh5-prod`.`vlans`.`id`) and (`adh5-prod`.`ordinateurs`.`ip` like '%.%.%.%')) La vue ''ipv6_reservations'' utilise la requête de sélection suivante : select `adh5-prod`.`ordinateurs`.`id` AS `reservation_id`, `adh5-prod`.`ordinateurs`.`ipv6` AS `address`, 128 AS `prefix_len`, 0 AS `type`, NULL AS `dhcp6_iaid`, `adh5-prod`.`ordinateurs`.`id` AS `host_id` from `adh5-prod`.`ordinateurs` where ((`adh5-prod`.`ordinateurs`.`ip` like '%.%.%.%') and (`adh5-prod`.`ordinateurs`.`ipv6` like '2001:660:3203:%::a%')) ==== Liens externes ==== [[http://kea.isc.org/docs/kea-guide.html|Manuel KEA]] [[ https://kea.isc.org/wiki/HostReservationDesign | KEA IPv6 Host Reservation ]]