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

0 Membres et 1 Invité sur ce sujet

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #480 le: 05 mars 2023 à 10:34:09 »
Le rollout a l'air très lent... quelqu'un sait-il à quelle maille c'est déployé ? Ville par ville ? BNG par BNG ?

simon

  • Abonné Orange Fibre
  • *
  • Messages: 935
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #481 le: 05 mars 2023 à 10:35:50 »
Une MTU un peu plus élevée (MTU de 1492 en PPPoE et 1500 avec DHCP) et un débit 0,6% plus rapide lié aux 8 octets supplémentaires sur chaque paquet et les paquets un peu plus petits ?

De bien meilleures perfs et une meilleure résilience aux coupures si je ne m'abuse, car les concentrateurs PPPoE sont en région parisienne (au moins pour les abonnements pro).

fcueto

  • Abonné Orange Fibre
  • *
  • Messages: 47
Je m'occupe de deux sites dans les environs de Toulouse, tous les deux en contrat Sosh et je confirme qu'aucun des deux n'a été migré (pas d'option 17 en retour en DHCPv6, la chaîne d'auth sans le mot de passe fonctionne encore, etc...)


Je profite justement des vacances pour mettre les choses "au carré" et éviter de perdre la connexion.

Conformément aux recommandations de LeVieux, en plus des options adéquates dans les clients DHCPv4/DHCPv6, j'ai implémenté un mécanisme de vérification de lien montant en utilisant les outils arping pour IPv4 et ndisc6 pour IPv6.

Cependant, j'ai pu constater qu'en cas de saturation de débit, certaines vérifications IPv4 échouaient mais pas celles en IPv6.
J'avais bien pensé à tagger les paquets ARP et NS émis en COS6, via netfilter.
Cependant, arping utilise des raw sockets, donc même problème qu'avec dhclient en IPv4, pas de netfilter possible.

J'ai donc changé de méthode pour passer par une solution basée sur un script tc qui tagge tous les paquets ARP, qu'ils soient émis par le kernel ou arping.
Depuis, tous les tests IPv4 et IPv6 passent sans problème, quelque soit l'état de saturation de la ligne.

Tout ça pour confirmer que, même si vous êtes dans une zone où "ça marche sans", il vaut mieux vraiment appliquer la COS6.


Par ailleurs, pour le DHCPv4, j'ai trouvé un moyen de modifier aussi le DSCP via tc.
Je sais que ce qui importe le plus, c'est la COS6, mais d'après LeVieux c'est mieux si le DSCP est en phase avec la COS.
De plus, la LB le fait, donc moi aussi.

Je ne crois pas avoir vu cette astuce ailleurs, donc je la poste ici, si ça peut servir...

tc -b - <<EOF
qdisc replace dev ${iface} \
root \
handle 1: \
prio
filter del dev ${iface}

# ARP packets emitted by kernel can be modified by netfilter but not those
# emitted by arping as it uses raw socket
filter add dev ${iface} \
parent 1: \
prio 1 \
protocol arp \
u32 \
match u8 0 0 \
action skbedit priority 0:6

# dhclient uses raw socket for DISCOVER/REQUEST
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 munge ip tos set 0xc0 retain 0xfc pipe \
action csum ip4h
EOF

(Attention, si vous êtes sur un kernel < 5.1, il faut enlever le "protocol ip" du 2ème filter)

Avec cette astuce, il est possible de modifier non seulement la priorité COS6, mais aussi la priorité IP DSCP de n'importe quel paquet, même ceux issus d'une raw socket, sans aucun patch, sans LD_PRELOAD, ni rien compiler.

Merci Covenant31 pour ces infos précieuses, j'ai 2 questions:
1- je suis en kernel 4.9 (debian stretch) et lorsque j'utilise tes 2 lignes d'action supplémentaires pour positionner la priorité DSCP à 6 dans le script trafficcontrol, je n'obtiens plus de réponse du serveur DHCP Orange donc je suppose que cette modif "casse" la requête DHCP.

sans les actions de prio DSCP, cette frame ci-dessous reçoit une réponse d'orange:
Frame 1: 440 bytes on wire (3520 bits), 440 bytes captured (3520 bits) on interface 0
    Interface id: 0 (enp7s0.832)
        Interface name: enp7s0.832
    Encapsulation type: Ethernet (1)
    Arrival Time: Mar  5, 2023 14:21:10.537803259 CET
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1678022470.537803259 seconds
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 440 bytes (3520 bits)
    Capture Length: 440 bytes (3520 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ethertype:ip:udp:bootp]
Ethernet II, Src: Compulab_1f:65:e0 (00:01:c0:1f:65:e0), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
        Address: Broadcast (ff:ff:ff:ff:ff:ff)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
    Source: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
        Address: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0x10 (DSCP: Unknown, ECN: Not-ECT)
        0001 00.. = Differentiated Services Codepoint: Unknown (4)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 426
    Identification: 0x0000 (0)
    Flags: 0x0000
        0... .... .... .... = Reserved bit: Not set
        .0.. .... .... .... = Don't fragment: Not set
        ..0. .... .... .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 128
    Protocol: UDP (17)
    Header checksum: 0x3934 [validation disabled]
    [Header checksum status: Unverified]
    Source: 0.0.0.0
    Destination: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
    Source Port: 68
    Destination Port: 67
    Length: 406
    Checksum: 0x6faa [unverified]
    [Checksum Status: Unverified]
    [Stream index: 0]
Bootstrap Protocol (Discover)
    Message type: Boot Request (1)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0x9b9da747
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 0.0.0.0
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Discover)
        Length: 1
        DHCP: Discover (1)
    Option: (50) Requested IP Address
        Length: 4
        Requested IP Address: 90.92.94.22
    Option: (55) Parameter Request List
        Length: 12
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (15) Domain Name
        Parameter Request List Item: (28) Broadcast Address
        Parameter Request List Item: (51) IP Address Lease Time
        Parameter Request List Item: (58) Renewal Time Value
        Parameter Request List Item: (59) Rebinding Time Value
        Parameter Request List Item: (90) Authentication
        Parameter Request List Item: (119) Domain Search
        Parameter Request List Item: (120) SIP Servers
        Parameter Request List Item: (125) V-I Vendor-specific Information
    Option: (90) Authentication
        Length: 70
        Protocol: configuration token (0)
        Algorithm: 0
        Replay Detection Method: Monotonically-increasing counter (0)
        RDM Replay Detection Value: 0x0000000000000000
        Authentication Information: \032\t
    Option: (60) Vendor class identifier
        Length: 5
        Vendor class identifier: sagem
    Option: (61) Client identifier
        Length: 7
        Hardware type: Ethernet (0x01)
        Client MAC address: IngramMi_1b:59:35 (44:a6:1e:1b:59:35)
    Option: (77) User Class Information
        Length: 44
        Instance of User Class: [0]
            User Class Length: 43
            User Class Data: 46535644534c5f6c697665626f782e496e7465726e65742e...
    Option: (255) End
        Option End: 255


avec les actions de prio DSCP, cette frame ci-dessous ne reçoit pas de réponse d'orange:
Frame 1: 440 bytes on wire (3520 bits), 440 bytes captured (3520 bits) on interface 0
    Interface id: 0 (enp7s0.832)
        Interface name: enp7s0.832
    Encapsulation type: Ethernet (1)
    Arrival Time: Mar  5, 2023 14:20:43.401813171 CET
    [Time shift for this packet: 0.000000000 seconds]
    Epoch Time: 1678022443.401813171 seconds
    [Time delta from previous captured frame: 0.000000000 seconds]
    [Time delta from previous displayed frame: 0.000000000 seconds]
    [Time since reference or first frame: 0.000000000 seconds]
    Frame Number: 1
    Frame Length: 440 bytes (3520 bits)
    Capture Length: 440 bytes (3520 bits)
    [Frame is marked: False]
    [Frame is ignored: False]
    [Protocols in frame: eth:ethertype:ip:udp:bootp]
