L'expression est malformée. Lire le premier paragraphe de
Simple Rule Management.
Première expression : VLAN HEADER EXPRESSIONvlan id 832
Seconde expression incomplète : IPV6 HEADER EXPRESSIONip6
Comment sélectionner en fonction du protocole encapsulé dans un paquet IPv6 ? Voir « Rappel IPv6 » ci-après.
Troisième expression : UDP HEADER EXPRESSIONudp dport 547
AnalyseCe que l'on veut c'est sélectionner les paquets IPv6.
vlan type ip6
Attention : l'expression
vlan type est surchargée. Voir « Ambivalence de l'expression vlan type ».
Rappel IPv6Il faut utiliser l'expression
meta l4proto en IPv6 pour correspondre au protocole encapsulé.
nft describe meta l4proto | grep icmp
icmp 1
ipv6-icmp 58
On peut utiliser l'expression abrégée
icmpv6 type <data type>.
If you specifically want to match on the ICMPv6 type, then nftables creates an implicit meta l4proto dependency that is not shown, therefore, there is no need for being verbose in your notation, ie.
% nft add rule filter input icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
Hyperlien : Matching IPv6 headers
Ambivalence de l'expression vlan type vlan type 8021ad vlan type 8021q vlan type ip6 counter
Cette expression représente explicitement une trame VLAN 802.1ad et une trame 802.1Q (enchaînement QinQ).vlan type ip6 counter
Cette expression représente implicitement une trame VLAN 802.1q.L'ambivalence apparaît dans la signification du type EtherType.09:18Finalement, il semblerait que mon interprétation soit fausse. J'ai essayé dans des espaces de nommages. nftables transforme la règle en :
table netdev test_qinq {
chain ingress {
type filter hook ingress device "veth_recv" priority filter; policy accept;
ether type 8021q vlan type 8021ad vlan type 8021q vlan type ip6 counter packets 0 bytes 0 meta nftrace set 1
}
}
09:31Je crois que j'ai compris.
- VLAN support:
# payload statement
ip saddr 10.1.1.1 icmp type echo-request vlan id set 321
# payload expression (QinQ matching)
ether type 8021ad vlan id 10 vlan type 8021q vlan id 100 vlan type ip accept
Hyperlien :
https://lwn.net/Articles/982283/$ nft describe vlan type
payload expression, datatype ether_type (Ethernet protocol) (basetype integer), 16 bits
pre-defined symbolic constants (in hexadecimal):
ip 0x0800
arp 0x0806
ip6 0x86dd
8021q 0x8100
8021ad 0x88a8
vlan 0x8100
$ nft describe ether_type
datatype ether_type (Ethernet protocol) (basetype integer), 16 bits
pre-defined symbolic constants (in hexadecimal):
ip 0x0008
arp 0x0608
ip6 0xdd86
8021q 0x0081
8021ad 0xa888
vlan 0x0081
Donc,
8021ad ne devrait pas être utilisé dans l'expression
vlan type mais uniquement dans l'expression
ether type.