Meu roteador doméstico linux fica entre o meu provedor (laranja) e minha rede doméstica.
No lado da WAN, a Orange fornece internet em uma VLAN marcada como 832.
Algumas mensagens de controle (ARP, DHCP, ICMPv6 "tipos de descoberta de roteador", DHCPv6) precisam ser respondidas para a Orange com:
- prioridade da VLAN = 6
- IPvCP ou IPv6 DSCP="CS6" (6 bits 0x30 ou 48 em notação decimal)
Primeiro problema, para as mensagens DHCP v4 de sequência de inicialização, o isc-dhclient precisa usar um soquete de pacote Ethernet, que ignora a pilha IP do kernel do Linux por design.
Portanto, não é possível usar o netfilter para atribuir DSCP ou Meta Class IPv4, mas vamos deixar isso de lado por enquanto.
Aqui está um dump da minha configuração nftables, relevante para a alteração de IP DSCP e Meta Priority:
me @ debox: ~ $ sudo / usr / sbin / nft lista de regras
table inet fltr46 {
chain assign-orange-prio {
ip version 4 udp sport { bootps, bootpc} ip dscp set cs6 meta priority set 0:6 counter packets 0 bytes 0 comment "isc-dhclient LPF socket bypass netfilter"
icmpv6 type { nd-neighbor-solicit, nd-router-solicit} ip6 dscp set cs6 meta priority set 0:6 counter packets 8 bytes 480
udp sport { dhcpv6-client, dhcpv6-server} ip6 dscp set cs6 meta priority set 0:6 counter packets 4 bytes 1180
}
chain postrouting {
type filter hook postrouting priority 0; policy accept;
oifname vmap { "enp1s0.832" : goto assign-orange-prio}
}
chain output {
type filter hook output priority 0; policy accept;
oifname vmap { "enp1s0.832" : goto assign-orange-prio }
}
}
table arp arp4 {
chain output {
type filter hook output priority 0; policy accept;
oifname ! "enp1s0.832" accept
meta priority set 0:6 counter packets 851 bytes 35742
}
}
Minha configuração do vlan 832 é a seguinte:
me@debox:~$ sudo cat /proc/net/vlan/enp1s0.832
enp1s0.832 VID: 832 REORDER_HDR: 1 dev->priv_flags: 1001
Device: enp1s0
INGRESS priority mappings: 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0
EGRESS priority mappings: 6:6
O que significa, para saída, pacotes de classe 6 - > VLAN prio 6.
Os contadores nftables para DHCPv6, ICMPv6 "router" e ARP são incrementados, como esperado.
No entanto, percebo problemas na minha captura de tubarões de arame (feita pelo espelhamento de porta swich):
- DHCPv6: OK. DSCP = CS6 e VLAN prio = 6
- ICMPv6: não está OK. DSCP = CS6 mas VLAN prio = 0
- ARP: não está bem. VLAN prio = 0
- Pacotes de renovação de concessão de DHCP IPv4, enviados por meio de um soquete UDP comum, também estão corretos (DSCP + VLAN prio).
A prioridade da VLAN não é aplicada corretamente aos pacotes ARP e ICMPv6.
Existe uma maneira de depurar ainda mais porque a classe meta não traduz corretamente para o prio VLAN,
para mensagens ARP e ICMPv6 geradas pelo kernel do linux?