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

0 Membres et 3 Invités sur ce sujet

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #24 le: 22 septembre 2020 à 14:51:35 »
Merci Xavier pour ta réponse.

Du coup, pour résumer et être certain d'avoir bien compris, je NE PEUX PAS me contenter de :
ip route add 80.10.247.48 via 83.xx.xx.1 dev orange1
ip route add 80.10.247.48 via 82.xx.xx.1 dev orange2

Je dois absolument faire ces 3 étapes :
1. dhclient1 (orange1) tourne sous le user orange1 (uid 100) et dhclient2 (uid 200) tourne sous le user orange2.
2. j'ajoute ces routes que je disais juste avant :
    ip route add 80.10.247.48 via 83.xx.xx.1 dev orange1
    ip route add 80.10.247.48 via 82.xx.xx.1 dev orange2
3. J'ajoute ces rules :
    ip rule add uidrange 100 lookup 100
    ip rule add uidrange 200 lookup 200

J'ai bien compris ?  ::)

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
[Résolu] Renouvellement DHCP
« Réponse #25 le: 22 septembre 2020 à 16:01:17 »
Tu as bien compris.
Il manque juste table 100 et table 200 à la fin de tes commandes ip route.

À mon sens, ces trois étapes devraient suffire dans la mesure où les paquets que tu essayes de router correctement sont des paquets UDP (donc pas de subtilités avec les TCP FIN en vue).

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #26 le: 22 septembre 2020 à 16:04:14 »
ok, merci encore pour ton aide !
Je test cela jeudi ou vendredi et je te dis :)


cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #27 le: 24 septembre 2020 à 20:31:14 »
bon ben c'est plus compliqué que prévu.
Le problème c'est dhclient ne peut pas tourner sous un autre user que root.
J'ai essayé plusieurs choses, sudo, setcap, etc... pas moyen d'avoir le process dhclient qui tourne correctement sous un autre user que root.
Donc ip rule add uidrange ne semble pas être la bonne solution...

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
[Résolu] Renouvellement DHCP
« Réponse #28 le: 24 septembre 2020 à 23:21:53 »
Ah oui, bien vu, il y a la problématique où pour obtenir un dhclient non-root, il faut au moins :
  • les capabilities pour les raw sockets sur des ports privilégiés
  • un mécanisme pour effectuer la configuration réseau sans être root
  • s'assurer qu'il n'y ait aucun check sur l'uid dans le code de isc-dhcp-client lui-même

Du coup, le changement d'uid est bien une fausse piste. On pourrait se rabattre sur un changement de gid mais ip rule n'offre qu'uidrange, pas gidrange (frustrant). Netfilter offre la possibilité de matcher sur le groupe (--gid-owner) voire même sur ses groupes complémentaires (--suppl-groups), donc il doit être possible de :
  • lancer dhclient avec un gid particulier
  • fwmark les paquets adéquats avec -m owner --gid-owner
  • ajouter une ip rule fwmark
  • bidouiller un peu en POSTROUTING pour corriger l'IP source qui sera vraisemblablement foireuse (SNAT/MASQUERADE)

Mais pour être honnête, oui, ça commence à sentir le plan foireux. À ce stade-là, quitte à devoir jouer du fwmark, autant repérer ton login Orange avec iptables -m string ou tenter de jouer avec -m cgroup...

Par contre, l'approche #2 (séparation par network namespace) reste pertinente.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #29 le: 25 septembre 2020 à 09:47:39 »
J'ai vu qu'il est possible d'utiliser ip rule iif ou oif pour matcher une interface. Je me demande si c'est possible d'utiliser cela plutot que l'uid ?

Ensuite pour les namespace, j'avoue ne pas trop connaitre, mais cela n'a pas l'air simple au premier abord.

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
[Résolu] Renouvellement DHCP
« Réponse #30 le: 25 septembre 2020 à 14:00:12 »
J'ai vu qu'il est possible d'utiliser ip rule iif ou oif pour matcher une interface. Je me demande si c'est possible d'utiliser cela plutot que l'uid ?

Excellente question. Sur le principe, ça paraît un peu bizarre de matcher une interface de sortie dans le cadre d'un processus visant justement à déterminer une interface de sortie (ainsi qu'une IP source et d'éventuels gateways/next-hops).

Citation de: man 8 ip-rule
              oif NAME
                     select the outgoing device to match. The outgoing
                     interface is only available for packets originating
                     from local sockets that are bound to a device.
Par rapport à la condition en gras : si j'en crois le contenu de common/socket.c, isc-dhcp-client utilise bien SO_BINDTODEVICE, donc ça pourrait fonctionner ; j'ignore s'il l'utilise pour émettre ses paquets unicast (flemme de stracer un échange...) donc le plus simple c'est encore de tester.
Dans un premier temps, tu peux tester avec oif tout court :
ip rule oif orange2 lookup 200
Mais si tu as ou penses avoir un jour d'autres daemons bind-és à orange2, alors il vaut peut-être mieux affiner les conditions :
ip rule ipproto udp sport 68 dport 67 oif orange2 lookup 200

Ensuite pour les namespace, j'avoue ne pas trop connaitre, mais cela n'a pas l'air simple au premier abord.
C'est vraiment une question d'architecture pour le coup. Il y a un peu de complexité sur la mise en place, qui donne ensuite lieu à plus de simplicité sur la gestion des rules et des routes.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #31 le: 25 septembre 2020 à 14:17:27 »
J'ai imaginé d'autres solutions au cas où :

