[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Nftables/Conntrack: confusion ctmark/fwmark



Bonjour,

Je découvre nftables sur une machine équipée de Bullseye.

Sur cette machine j'ai les règles:

# ip rule show
0: from all lookup local
0: from all fwmark 0x2 lookup link2
32766: from all lookup main
32767: from all lookup default

J'aimerai que nftables ajoute une marque donnée pour le trafic non-marqué reçu sur une interface Ethernet donnée, auto-configurée par DHCP.
Comment l'obtenir ?

J'ai essayé (sans succès) où ens3.432 est le nom de l'interface (virtuelle) sur laquelle le trafic est reçu:

add rule ip mangle input iifname "ens3.432" meta mark 0 log prefix "Rule42-A1" counter ct mark set 0x2

La table mangle et sa chaine input sont définies par:

table mangle {
chain prerouting { type filter hook prerouting priority -150; }
chain input { type filter hook input priority -150; }
chain forward { type filter hook forward priority -150; }
chain output { type route hook output priority -150; }
chain postrouting { type filter hook postrouting priority -150; }
}

Dans les faits, j'observe que:

- la règle mangle ci-dessus est exécutée car je elle figure dans les logs et la commande "conntrack -L -o id,extended" montre qu'une marque est appliquée sur le rafic avec l'émetteur

- la réponse est émise vers l'émetteur avec la bonne adresse source mais une autre interface (celle par défaut).

Ces deux observations me laissent pense que la règle "fwmark 0x2 lookup link2" est ignorée.
Cette conviction est renforcée par le fait que quand je remplace cette règle par une règle basée sur l'IP source ("from 192.168.17.0/24 lookup link2"), l'émetteur reçoit la réponse via la bonne interface.
Comme l'interface est configurée par DHCP, j'aimerai autant que possible ne pas utiliser de règle faisant intervenir des données que je ne maîtrise pas (ie celles fournies par le serveur DHCP).

J'ai l'impression que:
soit il y a une confusion de ma part entre les marques de conntrack et celles de nftables,
soit il y a une erreur dans la définition de la chaine input ou sa table mangle,
soit encore autre chose.

Qui pourrait me mettre sur la bonne voie ?

Slts



Reply to: