Auteur Sujet: Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet  (Lu 158691 fois)

0 Membres et 1 Invité sur ce sujet

Strangelovian

  • Abonné Orange Fibre
  • *
  • Messages: 58
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #312 le: 23 janvier 2023 à 14:30:26 »
J'ai vu une discussion que le kernel settait les deux non ?
https://ocrete.ca/2009/07/24/when-a-man-page-lies/
https://gist.github.com/wenjianhn/5700915c16e3f7d29c1b
Moi aussi je faisais cette confusion. Du coup j'ai vérifié le code source du kernel il y a quelques temps...
Et non, le kernel n'associe pas la socket_priority interne de Linux au champs IP.DSCP. Aussi vérifié par l’expérimentation...
Quand bien même le kernel le ferait pour les socket "normales", ça ne marcherait pas sur les RAW sockets utilisées par les programmes clients DHCPv4.

On peut utiliser netfilter/iptabels/nftables pour la modifier, mais seulement pour les applis qui ne sont pas obligées d'utiliser des socket RAW. Celles-ci bypass complétement netfilter, on ne peut pas agir dessus. Comme pour les client DHCPv4.

Les astuces suivantes vont fonctionner:
- modifier le code source pour positionner la bonne valeur IP.DSCP directement dans las paquets DHCPv4 initiaux sur la RAW socket
- altérer les paquets au niveau L2/L3 par un smart switch en amont du port WAN

Les astuces suivants ne vont pas fonctionner:
- preload une lib .so qui va forcer un appel socket modifié conjoint avec un setsockopt sur la RAW socket: ne modifie pas la IP.DSCP
- utiliser un programme eBPF (kernel assez récent...) qui va altérer la socket priority de la RAW socket: ne modifie pas la IP.DSCP

zoc

  • Abonné Orange Fibre
  • *
  • Messages: 4 283
  • Antibes (06) / Mercury (73)
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #313 le: 23 janvier 2023 à 16:09:21 »
Et non, le kernel n'associe pas la socket_priority interne de Linux au champs IP.DSCP.
En fait si, dans l'autre sens (IP.DSCP -> socket_priority, plus exactement, il le fait avec le champ IP.TOS, qui est l'ancêtre du DSCP et qui est au même endroit dans l'entête IP...), mais UNIQUEMENT sur les paquets routés (et donc pas sur les paquets dont l'origine est le routeur lui-même).

Le résultat de ça est d'ailleurs que dans certains cas des paquets routés se retrouvent avec une CoS VLAN à 6 à cause de leur DSCP. C'est notamment le cas avec certains clients SSH qui positionnent leur DSCP à CS6 qui se retrouve donc mappé en CoS 6 avec pour résultat des performances catastrophiques pour les transferts de fichier over SSH ou pour les tunnels...

Strangelovian

  • Abonné Orange Fibre
  • *
  • Messages: 58
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #314 le: 23 janvier 2023 à 17:23:13 »
En fait si, dans l'autre sens (IP.DSCP -> socket_priority, plus exactement, il le fait avec le champ IP.TOS, qui est l'ancêtre du DSCP et qui est au même endroit dans l'entête IP...), mais UNIQUEMENT sur les paquets routés (et donc pas sur les paquets dont l'origine est le routeur lui-même).

Le résultat de ça est d'ailleurs que dans certains cas des paquets routés se retrouvent avec une CoS VLAN à 6 à cause de leur DSCP. C'est notamment le cas avec certains clients SSH qui positionnent leur DSCP à CS6 qui se retrouve donc mappé en CoS 6 avec pour résultat des performances catastrophiques pour les transferts de fichier over SSH ou pour les tunnels...

ahah oui j'étais tombé la dessus aussi et j'y comprenais rien:
https://github.com/torvalds/linux/blob/68e77ffbfd06ae3ef8f2abf1c3b971383c866983/net/ipv4/ip_forward.c#L161
(activé par défaut...)

Covenant31

  • Abonné Orange Fibre
  • *
  • Messages: 16
  • Launaguet (31)
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #315 le: 23 janvier 2023 à 18:24:51 »
Les astuces suivantes vont fonctionner:
- modifier le code source pour positionner la bonne valeur IP.DSCP directement dans las paquets DHCPv4 initiaux sur la RAW socket
- altérer les paquets au niveau L2/L3 par un smart switch en amont du port WAN

