La Fibre

Datacenter et équipements réseaux => Routeurs => OpenWrt OpenWrt => Discussion démarrée par: basilix le 21 septembre 2024 à 12:03:15

Titre: [Résolu] Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 21 septembre 2024 à 12:03:15
Bonjour !

Je voudrais substituer le serveur DHCPv4 dnsmaq par celui de odhcpd afin de simplifier ma configuration. Mais la documentation odhcpd ne me paraît pas très exhaustive.
C'est pas facile pour moi de comprendre les sources de odhcpd. Il y a une multitude de pointeurs et de structures. Je ne pensais pas que le code était aussi complexe. Si
quelqu'un de plus avancé pouvait indiquer les options actuellement supportées par odhcpd, ce serait un gain de temps formidable.

Le projet OpenWrt a mis en ligne un outil pour rechercher les identificateurs (https://lxr.openwrt.org/ident).

Je demande à tout hasard.
Titre: Quelles sont les options supportées par le démon DHCPv4 OpenWrt ?
Posté par: Mjules le 21 septembre 2024 à 12:09:40
https://git.openwrt.org/?p=project/odhcpd.git;a=blob;f=src/dhcpv4.h;h=b378bc17165f65f44fa8eb48690f74240e64a10f;hb=HEAD

  41 enum dhcpv4_opt {
  42         DHCPV4_OPT_PAD = 0,
  43         DHCPV4_OPT_NETMASK = 1,
  44         DHCPV4_OPT_ROUTER = 3,
  45         DHCPV4_OPT_DNSSERVER = 6,
  46         DHCPV4_OPT_DOMAIN = 15,
  47         DHCPV4_OPT_MTU = 26,
  48         DHCPV4_OPT_BROADCAST = 28,
  49         DHCPV4_OPT_NTPSERVER = 42,
  50         DHCPV4_OPT_LEASETIME = 51,
  51         DHCPV4_OPT_MESSAGE = 53,
  52         DHCPV4_OPT_SERVERID = 54,
  53         DHCPV4_OPT_REQOPTS = 55,
  54         DHCPV4_OPT_RENEW = 58,
  55         DHCPV4_OPT_REBIND = 59,
  56         DHCPV4_OPT_IPADDRESS = 50,
  57         DHCPV4_OPT_HOSTNAME = 12,
  58         DHCPV4_OPT_REQUEST = 17,
  59         DHCPV4_OPT_USER_CLASS = 77,
  60         DHCPV4_OPT_AUTHENTICATION = 90,
  61         DHCPV4_OPT_SEARCH_DOMAIN = 119,
  62         DHCPV4_OPT_FORCERENEW_NONCE_CAPABLE = 145,
  63         DHCPV4_OPT_END = 255,
  64 };

??
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 21 septembre 2024 à 13:01:05
Je l'avais déjà trouvé.

On a une succession d'appels de fonction qui y mène : dhcpv4_setup_interfacehandle_dhcpv4dhcpv4_handle_msgdhcpv4_put.

Cela n'explique pas comment l'option est intégrée dans le logiciel (son rôle) ou sous quelle forme elle apparaît dans la configuration.
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 21 septembre 2024 à 15:10:50
On affecte un pointeur sur la fonction handle_dhcpv4 dans notre structure de type odhcpd_event. Le champ handle_dgram (odhcpd.h) est un pointeur sur une fonction ; il contient l'adresse de handle_dhcpv4.

iface->dhcpv4_event.handle_dgram = handle_dhcpv4;
iface est un pointeur sur une structure de type interface (odhpcd.h). Cette structure définit aussi des « paramètres » relatifs à IPv6 (RA, NDP, DHCPv6).

Je suppose que handle_dgram est l'abréviation de « handle datagram ». Ci-dessous le prototype de la fonction handle_dhcpv4.

static void handle_dhcpv4(void *addr, void *data, size_t len,
                struct interface *iface, void *dest_addr);

D'ailleurs, je ne comprends pas quand la fonction est invoquée. Le pointeur iface semble être transmis d'appel en appel de fonctions.

dhcpv4_setup_interfacedhcpv4_netevent_cb. La fonction dhcpv4_netevent_cb est accessible via le champ dhcpv4_netevent_handler.cb.

La fonction netlink_add_netevent_handler prend comme argument l'adresse de la structure dhcpv4_netevent_handler. Cette fonction est elle-même invoquée par la fonction dhcpv4_init.

int netlink_add_netevent_handler(struct netevent_handler *handler)
{
         if (!handler->cb)
                 return -1;
 
         list_add(&handler->head, &netevent_handler_list);
 
         return 0;
}
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 22 septembre 2024 à 09:16:04
Le support des options DHCPv4 semble être codé dans les sources. En recherchant dans le journal d'archivage (https://github.com/openwrt/odhcpd/commit/f2cda6c15b55c80be8739f492a8ee7b4dbd1cf52) (commit), par exemple, on peut découvrir la façon dont a été ajouté l'option « router ».
J'aurais eu bien aimé qu'il suffise juste d'indiquer l'option dans le fichier de configuration /etc/config/dhcp. Que cela aurait été simple !
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: Optix le 22 septembre 2024 à 11:04:25
Hum juste pour ton info, parce que je vois que tu t'éclates la tête pour pas grand chose, il faut vraiment que tu essayes ChatGPT (4o par ex) ou équivalent.

Il prend des fichiers, donc tu lui fais avaler le ZIP du code source, il va analyser le code et te donner tout le cheminement, les lignes associées par rapport à tes questions.
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: fansat70 le 22 septembre 2024 à 11:47:03
Hum juste pour ton info, parce que je vois que tu t'éclates la tête pour pas grand chose, il faut vraiment que tu essayes ChatGPT (4o par ex) ou équivalent.

Il prend des fichiers, donc tu lui fais avaler le ZIP du code source, il va analyser le code et te donner tout le cheminement, les lignes associées par rapport à tes questions.
[Humour]
Et le jour où ChatGPT fera directement du retro-engeenering...  ;)
[/Humour]
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: Optix le 22 septembre 2024 à 12:04:12
[Humour]
Et le jour où ChatGPT fera directement du retro-engeenering...  ;)
[/Humour]