Ethernet II, Src: Compulab_1f:65:e0 (00:01:c0:1f:65:e0), Dst: Broadcast (ff:ff:ff:ff:ff:ff)
    Destination: Broadcast (ff:ff:ff:ff:ff:ff)
        Address: Broadcast (ff:ff:ff:ff:ff:ff)
        .... ..1. .... .... .... .... = LG bit: Locally administered address (this is NOT the factory default)
        .... ...1 .... .... .... .... = IG bit: Group address (multicast/broadcast)
    Source: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
        Address: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
        .... ..0. .... .... .... .... = LG bit: Globally unique address (factory default)
        .... ...0 .... .... .... .... = IG bit: Individual address (unicast)
    Type: IPv4 (0x0800)
Internet Protocol Version 4, Src: 0.0.0.0, Dst: 255.255.255.255
    0100 .... = Version: 4
    .... 0101 = Header Length: 20 bytes (5)
    Differentiated Services Field: 0xc0 (DSCP: CS6, ECN: Not-ECT)
        1100 00.. = Differentiated Services Codepoint: Class Selector 6 (48)
        .... ..00 = Explicit Congestion Notification: Not ECN-Capable Transport (0)
    Total Length: 426
    Identification: 0x0000 (0)
    Flags: 0x0000
        0... .... .... .... = Reserved bit: Not set
        .0.. .... .... .... = Don't fragment: Not set
        ..0. .... .... .... = More fragments: Not set
    Fragment offset: 0
    Time to live: 128
    Protocol: UDP (17)
    Header checksum: 0x3934 [validation disabled]
    [Header checksum status: Unverified]
    Source: 0.0.0.0
    Destination: 255.255.255.255
User Datagram Protocol, Src Port: 68, Dst Port: 67
    Source Port: 68
    Destination Port: 67
    Length: 406
    Checksum: 0x9569 [unverified]
    [Checksum Status: Unverified]
    [Stream index: 0]
Bootstrap Protocol (Discover)
    Message type: Boot Request (1)
    Hardware type: Ethernet (0x01)
    Hardware address length: 6
    Hops: 0
    Transaction ID: 0xa3b17974
    Seconds elapsed: 0
    Bootp flags: 0x0000 (Unicast)
        0... .... .... .... = Broadcast flag: Unicast
        .000 0000 0000 0000 = Reserved flags: 0x0000
    Client IP address: 0.0.0.0
    Your (client) IP address: 0.0.0.0
    Next server IP address: 0.0.0.0
    Relay agent IP address: 0.0.0.0
    Client MAC address: Compulab_1f:65:e0 (00:01:c0:1f:65:e0)
    Client hardware address padding: 00000000000000000000
    Server host name not given
    Boot file name not given
    Magic cookie: DHCP
    Option: (53) DHCP Message Type (Discover)
        Length: 1
        DHCP: Discover (1)
    Option: (50) Requested IP Address
        Length: 4
        Requested IP Address: 90.92.94.22
    Option: (55) Parameter Request List
        Length: 12
        Parameter Request List Item: (1) Subnet Mask
        Parameter Request List Item: (3) Router
        Parameter Request List Item: (6) Domain Name Server
        Parameter Request List Item: (15) Domain Name
        Parameter Request List Item: (28) Broadcast Address
        Parameter Request List Item: (51) IP Address Lease Time
        Parameter Request List Item: (58) Renewal Time Value
        Parameter Request List Item: (59) Rebinding Time Value
        Parameter Request List Item: (90) Authentication
        Parameter Request List Item: (119) Domain Search
        Parameter Request List Item: (120) SIP Servers
        Parameter Request List Item: (125) V-I Vendor-specific Information
    Option: (90) Authentication
        Length: 70
        Protocol: configuration token (0)
        Algorithm: 0
        Replay Detection Method: Monotonically-increasing counter (0)
        RDM Replay Detection Value: 0x0000000000000000
        Authentication Information: \032\t
    Option: (60) Vendor class identifier
        Length: 5
        Vendor class identifier: sagem
    Option: (61) Client identifier
        Length: 7
        Hardware type: Ethernet (0x01)
        Client MAC address: IngramMi_1b:59:35 (44:a6:1e:1b:59:35)
    Option: (77) User Class Information
        Length: 44
        Instance of User Class: [0]
            User Class Length: 43
            User Class Data: 46535644534c5f6c697665626f782e496e7465726e65742e...
    Option: (255) End
        Option End: 255

As tu une idée de ce qui peut poser problème ? Le checksum pourrait-il être incorrectement calculé ?

2- je suis preneur des mécanismes de vérification de lien montant utilisant les outils arping pour IPv4 et ndisc6 pour IPv6 que tu as implémentés, si tu es d'accord pour les partager, sachant que je souhaite faire la même chose, et même si tes scripts ne sont pas exécutables en l'état chez moi, c'est toujours plus facile de partir d'une base solide que de tout réinventer.

« Modifié: 05 mars 2023 à 21:33:46 par fcueto »

renaud07

  • Abonné Orange adsl
  • *
  • Messages: 3 423
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #483 le: 05 mars 2023 à 18:57:51 »
Je constate le même phénomène sur mes captures et toutes celles que j'ai pu voir postées dans le forum. Surtout sur une Livebox "genuine" on observe la même chose.
A mon sens cela vient du dissecteur dhcpv4 (si tu regardes dhcpv6 le décodage est différent).

Merci. Donc tout est normal. Et c'est vrai qu'en ipv6, y'a pas d'erreur.

Reymouth

  • Abonné Orange Fibre
  • *
  • Messages: 40
  • Lille (59)
Sur CRS, il faut passer une switch rule :

/interface ethernet switch rule
add comment="Orange COS dhcpv4" dst-port=67 mac-protocol=ip new-vlan-priority=6 ports=sfp1.router protocol=udp switch=switch1 vlan-id=832
add comment="Orange COS dhcpv6" dst-port=547 mac-protocol=ipv6 new-vlan-priority=6 ports=sfp1.router protocol=udp switch=switch1 vlan-id=832
add comment="Orange COS arp" mac-protocol=arp new-vlan-priority=6 ports=sfp1.router switch=switch1 vlan-id=832
add comment="Orange COS icmpv4" mac-protocol=ip new-vlan-priority=6 ports=sfp1.router protocol=icmp switch=switch1 vlan-id=832
add comment="Orange COS icmpv6" mac-protocol=ipv6 new-vlan-priority=6 ports=sfp1.router protocol=icmp switch=switch1 vlan-id=832

pour ARP, j'hésite à préciser le VLAN-ID...
add comment="Orange COS arp" mac-protocol=arp new-vlan-priority=6 ports=sfp1.router switch=switch1 vlan-id=832
OU
add comment="Orange COS arp" mac-protocol=arp new-vlan-priority=6 ports=sfp1.router switch=switch1

J'ai tenté d'appliquer ça @cyayon sur mon CRS305, mais les paquets DHCP ne semble pas prendre en compte cela quand je fais une capture depuis le RB5009. J'obtiens une DSCP: CS0 dans les 2 sens.

As tu une configuration plus à jour ? Quelqu'un a t'il une autre façon de faire ? Si vous avez une idée ou un morceau de configuration, je suis preneur. Merci !

lekr

  • Abonné MilkyWan
  • *
  • Messages: 59
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #485 le: 05 mars 2023 à 22:30:51 »
Curieux, ça fonctionne bien avec ces règles chez moi (et j’ai bien besoin de cos6)

arnaudf

  • Abonné Orange Fibre
  • *
  • Messages: 88
  • Cachan (94)
J'ai tenté d'appliquer ça @cyayon sur mon CRS305, mais les paquets DHCP ne semble pas prendre en compte cela quand je fais une capture depuis le RB5009. J'obtiens une DSCP: CS0 dans les 2 sens.

As tu une configuration plus à jour ? Quelqu'un a t'il une autre façon de faire ? Si vous avez une idée ou un morceau de configuration, je suis preneur. Merci !
Hello,

Ces règles ne modifient pas le DSCP (champ ip), mais la priorité vlan (champ Ethernet 802.1p)
Edit : pour le dscp il faudrait regarder côté firewall/mangle.