Autre solution: utiliser un filtre tc avec les actions skbedit pour le COS et pedit pour le DSCP (ne pas oublier l'action csum après) qui sont capables de faire cela, raw socket ou pas.

Quelqu'un a déja patché UDHCPC proprement ?

J'ai un fork de busybox avec les modifications suivantes sur udhcpc et udhcpc6:
  • modification de la SO_PRIORITY, paramétrable via option
  • modification du DSCP IPv4 et IPv6, paramétrable via option
  • implémentation des options userclass et vendorclass (ce n'est pas indispensable en soit, mais perso je trouve ça beaucoup plus propre que de forger une option en hexa à la main)
  • support pour les options dynamiques en runtime, similaire au patch generate() qui avait été fait pour dhclient
  • correction de quelques bugs et divers changements (notamment la suppression de l'utilisation de raw sockets en DHCPv6)

Le code est dispo ici https://github.com/herveboisse/busybox/commits/custom_dhcp.
Par contre attention c'est vraiment du WIP, je n'avais pas fini faute de temps.
Surtout que ces dernières semaines ma priorité était d'implémenter ce qui est dit en page 1 pour ne pas perdre la connexion une fois migré et tant pis si c'est avec dhclient pour l'instant.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #316 le: 23 janvier 2023 à 19:37:52 »
Hello,

Je suis preneur si tu as un script complet avec tc.
J’en ai un mais qui doit être incomplet.

Merci

Covenant31

  • Abonné Orange Fibre
  • *
  • Messages: 16
  • Launaguet (31)

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #318 le: 23 janvier 2023 à 22:48:58 »
Merci !

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 169
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #319 le: 24 janvier 2023 à 09:14:44 »
Bonjour

Pour info, ce matin fin de la trêve des confiseurs.

Et cela devrait se faire par bloc nettement plus important en taille et avec une répartition nationale(MET + DROM)

LeVieux

chrobiche

  • Abonné Orange Fibre
  • *
  • Messages: 1
  • 37
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #320 le: 24 janvier 2023 à 09:22:40 »
Je viens de perdre ma connexion. J’avais remplacer la livebox 6 par un ont orange externe… bon je vais remettre « ce truc ».

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 169
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #321 le: 24 janvier 2023 à 09:38:12 »
Je viens de perdre ma connexion. J’avais remplacer la livebox 6 par un ont orange externe… bon je vais remettre « ce truc ».
Tout ne vient pas de la migration, cela peut aussi être d'autre choses :)
Une réseau de la taille de celui d'Orange, cela tient à l'organisme vivant avec ses blessures, ses évolutions, ses cicatrisations, ses poussées de croissance, la coupure des branches mortes, le mec qui se gourre de branche en coupant ...
Bref, la vie d'un réseau (et c'est vrai pour tout ceux de cette taille là ..)

Mais elle est bien ma boxe LB6 (enfin si tu utilises ce que 99% des gens utilisent)

LeVieux

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 648
  • Cordon 74 - Orange Fibre Pro
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #322 le: 24 janvier 2023 à 15:46:22 »
J'ai posté le script tc que j'utilise dans un post précédent dans ce sujet: https://lafibre.info/remplacer-livebox/durcissement-du-controle-de-loption-9011-et-de-la-conformite-protocolaire/msg993988/#msg993988

Hello,

Juste pour clarifier, voici mon script à base de tc :
1: tc filter add dev $iface parent 1: prio 1 protocol 0x806 u32 match u32 0 0 action skbedit priority 0:6 # arp
2: tc filter add dev $iface parent 1: prio 2 u32 match ip protocol 17 ff match ip dport 67 ffff action skbedit priority 0:6 # dhcpv4
3: tc filter add dev $iface parent 1: prio 3 protocol ipv6 u32 match ip6 protocol 17 ff match ip6 dport 547 ffff action skbedit priority 0:6 # dhcpv6
4: tc  filter add dev $iface parent 1: prio 4 protocol ipv6 u32 match ip6 protocol 58 ff action skbedit priority 0:6 # icmpv6

ton script tc :
1: tc filter add dev ${iface} parent 1:  prio 1  protocol arp  u32  match u8 0 0  action skbedit priority 0:6
2: tc filter add dev ${iface}  parent 1: prio 2 protocol ip u32 match ip ihl 5 0xf match u16 0x0000 0x1fff at 6 match ip protocol 17 0xff match ip sport 68 0xffff match ip dport 67 0xffff action skbedit priority 0:6 pipe action pedit pedit munge ip tos set 0xc0 retain 0xfc pipe action csum ip4h

TA ligne 2 fait ce que font MES lignes (2 + 3 + 4) avec en plus le marquage DSCP pour être identique à la COS. C'est bien cela ?
Il faut lire un "OR" sur chaque critère ?
Il y a 2 fois "pedit pedit" sur TA ligne 2, c'est normal ?

Merci

Zeda

  • Abonné OVH
  • *
  • Messages: 150
  • Toulouse (31)
Durcissement du contrôle de l’option 90/11 et de la conformité protocolaire
« Réponse #323 le: 24 janvier 2023 à 20:18:41 »
Question peut-être un peu bête : est-ce que par cohérence DHCPv4/v6 vous entendez également une cohérence des adresses MAC ? Je précise...

Mon switch n'est pas capable de marquer en CoS 6 en IPv4 et IPv6 sur le même port, c'est l'un ou l'autre...

Bien qu'utilisé pendant des années (merci zoc  ;) ), utiliser des clients DHCP patchés ou des packages supplémentaires sur mon ER-4 me parait peu pratique et interdit tout upgrade "facile", je me dis qu'utiliser 2 interfaces distinctes de mon routeur, pour appliquer ma CoS sur 2 ports de mon switch, une pour l'IPv4 et une pour l'IPv6 pourrait être une idée... Mais résultat : 2 adresses MAC différentes.

Je n'ai pas de quoi tester sous la main, j'ai changé de crémerie, mais qui sait de quoi sera fait l'avenir...  ;)