web-dev-qa-db-fra.com

NFTables Table et priorité de la chaîne

J'ai un problème avec mon configuration NFTABLES.

J'ai deux tables, chacune a une chaîne avec le même crochet, mais un nom et une priorité différents.

Les tables sont dans différents fichiers chargés par un argument incluant.

En raison de la priorité, je penserais que la chaîne VPN-Postrouting sera exécutée avant la chaîne Internet. Mais dans ma configuration, la chaîne Internet est exécutée en premier.

table ip nat {
        chain INTERNET {
                type nat hook postrouting priority srcnat + 1; policy accept;
                oifname br2 masquerade
        }
}
table ip vpn {
        chain VPN-POSTROUTING {
                type nat hook postrouting priority srcnat - 1; policy accept;
                oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 accept
        }
}

où est mon erreur?

EDIT: J'ai changé les règles et ajoutez toutes les chaînes à la même table, avec le même résultat.

Dans la prochaine étape, j'ai suivi les conseils d'A.B. et ajoutez des compteurs et des journaux aux règles.

L'ordre des chaînes correspond à la priorité, mais la règle d'acceptation du VPN n'est pas déclenchée.

Lorsque j'ajouterai la règle d'acceptation VPN à la chaîne Internet, juste avant la règle de la mascarade, cela fonctionne comme prévu.

1
smhrambo

Historiquement, il y avait un NAT chaîne dans un crochet donné (préertiting, entrée, sortie, ...). Exécution d'une déclaration NAT ou simplement accepter le paquet étant terminal pour la chaîne, avec une seule chaîne, il s'agissait également de traitement dans le crochet. Avec nftables permettant d'utiliser plus d'une chaîne dans le même crochet, la terminaison d'une chaîne continuera à la chaîne suivante. Donc, si la première chaîne Ne fait rien (par acceptation), la chaîne suivante obtient sa chance de le faire à la place, ce qui n'est pas ce qui est destiné.

Pour résoudre ce problème, la première chaîne (ou toute autre chaîne) peut laisser un message transmis à chaque chaîne suivante afin qu'elle puisse agir sur elle: définir une marque (une valeur arbitraire) pour la chaîne suivante pour changer son comportement.

Au lieu de accept qui a zéro effet (laissant la chaîne VPN-POSTROUTING vide exécute également la stratégie par défaut: accept), définissez une marque. Alors remplacez la règle dans VPN-POSTROUTING avec celui-ci à la place:

nft add rule ip vpn VPN-POSTROUTING oifname br2 ip saddr 10.0.0.0/24 ip daddr 192.168.0.0/24 mark set 0xdeaf

Lorsque cette marque est définie, elle peut ensuite être utilisée sur l'autre chaîne pour modifier le comportement en n'exécutant pas les règles restantes. Insérez cette règle d'abord dans ip nat INTERNET:

nft insert rule ip nat INTERNET mark 0xdeaf accept
0
A.B