Covenant31

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

1- je suis en kernel 4.9 (debian stretch) et lorsque j'utilise tes 2 lignes d'action supplémentaires pour positionner la priorité DSCP à 6 dans le script trafficcontrol, je n'obtiens plus de réponse du serveur DHCP Orange donc je suppose que cette modif "casse" la requête DHCP.

sans les actions de prio DSCP, cette frame ci-dessous reçoit une réponse d'orange:
...

As tu une idée de ce qui peut poser problème ? Le checksum pourrait-il être incorrectement calculé ?

Déjà pour commencer je vois un soucis:
Ton adresse MAC dans l'en-tête Ethernet est cohérente avec celle du header BOOTP (apparemment celle de ton routeur) mais pas avec la MAC de l'option 61 (apparemment celle de ta LB).
Cette incohérence est problématique, tu devrais changer pour avec la même MAC partout.
(OK même la 1ère trame qui fonctionne a ce défaut, mais quand même il vaut mieux corriger).

Ensuite, tu devrais faire la capture sur l'interface physique (enp7s0) et pas l'interface virtuelle VLAN (enp7s0.832), ça permet de voir si la COS est bien définie.

Si tu as un .pcap à m'envoyer ça m'intéresse.

Et d'ailleurs quelle conf as-tu faise exactement pour tc ? Ton kernel est un peu ancien, certains comportements peuvent changer par rapport aux derniers en date.

2- je suis preneur des mécanismes de vérification de lien montant utilisant les outils arping pour IPv4 et ndisc6 pour IPv6 que tu as implémentés, si tu es d'accord pour les partager, sachant que je souhaite faire la même chose, et même si tes scripts ne sont pas exécutables en l'état chez moi, c'est toujours plus facile de partir d'une base solide que de tout réinventer.

J'ai pushé ma config ici : https://gitlab.com/herveboisse/dhcp-orange

Je ne sais pas si mon implémentation peut être considérée comme une base solide, mais je peux en tout cas témoigner d'un cas que j'ai rencontré il y a environ un mois.
Un après-midi, la diode Fibre de l'ONT Huawei est passée au rouge et la connexion a été coupée, suivi de la réception d'un SMS de notification d'incident sur le mobile du titulaire de la ligne.
Au bout d'une heure environ le problème a été réglé.
Avec cette configuration en place, les clients DHCP v4 et v6 ont été relancés automatiquement et tout est retombé en marche sans aucune intervention de ma part.

Reymouth

  • Abonné Orange Fibre
  • *
  • Messages: 40
  • Lille (59)
Hello,

Ces règles ne modifient pas le DSCP (champ ip), mais la priorité vlan (champ Ethernet 802.1p)
Edit : pour le dscp il faudrait regarder côté firewall/mangle.

En effet !

Ces règles sont suffisantes ? La partie DSCP semble conseillée par levieuxatorange. je dois ajouter quoi et sur quel équipement (RB5009 ou CRS305) ?

arnaudf

  • Abonné Orange Fibre
  • *
  • Messages: 88
  • Cachan (94)
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #489 le: 05 mars 2023 à 23:59:54 »
Ces règles, au niveau 802.1p, sont suffisantes (perso je me sers d'un switch crs326 qui met en œuvre ces règles).

Reymouth

  • Abonné Orange Fibre
  • *
  • Messages: 40
  • Lille (59)
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #490 le: 06 mars 2023 à 07:55:41 »
Pourtant si je reprend le topic de levieuxatorange, je ne vois pas de CoS 6 en ICMPv4, pourtant présente dans les règles cités dans mon précédent topic et la règle ICMPv6 tag tout le protocole et pas seulement les codes NS/NA et RS.

levieuxatorange

  • Expert Orange
  • Expert
  • *
  • Messages: 173
Orange DHCP conformité protocolaire 2023 - lire depuis le début du sujet
« Réponse #491 le: 06 mars 2023 à 08:20:26 »
la règle ICMPv6 tag tout le protocole et pas seulement les codes NS/NA et RS.
Bonjour

Pas bon, le débit en IPv6 sera fortement limité

LeVieux