ou comment connaître l’adresse que le serveur DHCP va attribuer à un nouvel équipement en sachant juste où il est connecté.

DHCP s’est imposé en méthode configuration réseau universelle, y compris pour des ressources du type serveur, pour lesquelles nous nous attendons évidemment une adresse IP connue et fixe.

Pour cela, vous connaissez le paramétrage DHCP liant l’adresse MAC de l’équipement et l’adresse IP attribuée. Je vous propose une méthode alternative qui associe le port d’un switch et l’adresse allouée par DHCP à l’équipement situé derrière ce port.

Dans mon environnement de LAB, je déplace régulièrement des équipements et j’apprécie ceux qui sont en auto-configuration réseau, mais à chaque installation, voire reboot, je dois chercher sur le serveur DHCP quelle adresse IP a été allouée à mon équipement.

Bref, ce serait le bonheur si je pouvais allouer des adresses DHCP prédictives. Par exemple qui dépendent seulement du port du switch sur lequel je branche l’équipement. Comme ci-dessous, un équipement branché sur le port X, va recevoir l’adresse 10.0.0.X/24.

Et cette fonction existe chez Cisco depuis pas mal d’années sous l’appellation DHCP Server Port-Based Address Allocation. Voici comment la mettre en place sous un Switch 3650.

La fonction s’active très simplement avec les 2 lignes suivantes :

ip dhcp use subscriber-id client-id
ip dhcp subscriber-id interface-name

Regardons la sortie du debug ip dhcp server packet pour comprendre son fonctionnement :

mon_switch#debug ip dhcp server packet
mon_switch#
mon_switch#
Aug 10 08:48:39.667: Option 82 not present
Aug 10 08:48:39.667: DHCPD: tableid for 10.0.0.1 on Vlan10 is 0
Aug 10 08:48:39.667: DHCPD: client's VPN is .
Aug 10 08:48:39.668: Option 82 not present
Aug 10 08:48:39.668: DHCPD: DHCPDISCOVER received from client 0100.e04c.6800.f2 on interface Vlan10
Aug 10 08:48:39.668: Option 82 not present
mon_switch#
mon_switch#conf t
Enter configuration commands, one per line.  End with CNTL/Z.
mon_switch(config)#ip dhcp use subscriber-id client-id
mon_switch(config)#ip dhcp subscriber-id interface-name
mon_switch(config)#^Z
mon_switch#
mon_switch#
Aug 10 08:50:05.014: Option 82 not present
Aug 10 08:50:05.014: DHCPD: tableid for 10.0.0.1 on Vlan10 is 0
Aug 10 08:50:05.014: DHCPD: client's VPN is .
Aug 10 08:50:05.014: DHCPD: using subscriber-id as client-id
Aug 10 08:50:05.014: DHCPD: DHCPDISCOVER received from client 0047.6931.2f30.2f37 on interface Vlan10.
Aug 10 08:50:05.015: Option 82 not present

Les commandes ont remplacé l’identifiant client DHCP, initialement son adresse MAC précédée par l’octet 00, par la séquence 0047.6931.2f30.2f37. Les furieux de l’ASCII auront immédiatement traduit la séquence en 00 + « Gi1/0/7« , soit l’identifiant court de l’interface, comme promis par la doc Cisco.

Il reste à configurer le serveur DHCP pour attribuer une adresse fixe à chaque client-id. Si nous utilisons le serveur DHCP intégré à l’IOS, la configuration commence par la configuration commune au subnet du Vlan10 :

ip dhcp pool Subnet-10.0.0.0
 network 10.0.0.0 255.255.255.0
 default-router 10.0.0.1
 dns-server 8.8.8.8 8.8.4.4
 domain-name jounin.space

puis, se continue par la configuration unitaire des clients :

...
ip dhcp pool IP-Fixe-Gi0/0/7
 host 10.0.0.7 255.255.255.0
 client-identifier 0047.6931.2f30.2f37
...
ip dhcp pool IP-Fixe-Gi0/0/10
 host 10.0.0.10 255.255.255.0
 client-identifier 0047.6931.2f30.2f31.30
...

Un shut/no shut permet de forcer une nouvelle requête DHCP pour arriver au résultat attendu :

Aug 10 09:02:29: %LINK-3-UPDOWN: Interface GigabitEthernet1/0/7, changed state to up
Aug 10 09:02:30.465: Option 82 not present
Aug 10 09:02:30.465: DHCPD: tableid for 10.0.0.1 on Vlan10 is 0
Aug 10 09:02:30.465: DHCPD: client's VPN is .
Aug 10 09:02:30.465: DHCPD: using subscriber-id as client-id
Aug 10 09:02:30.465: DHCPD: DHCPREQUEST received from client 0047.6931.2f30.2f37.
Aug 10 09:02:30.465: DHCPD: DHCPREQUEST received on interface Vlan10.
Aug 10 09:02:30.466: DHCPD: Appending system default domain
Aug 10 09:02:30.466: DHCPD: Using hostname 'Philippes-MBP.jounin.space.' for dynamic update (from hostname option)DHCPD: Setting only requested parameters
Aug 10 09:02:30.466: DHCPD: src nbma addr as zero
Aug 10 09:02:30.466: DHCPD: ARP entry exists (10.0.0.7, 00e0.4c68.00f2).
Aug 10 09:02:30.466: DHCPD: egress Interfce Vlan10
Aug 10 09:02:30.467: DHCPD: unicasting BOOTREPLY to client 00e0.4c68.00f2 (10.0.0.7).

Et voilà, fini de s’interroger sur l’adresse IP allouée à mon équipement fraîchement mis en service !

Author

Philippe est architecte réseau chez un opérateur depuis 20 ans. Il a le double rôle de concevoir des réseaux pour les clients, puis de les faire fonctionner. Bien que passionné par l'innovation, il reste un fervent supporter de la RFC 1925 et garde tout son sens critique par rapport au hype et aux promesses féeriques des constructeurs. Ancien développeur, il tente de garder la main en programmant des Arduino en C ou des utilitaires opensource en Ruby. On peut également le croiser en randonnée dans les collines ou dans un club de bridge.

2 Comments

  1. Excellent article, je ne connaissais pas cette possibilité d’allouer des adresses IP sur des ports d’un équipement Cisco.

    Cependant, cela n’est propre qu’à l’équipement, il n’est pas possible de récupérer un client-id d’un switch voisin?
    Dans l’obligation de de créer un DHCP sur chaque équipement?

    • Philippe Jounin Reply

      Effectivement, pouvoir en plus centraliser l’allocation des adresses serait le top.
      J’ai essayé rapidement en jouant avec les options du relay agent, mais sans succès. Si quelqu’un sait comment faire, qu’il n’hésite pas à ajouter un commentaire.

Write A Comment