Auteur Sujet: [Résolu] Renouvellement DHCP  (Lu 22018 fois)

0 Membres et 1 Invité sur ce sujet

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #84 le: 04 octobre 2020 à 10:16:36 »
Salut,

À noter qu'utiliser skgid pour ton setup double-DHCP n'empêche nullement d'utiliser les cgroups pour la CoS (et les namespaces pour segmenter tout ça). À ce stade, tu as l'embarras du choix sur les techniques à employer pour avoir un setup fonctionnel et maintenable.

Effectivement, c'est ce que je fais pour la COS, c'est plus simple je trouve...
Je ne suis pas encore prêt pour les namespace, que je ne maîtrise pas...
Par contre, pour le RENEW DHCP, je trouve assez fastidieux de devoir mettre à jour le PID dans le fichier tasks. Si pour une raison ou une autre, la mise à jour du pid ne fonctionne pas, c'est un coup a chercher pendant des heures. le skgid, me semble plus simple pour cela.

Sinon, j'utilise effectivement systemd pour lancer les dhclient, quand tu dis qu'il y a des facilités cgroup, tu penses à quoi comme variable ? j'ai regardé vite fait et je n'est rien trouvé de spécial sur la partie cgroup/ip/routage.

Ensuite, quand je trouvais dommage de ne pas pouvoir utiliser uniquement une regles mangle/OUTPUT, je suggérais de se passer de tout autre mécanisme comme le skgid. Et donc en analysant uniquement les caractéristiques 'standards' des paquets RENEW.

De plus, visiblement les rules :
1:      from all fwmark 0x100 ipproto udp sport 68 dport 67 lookup 100
2:      from all fwmark 0x200 ipproto udp sport 68 dport 67 lookup 200
sont trop restrictives pour être évaluées, dès que je les remplace par :
1:      from all fwmark 0x100 lookup 100
2:      from all fwmark 0x200 lookup 200
ca fonctionne immédiatement. Pourquoi, je ne sais pas... Je vais essayer :
1:      from all fwmark 0x100 ipproto udp dport 67 lookup 100
2:      from all fwmark 0x200 ipproto udp dport 67 lookup 200
Mais je pense que je vais modifier mon script de config pour avoir ces rules :
0:      from all lookup local
10:    from all fwmark 0x100 lookup 100
20:    from all fwmark 0x200 lookup 200
30:    from all fwmark 0x300 lookup 300
50:    from all fwmark 0x500 lookup 500
60:    from all fwmark 0x600 lookup 600
70:    from all fwmark 0x700 lookup 700
90:    from all fwmark 0x900 lookup 900
100:    from <iporange1> lookup 100
200:    from <iporange2> lookup 200
300:    from 192.168.4.254 lookup 300
500:    from 192.168.251.2 lookup 500
600:    from 10.4.117.244 lookup 600
700:    from 10.2.0.244 lookup 700
900:    from 10.3.2.244 lookup 900
32766:  from all lookup main
32767:  from all lookup default
ce sera bcp plus simple. En esperant que cela n'ai pas d'effet de bord particulier...

Qu'en penses-tu ?


 
« Modifié: 04 octobre 2020 à 11:03:10 par cyayon »

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #85 le: 04 octobre 2020 à 15:02:55 »
Je ne suis pas encore prêt pour les namespace, que je ne maîtrise pas...
En fait, pour la petite histoire, j'ai utilisé ça au boulot pour simplifier un setup qui était devenu relativement complexe : marquage par uid, conntrack TCP, copie conntrack->fwmark, remplissage des tables de routage, reroute-check, masquerading uniquement pour corriger l'IP source, rp_filter=2 pour ne pas refuser les réponses, chacun de ces petits détails étant requis pour que la connexion TCP fonctionne correctement.
Là où ça a vraiment apporté un double gain de maintenabilité, c'est que le netns principal ne sert que pour une interface d'administration et une table de routage triviale. Le netns spécifique peut être détruit, modifié, cassé, manipulé par des outils d'automatisation (think: Puppet/SaltStack/Chef/Ansible) sans jamais risquer de perdre la connexion à la machine.
Et depuis je ne rêve que de segmenter toutes les manips réseaux qui constituent ma gateway en de petits netns (network namespaces) tout propres avec des tables de routage simples. Au détriment d'une perte de performances (théorique ? sensible ?) à mesure que le kernel s'amuse à faire circuler le trafic d'un namespace à un autre. Comme souvent en I.T., on ne peut pas tout avoir (performances maximales, maintenabilité, sécurité, pérennité).

