Auteur Sujet: Filtrer les raw socket avec nftables ?  (Lu 22002 fois)

0 Membres et 1 Invité sur ce sujet

pgid69

  • Abonné Sosh fibre
  • *
  • Messages: 7
  • Lyon 69
Filtrer les raw socket avec nftables ?
« Réponse #144 le: 15 août 2025 à 16:50:27 »
D'ou donc l'interet d'utiliser le script hotplug (ce que tu avais d'ailleurs evoque dans ce sujet que je viens de trouver https://lafibre.info/remplacer-livebox/openwrt-rechercher-comment-changer-la-qos-avec-nftables/) pour appliquer les regles netdev sur l'interface VLAN et non pas sur l'interface utilisee par le VLAN.
Comme ca dans les regles nftables, on change le PCP indirectement en changeant la priorite du paquet par 'meta priority set' plutot que 'vlan pcp set' qui est buggé (j'imagine qu'en sortant du hook egress, le paquet passe par le driver VLAN qui va inserer l'entete VLAN dans lequel le PCP est deduit de la priorite).

Je vais essayer de tester tout ça pour vérifier que la théorie fonctionne : déjà verifier que j'ai bien l'événement hotplug pour l'interface VLAN, puis si c'est le cas que les requêtes DHCP partent pas avant que les règles nftables sont en place, et enfin qu'il y a les bonnes priorités

J'ai enfin pu faire mes essais et ça fonctionne : j'ai pu vérifier avec wireshark que les trames sont correctement modifiées pour répondre aux exigences d'Orange (sauf pour les trames ARP que je n'ai pas pu vérfier car je n'ai pas connecté mon routeur à l'ONT d'Orange, je n'ai pas fini de comprendre la config d'OpenWrt)

Je suis en version 24.10.2 d'OpenWrt. nftables est en version 1.1.1

J'ai du installer les packages complémentaires kmod-nft-netdev et kmod-nft-arp (même si pour ce dernier package j'ai un sérieux doute sur son utilité, car on n'utilise pas de table de la famille arp et que le package n'installe aucun fichier du moins pour mon routeur (architecture ramips/mt7621))

Par contre il ne faut pas mettre le script hotplug dans /etc/hotplug.d/iface, mais dans /etc/hotplug.d/net : d’après ce que je comprends dans /etc/hotplug.d/net les scripts sont exécutés lorsqu'une interface est rajoutée, tandis que dans /etc/hotplug.d/iface les scripts sont exécutés lorsque l'interface est prête c'est a dire completement configurée (donc pour une interface configurée en DHCP, après que l'interface ait recupéré son adresse IP...)

Voici mon script /etc/hotplug.d/net/10-wan.832
#logger -t hotplug-net $(env)

[ "$ACTION" = "add" ] && [ "$DEVICENAME" = "wan.832" ] && {
    # Remove the table if it exists
    nft destroy "table netdev orange_filter"

    # Create table and chain
    nft add "table netdev orange_filter"
    nft add "chain netdev orange_filter egress { type filter hook egress device $DEVICENAME priority 0; }"

    # Insert IPV4 rules
    nft insert "rule netdev orange_filter egress udp dport 67 counter meta priority set 0:6 ip dscp set cs6 comment \"Set CoS value to 6 and DSCP value to 48 (cs6) for DHCPv4 packets\""
    nft insert "rule netdev orange_filter egress ether type arp counter meta priority set 0:6 comment \"Set CoS value to 6 for arp packets\""

    # Insert IPV6 rules
    nft insert "rule netdev orange_filter egress udp dport 547 counter meta priority set 0:6 ip6 dscp set cs6 comment \"Set CoS value to 6 and DSCP value to 48 (cs6) for DHCPv6 packets\""
    nft insert "rule netdev orange_filter egress icmpv6 type { nd-router-solicit, nd-neighbor-solicit, nd-neighbor-advert } counter meta priority set 0:6 ip6 dscp set cs6 comment \"Set CoS value to 6 and DSCP value to 48 (cs6) for RS/NS/NA packets\""
}

[ "$ACTION" = "remove" ] && [ "$DEVICENAME" = "wan.832" ] && {
    # Remove the table if it exists
    nft destroy "table netdev orange_filter"
}

Remarque : ce script doit être explicitement rajouté dans la liste de fichiers à sauvegarder (fichier /etc/sysupgrade.conf)

Les règles nftables fixe la priorité du paquet Linux a 6, et fixe le champ DSCP a CS6, mais il faut dans la définition du device vlan, ajouter l'option egress_qos_mapping pour que les paquets en priorité 6 soient encapsulés dans des trames VLAN
avec le champ PCP a 6

Voici la définition de mon device VLAN, dans le fichier /etc/config/network
config device
option name 'wan.832'
option type '8021q'
option ifname 'wan'
option vid '832'
list egress_qos_mapping '6:6'
option macaddr 'XX:XX:XX:XX:XX:XX'

Voila avec cette méthode, je reste avec la version standard d'OpenWrt, et je ne suis pas bloqué par le bug de nftables (qui empeche vlan pcp set de fonctionner)

Si quelqu'un a une idée pour faire plus simple je suis preneur.

Maintenant je vais essayer de comprendre la config  IPv6 (surtout la config du firewall avec forwarding de wan en ipv6 vers lan), avant de tenter de remplacer ma LiveBox.
« Modifié: 16 août 2025 à 09:15:18 par pgid69 »