Sans déconner, essaye. Balance-lui un binaire et pose tes questions ;)
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 22 septembre 2024 à 13:46:03
@optix :

Ce n'est pas vraiment amusant, c'est certain. D'un autre côté, le code est forcément structuré. À chacun sa méthode.
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: fansat70 le 22 septembre 2024 à 14:15:32
Sans déconner, essaye. Balance-lui un binaire et pose tes questions ;)
Suis en retard d'une guerre!  (ou de plusieurs, on ne sait plus les compter!) ;D
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: ppn_sd le 22 septembre 2024 à 17:58:48
Je ne comprends pas ce que tu veux. Plus que ça ? : https://openwrt.org/docs/techref/odhcpd
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 23 septembre 2024 à 07:37:00
@ppn_sd :

En effet, je m'aperçois que mon message n'était pas clair.

Le serveur DHCPv4 implémenté dans odhcpd supporte quelques options DHCPv4. Je ne maîtrise pas encore le langage C mais j'essaye de progresser.
Dans un premier temps, j'ai recherché certaines chaînes de caractères (motifs) dans les sources pour voir un peu comment les options étaient intégré.
J'ai trouvé des références à l'option « authentication » ainsi qu'à d'autres options ne figurant pas dans la liste des options de la documentation odhcpd.
J'ai cru (à tord) que ces options étaient supporté par odhcpd et que la documentation était, de fait, incomplète.

Mais mon idée initiale était d'essayer d'implémenter les options DHCPv4 manquantes dans odhcpd afin de faire fonctionner la téléphonie Orange. Mon
routeur OpenWrt de substitution devrait idéalement configurer la Livebox par le serveur DHCPv4 de odhcpd. Apparemment, j'aurais moins de difficulté
à intégrer le résolveur DNS unbound en n'utilisant que odhcpd (DHCPv4 + DHCPv6...). Dans l'image usine, le serveur DHCPv4 est dnsmasq et l'on a
pas de résolveur DNS récursif. De plus, mon système OpenWrt semble plutôt instable. Je cherche à mieux connaître le fonctionnement du système afin
de pouvoir déboguer. On demande systématiquement de publier sa configuration lors d'un problème, sur le forum OpenWrt, et cela ne me convient plus.
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: xp25 le 23 septembre 2024 à 08:45:27
On demande systématiquement de publier sa configuration lors d'un problème, sur le forum OpenWrt, et cela ne me convient plus.