À noter que les cgroups sont un pas vers les namespaces dans la mesure où ces deux technologies sont les principales fondations des containers sous Linux.

Par contre, pour le RENEW DHCP, je trouve assez fastidieux de devoir mettre à jour le PID dans le fichier tasks. Si pour une raison ou une autre, la mise à jour du pid ne fonctionne pas, c'est un coup a chercher pendant des heures. le skgid, me semble plus simple pour cela.
Alors, pour rendre à César ce qui est à César : le topic mentionné par zoc utilise des commandes cg* pour lancer dhclient directement dans le cgroup netprio adéquat plutôt que de l'y déplacer après lancement (= la race condition assurée).

Sinon, j'utilise effectivement systemd pour lancer les dhclient, quand tu dis qu'il y a des facilités cgroup, tu penses à quoi comme variable ? j'ai regardé vite fait et je n'est rien trouvé de spécial sur la partie cgroup/ip/routage.
systemd lance TOUT dans des cgroups dédiés... c'est tout simplement comme ça qu'il traque les processus relatifs à un service (finis les fichiers pid avec les race conditions qui vont avec). Tu peux voir ça avec systemd-cgls ou dans une moindre mesure avec systemctl status. Donc en théorie tu dois pouvoir simplement filtrer sur quelque chose comme -m cgroup --path system.slice/isc-dhcp-client@orange1.service (syntaxe iptables). Cela dit, j'ai comme l'impression que nftables n'offre pas les mêmes fonctionnalités qu'iptables pour matcher sur les cgroups (ça parle de matcher sur un cgroup number, je vois pas qui ça intéresse).

Ensuite, quand je trouvais dommage de ne pas pouvoir utiliser uniquement une regles mangle/OUTPUT, je suggérais de se passer de tout autre mécanisme comme le skgid. Et donc en analysant uniquement les caractéristiques 'standards' des paquets RENEW.
Ah oui, ça, c'est juste mort.

De plus, visiblement les rules [...]
Qu'en penses-tu ?
C'est marrant que ça ne fonctionne pas avec ipproto udp sport 68 dport 67, il y a peut-être un bug sous-jacent.
Mais pour réitérer mes recommandations : ne duplique pas tes discriminations. Tu as déjà discriminé sur UDP sport 68 dport 67 dans Netfilter/nftables et tu as associé cette discrimination aux fwmark 0x100 et 0x200. Plus besoin de répéter ces discriminations dans ip rule. Dans ip rule, tu mentionnes la fwmark, qui signifie non plus "le trafic DHCP machin truc" mais "ce qui doit être routé en utilisant la table de routage 0x100 / 0x200" et basta.
Je confirme que ça me semble une bonne idée de mettre toutes les ip rule fwmark en priorité. Si ça a des effets de bord, c'est probablement que tu as du trafic mal marqué.
Enfin, un mot sur toutes les rules "from x.x.x.x lookup xxx" : ces rules supposent que l'IP source est déjà connue et correcte au moment du routage. À manipuler avec précaution donc.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #86 le: 04 octobre 2020 à 17:59:39 »
Re,

Tout d'abord je voudrais te remercier très chaleureusement (tout en respectant les gestes barrières...) pour ton aide et pour tes messages toujours aussi intéressants. C'est très instructif.

