Auteur Sujet: Remplacer NB6 par un routeur OpenBSD: Résoudre le problème de DHCP  (Lu 80 fois)

0 Membres et 1 Invité sur ce sujet

eriklevacon

  • Client SFR fibre FTTH
  • *
  • Messages: 34
  • Paris/Amboise (75/37)
Le but de ce thread est d'aider les possesseurs de routeur sous OpenBSD 6.x à basculer vers une solution transparente permettant de se passer de l'usage de la box fournie, le client DHCP de FreeBSD et d'OpenBSD n'intégrant pas de fonctionnalité documentée pour envoyer la bonne option DHCP type 60 au serveur côté SFR.
Il y a pléthore de tutos portant sur l'installation de l'OS, l'activation du routage et la configuration du filtre de paquets PF, et éventuellement l'ajout d'un proxy transparent Squid + SquidGuard. Ce ne sera donc pas abordé ici. Au besoin, et si le sujet intéresse, je posterai des complèments au gré des éventuelles questions.

Le sujet principal est la difficulté que représente le passage d'option DHCP sous *BSD au serveur, permettant au routeur de se "faire passer" pour la box.

Nombre de tutoriaux linux, unix et assimilés, recommandent de passer l'option 60 via une chaine dans dhclient.conf contenant le préfixe "neufbox_..." comme ci dessous:

[...]
interface "emX" {
send vendor-class-identifier "neufbox-Blahblahblah";
}
[...]

Seul souci, le client DHCP présent dans OpenBSD (et manifestement dans FreeBSD) ne permet pas directement d'appeler par un shortname la classe vendor. Après moultes recherches dans les manpages de dhclient, de dhcpd, de dhclient.conf, aucun moyen clair de permettait de comprendre le passage d'option 60, qui se soldait invariablement par une erreur de ce type:

# dhclient -d em3
/etc/dhclient.conf line 9: expecting a statement.
option
^

La fonctionnalité existe dans le source (fichier tables.c du source dhclient) mais le type 60 doit être forgé en hexa. Et les pages man et documentations restent muettes sur ce point.

La solution à ce problème est donc de déclarer l'option 60 comme suit, dans le fichier dhclient.conf (pensez à adapter l'identifiant d'interface réseau et la chaine identifier neufbox à votre cas)

interface "em3" {
#supersede domain-name-servers 127.0.0.1; #décommentez cette ligne si vous disposez d'un serveur DNS sur le firewall BSD et souhaitez l'utiliser
send vendor-encapsulated-options 03:05:4d:35:34:30:0a:1f:04:20:20:20:20:04:08:41:6d:69:4e:45:54:20:20:05:0c:32:2e:37:2e:32:20:20:20:20:20:20:20;
    send dhcp-class-identifier "neufbox_NB6XXX-XXXXXXXXXXXXXXXXXXXXXXXXXX";
}

PS: vous pouvez récupérer votre identifiant neufbox "legit" , via une connexion directe du port RJ45 labellisé "fibre" et l'outil tcpdump et la commande suivante (en remplacant <id_interface> par l'identifiant du port de connexion pour le test, par ex, eth0:

tcpdump -eA -vvv -i <id_interface>  > /home/<user>/DUMP-SFR-NB6.log
laissez un peu de trafic passer, puis ctrc+C
Ensuite, filtrer sur la chaine "neufbox" sur le dump. La chaine passée par la box SFR au serveur DHCP apparait comme ci dessous

$cat /home/<user>/DUMP-SFR-NB6.log |grep "neufbox"

[...]
Vendor-Class Option 60, length 64: "neufbox_NB6XXX-XXXXXXXXXXXXXXXXXXXXXXXXX"
[...]

Vous pouvez ensuite reporter cette string directement dans le fichier dhclient.conf à l'option send "dhcp-class-identifier".


 

Mobile View