Qu'est ce qui te gêne ?
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 23 septembre 2024 à 10:11:18
Je ne parviens pas à identifier les sources d'erreur. Par principe, je pense aussi que ce n'est pas tellement efficace dès que les choses se complexifient.
En d'autres termes, il y a trop de facteurs potentiels à considérer pour envisager que cela soit satisfaisant. Par conséquent, j'espère y voir un peu mieux
dans cette complexité avec une mise à niveau (choses simplifiées) ; en évitant les processus longs, incertains et répétitifs. J'ai besoin d'une configuration
paramétrable et flexible (provenant d'exigences personnelles et mais aussi dues au FAI Orange).
Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: Brummpanda le 23 septembre 2024 à 11:30:27
Si tu installes dnsmasq-full tu peux remplacer odhcp par dnsmasq et on peut afficher  les options dhcp supporté par dnsmasq  avec

dnsmasq --help dhcp
Known DHCP options:
  1 netmask
  2 time-offset
  3 router
  6 dns-server
  7 log-server
  9 lpr-server
 13 boot-file-size
 15 domain-name
 16 swap-server
 17 root-path
 18 extension-path
 19 ip-forward-enable
 20 non-local-source-routing
 21 policy-filter
 22 max-datagram-reassembly
 23 default-ttl
 26 mtu
 27 all-subnets-local
 31 router-discovery
 32 router-solicitation
 33 static-route
 34 trailer-encapsulation
 35 arp-timeout
 36 ethernet-encap
 37 tcp-ttl
 38 tcp-keepalive
 40 nis-domain
 41 nis-server
 42 ntp-server
 44 netbios-ns
 45 netbios-dd
 46 netbios-nodetype
 47 netbios-scope
 48 x-windows-fs
 49 x-windows-dm
 58 T1
 59 T2
 60 vendor-class
 64 nis+-domain
 65 nis+-server
 66 tftp-server
 67 bootfile-name
 68 mobile-ip-home
 69 smtp-server
 70 pop3-server
 71 nntp-server
 74 irc-server
 77 user-class
 80 rapid-commit
 93 client-arch
 94 client-interface-id
 97 client-machine-id
100 posix-timezone
101 tzdb-timezone
108 ipv6-only
119 domain-search
120 sip-server
121 classless-static-route
125 vendor-id-encap
150 tftp-server-address
255 server-ip-address


Dnsmasq version 2.90  Copyright (c) 2000-2024 Simon Kelley
Compile time options: IPv6 GNU-getopt DBus no-UBus i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset nftset auth cryptohash DNSSEC loop-detect inotify dumpfile


NB: c'est un example sur mon PC car je n'ai pas réussi de me connecter sur l'internet avec qemu et openwrt  ...


Titre: Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 23 septembre 2024 à 12:22:14
@Brummpanda :

Je veux complètement remplacer dnsmasq par odhcpd. Plusieurs raisons à cela.
En retirant dnsmasq du système, cela simplifierait significativement ma configuration. odhcpd ferait IPv4 + IPv6 et unbound ferait résolveur DNS.
Je m'en fous pas mal du support IPv4 car mon réseau local sera en IPv6. Néanmoins, la téléphonie Orange de la Livebox fonctionne seulement en IPv4.
Titre: [Résolu] Quelles sont les options supportées par le démon DHCP(v4) OpenWrt ?
Posté par: basilix le 13 octobre 2024 à 11:25:43
Je progresse au niveau de ma lecture de odhcpd en lisant le code et les RFC afférentes.

Je pense que j'aurais bientôt la réponse à la question ci-dessous.

Citation de: basilix
Quel est le rôle du symbole DHCPV4_OPT_AUTHENTICATION ?

Les messages DHCP FORCERENEW doivent être authentifiés via les procédures décrites dans le RFC 3118. [1] Cela pourrait expliquer le fait qu'un mécanisme d'authentification ait été
ajouté dans odhcpd. Effectivement, on retrouve ce symbole dans la fonction dhcpv4_fr_send (DHCPV4_MSG_FORCERENEW). Il faut que je lise le RFC 3118 pour éclaircir les choses
afin d'estimer le niveau de complexité. On observe également la structure de type dhcpv4_auth_forcerenew auth dans cette fonction (https://lxr.openwrt.org/source/odhcpd/src/dhcpv4.c#L471).

struct dhcpv4_auth_forcerenew auth = {
        .protocol = 3,
        .algorithm = 1,
        .rdm = 0,
        .replay = {htonl(time(NULL)), htonl(++serial)},
        .type = 2,
        .key = {0},
};

[03/11]

Le protocole « RKAP » (Reconfiguration Key Authentication Protocol) fournit une protection relative contre les tentatives malveillantes de
reconfiguration par envoi d'un message « Reconfigure ». Plusieurs protocoles peuvent être supportés dans l'option d'authentification.
Le protocole « Configuration Token » offre une protection rudimentaire contre des configurations diffusées par erreur mais peut aussi
servir à authentifier la source d'un message. L'information d'authentification envoyée par le serveur est déjà connue au préalable
par le client et inversement. Si le message peut être intercepté lors de sa transmission, alors ce protocole n'offre aucune protection
contre les actes malveillants ou proscrits.

Un message ne peut contenir qu'une seule option d'authentification. Je ne sais pas si on peut alterner les protocoles dans différents
messages envoyés par le même serveur.


[1] RFC 3203, page 4, section 6. Security Considerations.