Pour les namespace, je vais creuser. Je me souviens avoir lu une petite doc sur wireguard et les namespace. Mais je ne sais pas si c'est applicable dans mon cas de gateway load-balancer multiwan. J'ai du routage évidemment, mais surtout du markage de paquets qui est (je pense) indispensable à mes use-cases. Si tu as une petite doc ou des liens interessants la-dessus, je suis preneur...

Enfin, pour mes rules "from x.x.x.x lookup xxx", je me demande si elles sont vraiment utiles ?
J'ai trouvé un petit script de config générique nftables / mutlwan :
On voit que dans ce script (je n'ai pas encore testé) :
- le markage se fait uniquement dans mangle/prerouting. Pas dans output ni postrouting.
- il y a juste une restauration dans mangle/postrouting.
- pas de rule "from x.x.x.x lookup xxx", uniquement "fmwark xxx lookup xxx"

Dans mon cas, je m'embête à marquer dans output, prerouting et postrouting. Est-ce bien utile ?
De même, je me demande si mes rules "from x.x.x.x lookup xxx" sont nécessaires ...

au plaisir de te lire... :)

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #87 le: 04 octobre 2020 à 19:44:04 »
Pour les namespace, je vais creuser. Je me souviens avoir lu une petite doc sur wireguard et les namespace. Mais je ne sais pas si c'est applicable dans mon cas de gateway load-balancer multiwan. J'ai du routage évidemment, mais surtout du markage de paquets qui est (je pense) indispensable à mes use-cases. Si tu as une petite doc ou des liens interessants la-dessus, je suis preneur...
Je n'ai pas spécialement de doc en tête mais d'après mon historique, j'avais lu ça : https://blog.scottlowe.org/2013/09/04/introducing-linux-network-namespaces/
À noter que le namespacing ne nuit normalement à aucune des techniques utilisées pour marquer, router ou filtrer des paquets (sauf peut-être les techniques qui souffriraient d'une segmentation physique).
J'ai chez moi un cas similaire mais plus simple (gateway + VPN + failover fibre->LTE) ; j'ai schématisé ce que ça donnerait si j'injectais un maximum de network namespaces, voir schéma ci-joint.

Enfin, pour mes rules "from x.x.x.x lookup xxx", je me demande si elles sont vraiment utiles ?
Je me suis posé la question aussi. De par l'apparente complexité de ton setup, je n'ai pas de réponse d'autorité à te fournir :)

J'ai trouvé un petit script de config générique nftables / mutlwan :
On voit que dans ce script (je n'ai pas encore testé) :
- le markage se fait uniquement dans mangle/prerouting. Pas dans output ni postrouting.
Dans mon cas, je m'embête à marquer dans output, prerouting et postrouting. Est-ce bien utile ?
mangle/output, c'est clairement un cas particulier pour rerouter du trafic local sortant, ton dhclient quoi.
mangle/prerouting a beaucoup de sens pour du trafic forwardé (le job principal d'un routeur quoi) parce qu'à ce niveau les paquets sont plus ou moins garantis frais/intacts/pas retouchés.
du marquage dans mangle/postrouting... effectivement, cette partie là n'a peut-être pas de sens, du moins pas pour influer sur le routing (puisque, par définition, dans postrouting, il est trop tard pour router ou re-router).

- il y a juste une restauration dans mangle/postrouting.
Elle ne semble pas servir à grand chose.

- pas de rule "from x.x.x.x lookup xxx", uniquement "fmwark xxx lookup xxx"
De même, je me demande si mes rules "from x.x.x.x lookup xxx" sont nécessaires ...
Clairement, si tout le trafic est marqué, les rules fwmark doivent suffire.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #88 le: 04 octobre 2020 à 20:42:49 »
Je viens de trouver un tuto ddwrt où l’on voit qu’il y a bien les rule from xxx lookup xxx et le markage en postrouting egalement  https://wiki.dd-wrt.com/wiki/index.php/Dual-WAN_for_simple_round-robin_load_equalization.
Il n’y a pas d’explication, mais il doit bien y avoir une raison...

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #89 le: 04 octobre 2020 à 20:51:16 »
Il n’y a pas d’explication, mais il doit bien y avoir une raison...
« copied from forum-posting by user aldoir Dual-WAN forum posting » -- peut-être parce qu'on est des milliers à adapter des confs trouvées ici et là à grands coups de copier-coller et qu'à force il s'y accumule des choses inutiles, comme du calcaire dans une machine à laver ? :)
Cela dit, ça met le doigt sur un autre principe important : toujours documenter le "pourquoi".

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #90 le: 05 octobre 2020 à 08:31:32 »
Du coup, j'ai modifié ma mangle/postrouting :

chain POSTROUTING {
                type filter hook postrouting priority mangle; policy accept;
                ct mark != 0x00000000 counter meta mark set ct mark
        }
-> stocke le markage dans le paquet (je crois)


Mais j'ai hésité avec ca :

chain POSTROUTING {
                type filter hook postrouting priority mangle; policy accept;
                counter ct mark set mark
        }
-> stocke le markage dans le conntrack (je crois)

Pour l'instant ca a l'air de tourner, je vais laisser tourner qques temps pour voir les effets.

Si tout est bon, je ferais de même avec la chaine mangle/OUTPUT (mais en conservant le markage DHCP bien sûr).

« Modifié: 05 octobre 2020 à 09:28:08 par cyayon »

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #91 le: 05 octobre 2020 à 21:27:50 »
On te fait confiance pour réduire le nombre de lignes de configuration au strict minimum. Avec un peu de temps et de patience, tu dois pouvoir associer une explication à chaque ligne que tu conserves.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #92 le: 11 octobre 2020 à 18:28:50 »
Bonjour,

de temps à autre, la liaison ne fonctionne plus et la seule manière de rétablir la connexion,  est de re-démarrer dhclient. Aucune erreur particulière dans les logs.
Ceci se produit quand j'ai une désynchro VDSL coté modem. La liaison revient, mais dhclient n'est pas informé qu'il y a eu une coupure coté VDSL...


Y a t-il une option particulière dans dhclient pour automatiser ce restart ? j'ai regardé, rien vu de spécial...

une idée ?

merci.

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #93 le: 11 octobre 2020 à 18:45:05 »
C'est complètement hors-scope pour dhclient (il émet et reçoit des paquets sur une interface réseau, il ne monitore pas la santé des liens physiques en aval [ou amont, question de point de vue]). Cela dit, tu peux utiliser divers outils de monitoring pour surveiller ta connectivité et agir sur dhclient en conséquence. Par exemple, tu pourrais utiliser lsm avec un event script qui relance ton dhclient.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 656
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #94 le: 12 octobre 2020 à 09:12:48 »
Merci, je me doutais bien de ta réponse :)
Sais-tu s'il y a un moyen propre de dire à un daemon DHCP existant de forcer son RENEW ? je n'ai rien vu dans le genre. j'ai bien essayé kill -1, mais le dhclient tombe.
J'aimerais éviter le restart pur et dur du process.

sinon, LSM, je ne connaissais pas, je vais jeter un oeil.

merci

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 102
[Résolu] Renouvellement DHCP
« Réponse #95 le: 12 octobre 2020 à 11:05:43 »
Sais-tu s'il y a un moyen propre de dire à un daemon DHCP existant de forcer son RENEW ? je n'ai rien vu dans le genre. j'ai bien essayé kill -1, mais le dhclient tombe.
C'est spécifique à chaque implémentation. Dans le cas du client DHCP de l'ISC, il y a une interface « OMAPI » pour accéder à un « control object », mais honnêtement...

J'aimerais éviter le restart pur et dur du process.
... je ne pense pas que le jeu en vaille la chandelle. Claque un restart et basta :)