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

0 Membres et 3 Invités sur ce sujet

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #84 le: 03 août 2024 à 12:48:40 »
ip -net "$ns1" link add vlan123 link veth0 type vlan id 123

Citer

ip link add - add virtual link
    link DEVICE
           specifies the physical device to act operate on.

           NAME specifies the name of the new virtual device.

Source : man ip-link

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 686
  • Cordon 74 - Orange Fibre Pro
Filtrer les raw socket avec nftables ?
« Réponse #85 le: 03 août 2024 à 13:31:44 »
Bon après, faut pas non plus en faire une usine à gaz….

Perso, j’ai mon ONU dans un petit switch CRS310 Mikrotik, il fait la COS sur les paquets qui vont bien, et je gère le DHCP client sur mon routeur.

Le switch Mikrotik fait la COS au niveau hardware. De tout manière, il faut bien un slot pour accueillir l’ONU…

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #86 le: 03 août 2024 à 14:12:44 »
@cyayon :

Mon message précédent n'est pas très clair. Je n'ai pas eu le temps d'ajouter une explication.

Dans le test, on crée deux espaces de noms réseaux avec des périphériques virtuels. On cherche à simuler un échange entre deux interfaces.
On réalise un test de connectivité avec des requêtes ICMP echo. On modifie les identifiants VLAN des paquets de façon à ce que les interfaces
puissent communiquer. Car les interfaces 802.1Q vlan123 et vlan321 ont respectivement les identifiants 123 et 321.

Or on remarque que le device spécifié dans la chaîne egress est veth0. En lisant le code attentivement, on s'aperçoit que cela correspond à
l'interface physique. Malheureusement, je n'ai pas réussi à modifier le PCP des paquets via le test vlan_mangling avec la déclaration VLAN
pcp set 6.

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #87 le: 03 août 2024 à 14:27:29 »
#!/bin/bash

NFT=/usr/bin/nft

rnd=$(mktemp -u XXXXXXXX)
ns1="nft1ifname-$rnd"
ns2="nft2ifname-$rnd"

cleanup()
{
ip netns del "$ns1"
ip netns del "$ns2"
}

trap cleanup EXIT

set -e

ip netns add "$ns1"
ip netns add "$ns2"
ip -net "$ns1" link set lo up
ip -net "$ns2" link set lo up

ip link add veth0 netns $ns1 type veth peer name veth0 netns $ns2

ip -net "$ns1" link set veth0 addr da:d3:00:01:02:03

ip -net "$ns1" link add vlan1 link veth0 type vlan id 123
ip -net "$ns2" link add vlan2 link veth0 type vlan id 123


for dev in veth0 ; do
ip -net "$ns1" link set $dev up
ip -net "$ns2" link set $dev up
done
ip -net "$ns1" link set vlan1 up
ip -net "$ns2" link set vlan2 up

ip -net "$ns1" addr add 10.1.1.1/24 dev vlan1
ip -net "$ns2" addr add 10.1.1.2/24 dev vlan2

ip netns exec "$ns2" $NFT -f /dev/stdin <<"EOF"
table netdev t {
chain in_update_vlan {
vlan type arp vlan pcp set 6 counter
ip saddr 10.1.1.1 icmp type echo-request vlan pcp set 6 counter
}

chain in {
type filter hook ingress device veth0 priority filter;
ether saddr da:d3:00:01:02:03 vlan id 123 jump in_update_vlan
}

chain out_update_vlan {
vlan type arp vlan pcp set 123 counter
ip daddr 10.1.1.1 icmp type echo-reply vlan pcp set 6 counter
}

chain out {
type filter hook egress device veth0 priority filter;
ether daddr da:d3:00:01:02:03 vlan id 123 jump out_update_vlan
}
}
EOF

ip netns exec "$ns1" ping -c 1 10.1.1.2

set +e

ip netns exec "$ns2" $NFT list ruleset
ip netns exec "$ns2" $NFT list table netdev t | grep 'counter packets' | grep 'counter packets 0 bytes 0'
if [ $? -eq 1 ]
then
exit 0
fi

exit 1


En modifiant le code, j'ai commis une erreur.

chain out_update_vlan {
vlan type arp vlan pcp set 123 counter
ip daddr 10.1.1.1 icmp type echo-reply vlan pcp set 6 counter
}

Citer
/dev/stdin:13:30-32: Error: Value 123 exceeds valid range 0-7
                vlan type arp vlan pcp set 123 counter
                                           ^^^


Cela semblerait indiquer que l'on puisse modifier le PCP.

Mais on voit bien que le résultat est négatif.

Citer

PING 10.1.1.2 (10.1.1.2) 56(84) octets de données.
64 octets de 10.1.1.2 : icmp_seq=1 ttl=64 temps=0.033 ms