1. utiliser nft skgid (j'ai migré de iptables à nftables il y a qques mois).
sachant que je mangle mark dejà les packets fonction de leur route/source/destination etc..., je pensais simplement essayer d'ajouter les regles nft à ma table de mangle multiwan :
meta skgid dhcp-orange1 ct mark set 0x100 counter
meta skgid dhcp-orange2 ct mark set 0x200 counter
100 et 200 étant mes tables de routage respectives pour les interfaces orange1 et orange2. Je ferais bien entendu tourner mes dhclient sous les GID dhcp-orange1 et dhcp-orange2. Simplement, je ne sais pas s'il faut ajouter des ip rule à cela ? Je ne pense pas...

2. ajouter une route globale avec des nexthop
80.10.247.48 nexthop via 82.xxxx  dev orange2 nexthop via 83.xxxx dev orange1 onlink
mais ca me semble un peu hazardeux...

3. ta solution décrite dans ton dernier message
ip rule add ipproto udp sport 68 dport 67 oif orange1 lookup 100
ip rule add ipproto udp sport 68 dport 67 oif orange2 lookup 200

Je pense que la dernière (la tienne) semble la plus élégante, à voir si c'est suffisant.

ce serait tellement simple si les serveurs DHCP orange avaient des IP différentes :)



cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #32 le: 25 septembre 2020 à 14:38:18 »
bon, ip rule add ipproto udp sport 68 dport 67 oif <iface> lookup <table>, ca ne fonctionne pas.

par contre la route avec les nexthop semble fonctionner, au moins avec une des 2 interfaces. J'attends de tester avec les 2 en simultané.

après il faudra tester avec nft skgid.

xavierg

  • Abonné Orange Fibre
  • *
  • Messages: 96
[Résolu] Renouvellement DHCP
« Réponse #33 le: 25 septembre 2020 à 15:15:04 »
1. utiliser nft skgid (j'ai migré de iptables à nftables il y a qques mois).
sachant que je mangle mark dejà les packets fonction de leur route/source/destination etc..., je pensais simplement essayer d'ajouter les regles nft à ma table de mangle multiwan :
meta skgid dhcp-orange1 ct mark set 0x100 counter
meta skgid dhcp-orange2 ct mark set 0x200 counter
100 et 200 étant mes tables de routage respectives pour les interfaces orange1 et orange2. Je ferais bien entendu tourner mes dhclient sous les GID dhcp-orange1 et dhcp-orange2. Simplement, je ne sais pas s'il faut ajouter des ip rule à cela ? Je ne pense pas...
Sauf erreur d'interprétation de ma part, nft skgid n'est que l'équivalent nftables de iptables -m owner --gid-owner donc on retombe sur ma proposition de 2020-09-24 23:21:53, qui implique bien une ip rule fwmark (attention à ctmark vs fwmark par contre). À ma connaissance, nft vs iptables ne sont que deux interfaces différentes pour configurer NetFilter et le choix de l'un ou de l'autre ne change pas le mécanisme "routing decision" vs "reroute check" : ces deux étapes font toutes deux appel aux tables de routages (ip rule + ip route) pour définir/modifier l'interface de sortie. La correction de l'IP source que j'avais mentionnée précédemment reste théoriquement d'actualité mais en pratique est probablement DÉJÀ effectuée chez toi par un petit "oif orangeX masquerade" dans nat/postrouting.

2. ajouter une route globale avec des nexthop
80.10.247.48 nexthop via 82.xxxx  dev orange2 nexthop via 83.xxxx dev orange1 onlink
mais ca me semble un peu hazardeux...
par contre la route avec les nexthop semble fonctionner, au moins avec une des 2 interfaces. J'attends de tester avec les 2 en simultané.
Je doute fortement que ça fasse automagiquement ce que tu souhaites ; je m'attends plutôt à ce que ça load-balance les paquets sortants tantôt sur une gateway tantôt sur l'autre... ce qui pourrait tomber en marche dans la mesure où dhclient émet son paquet plusieurs fois d'affilée en l'absence de réponse... mais ouais, ça reste hasardeux.

bon, ip rule add ipproto udp sport 68 dport 67 oif <iface> lookup <table>, ca ne fonctionne pas.
Tu as testé sans les conditions sur ipproto, sport et dport ?

ce serait tellement simple si les serveurs DHCP orange avaient des IP différentes :)
C'est un beau corner case que tu nous as trouvé là, en effet... même destination, même protocole, même port source, même port de destination, même uid.
Pistes restantes :
  • ip rule oif
  • nft skgid (implique ip rule fwmark)
  • iptables string -- je ne trouve pas l'équivalent nft, je loupe un épisode ? (implique ip rule fwmark)
  • nft cgroup (implique ip rule fwmark)



cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #34 le: 25 septembre 2020 à 15:24:47 »
1. je vais essayer de tester sans ipproto, sport et dport, uniquement avec oif.

2. effectivement iptables -m strings n'a pas encore d'équivalent coté nft. On peut jouer avec les payload, mais c'est galère...

3. enfin, je finirais avec nft skgid / ip rule fwmark




cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
[Résolu] Renouvellement DHCP
« Réponse #35 le: 27 septembre 2020 à 09:41:25 »
1. je vais essayer de tester sans ipproto, sport et dport, uniquement avec oif.

2. effectivement iptables -m strings n'a pas encore d'équivalent coté nft. On peut jouer avec les payload, mais c'est galère...

3. enfin, je finirais avec nft skgid / ip rule fwmark

le 1. ne fonctionne pas, il ne reste donc plus que le 3. nft skgid et ip rule fwmark... je testerais semaine prochaine.