Estou configurando um mini-PC (Unbranded Protectli vault, possivelmente um Yangling original) para ser usado como um roteador doméstico. Atualmente, tudo funciona basicamente como esperado, uma vez que eu resolvo manualmente alguns problemas de inicialização. Minhas regras do nftables exigem a presença de uma ponte interna ligando algumas portas ethernet destinadas aos hosts domésticos, para serem aplicadas com sucesso. Mas neste momento da sequência de inicialização, esta ponte ainda não existe. Então, o nftables falha ao carregar as regras e eu preciso recarregá-las manualmente após cada inicialização, o que é bastante inconveniente e arriscado.
- SO: Archlinux
- Firewall: arquivo de configuração nftables (sem frontend)
- Gerenciador de rede: systemd-networkd (netctl também está configurado e pronto para qualquer eventualidade)
- DHCP + DNS: dnsmasq
- Gerenciamento de ponto de acesso Wi-Fi: hostapd
Eu uso encaminhamento de IP entre a ponte e a interface que vai para a WAN, daí a necessidade da ponte para nftables. As regras para essa parte são tão simples quanto isso:
table inet FILTER {
chain FORWARD {
type filter hook forward priority filter
policy drop
ct state established,related accept
# It fails here:
iif "br0" oif "enp1s0" accept
}
}
table ip NAT {
chain PREROUTE {
type nat hook prerouting priority dstnat
policy accept
}
chain POSTROUTE {
type nat hook postrouting priority srcnat
policy accept
oif "enp1s0" masquerade
}
}
O Systemd-networkd deve configurar o sistema automaticamente para encaminhamento de IP (regras nftables + sysctl net.ipv4.ip_forward), mas ele perdeu completamente essa capacidade em algum momento por motivo desconhecido, então eu tive que fazer isso sozinho habilitando nftables.service e preenchendo as regras de encaminhamento de IP. Lembro-me de ter visto as regras geradas pelo systemd-networkd e eram bastante complexas a ponto de eu não conseguir interpretá-las (e lembrar delas). Talvez essas regras fossem as certas para evitar o problema de inicialização?
Além disso, na configuração padrão, nftables.service é definido para ser iniciado antes de network-pre.target , enquanto netctl/systemd-networkd vai depois. Eu poderia ficar tentado a trocar a ordem, mas tenho medo de quebrar a segurança ou não seguir boas práticas.
O que mais poderia ser feito?