--- statistiques ping 10.1.1.2 ---
1 paquets transmis, 1 reçus, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.033/0.033/0.033/0.000 ms
table netdev t {
        chain in_update_vlan {
                vlan type arp vlan pcp set 6 counter packets 0 bytes 0
                ip saddr 10.1.1.1 icmp type echo-request vlan pcp set 6 counter packets 0 bytes 0
        }

        chain in {
                type filter hook ingress device "veth0" priority filter; policy accept;
                ether saddr da:d3:00:01:02:03 vlan id 123 jump in_update_vlan
        }

        chain out_update_vlan {
                vlan type arp vlan pcp set 6 counter packets 0 bytes 0
                ip daddr 10.1.1.1 icmp type echo-reply vlan pcp set 6 counter packets 0 bytes 0
        }

        chain out {
                type filter hook egress device "veth0" priority filter; policy accept;
                ether daddr da:d3:00:01:02:03 vlan id 123 jump out_update_vlan
        }
}
                vlan type arp vlan pcp set 6 counter packets 0 bytes 0
                ip saddr 10.1.1.1 icmp type echo-request vlan pcp set 6 counter packets 0 bytes 0
                vlan type arp vlan pcp set 6 counter packets 0 bytes 0
                ip daddr 10.1.1.1 icmp type echo-reply vlan pcp set 6 counter packets 0 bytes 0



basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #88 le: 03 août 2024 à 14:37:57 »
Mais je pense que le plus vraisemblable est que la fonctionnalité ne soit pas implémentée.

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #89 le: 03 août 2024 à 17:06:03 »
De toute manière nftable 1.1.x ne sera pas dispo avant plusieurs mois/années. C'est même pas une solution à envisager pour le moment, en tout cas pas de cette manière.

Celle que j'utilise fonctionne parfaitement, via une injection de règles et ça colle parfaitement dans un cycle de up/down d'une interface. Il suffit simplement d'ajouter une étape, simple de surcroit, juste avant de lancer les daemons DHCP (v4/v6).

C'est aussi pour cette raison que j'ai arrêter d'utiliser des distrib de routeur (pfsense, opnsense, wrt, ...) sur des "vrai" router que je veux stable et facilement configurable.
opnsense et pfsense passent leur temps à péter les config existantes, surtout lorsque la config devient un peu exotique. Et wrt pas bcp mieux ...


Je suis sur debian depuis plus de 6mois maintenant. Aucun update, maj, reboot, crash n'a encore tué la config. Niveau confort de config c'est aussi bcp plus simple.
J'utilisais cgroup, on a vu qu'il était possible d'utiliser nftable. Ça été mi en place en moins de 15mins, sans erreurs.

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 686
  • Cordon 74 - Orange Fibre Pro
Filtrer les raw socket avec nftables ?
« Réponse #90 le: 03 août 2024 à 17:09:23 »
Oui, de mon coté j'utilise un archlinux avec systemd-networkd, il faut jouer avec les dépendances mais ça se fait bien aussi. Et le seul truc un peu tricky, c'est au boot. Une fois que l'interface est créé, les renew/release passent sans problème (les rules nftables définitives étant chargées).

Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #91 le: 03 août 2024 à 17:11:57 »
Oui, de mon coté j'utilise un archlinux avec systemd-networkd, il faut jouer avec les dépendances mais ça se fait bien aussi. Et le seul truc un peu tricky, c'est au boot. Une fois que l'interface est créé, les renew/release passent sans problème (les rules nftables définitives étant chargées).

Le truc que je trouve chiant avec systemd c'est la complexité de mise en place d'un arbre de dépendance de service et vérifier qu'il fonctionne vraiment correctement. C'est un enfer a debug.
Et pourtant j'aime systemd, c'est un foutu bon gestionnaire de service.

D'ailleurs dans networkd, les pre-script sont aussi dispo ?

cyayon

  • Abonné Orange Fibre
  • *
  • Messages: 686
  • Cordon 74 - Orange Fibre Pro
Filtrer les raw socket avec nftables ?
« Réponse #92 le: 03 août 2024 à 17:20:18 »

D'ailleurs dans networkd, les pre-script sont aussi dispo ?

Malheureusement non...
D'où la nécessité de jouer avec les dépendances (voir mon précédent post).
Perso, je déteste systemd, je regrette la bonne vieille époque de rc.conf héritée de *BSD (sous archlinux).


Mastah

  • Abonné Orange Fibre
  • *
  • Messages: 470
  • XGS-PON et G-PON
Filtrer les raw socket avec nftables ?
« Réponse #93 le: 03 août 2024 à 17:48:52 »
Malheureusement non...
D'où la nécessité de jouer avec les dépendances (voir mon précédent post).
Perso, je déteste systemd, je regrette la bonne vieille époque de rc.conf héritée de *BSD (sous archlinux).

Wé non ... l'ordre naturel séquentiel pour démarrer des services ... l'enfer. Sans moi :D

basilix

  • Abonné Orange Fibre
  • *
  • Messages: 403
Filtrer les raw socket avec nftables ?
« Réponse #94 le: 21 août 2024 à 04:52:09 »
J'abandonne l'idée sur OpenWrt. Une personne sans nuance du forum OpenWrt a colmaté ensemble mes questionnements, réduisant ainsi la chance (*) de parvenir à une solution.
Visiblement on ne peut compter que sur soi-même. Car c'est pareil du côté Netfilter : interrogations laissées sans réponse. Vive l'open source ! C'est très décevant et inégalitaire.


* Je n'ai pas la science infuse.