Eu tenho um sistema Fedora 31 no qual estou usando o iptables-nft
. Eu preciso disso porque ainda há um monte de software que espera as iptables
ferramentas de linha de comando herdadas. Isso significa que minha configuração nftables tem o conjunto de tabelas correspondente para corresponder à configuração legada:
table ip filter
table ip nat
table ip6 filter
table ip mangle
table ip6 nat
table ip6 mangle
Eu uso um serviço de VPN em contêiner que, antes do nftables, permitiria o mascaramento na minha interface ethernet primária executando algo assim quando a vpn aparecer:
iptables -t nat -A POSTROUTING -s 172.16.254.0/24 -o eth0 -j MASQUERADE
Desde a atualização para o Fedora 31 e iptables-nft
, isso não funciona mais. O contêiner (executando alpine) não possui o iptables-nft
wrapper de compatibilidade, mas possui o nft
próprio comando.
Não posso usar o nft
cli para adicionar regras às tabelas existentes, porque isso quebrará iptables-nft
. Mas eu posso criar novas tabelas. Eu estava esperando que eu pudesse aplicar uma configuração como esta:
table ip vpn {
chain postrouting {
type nat hook postrouting priority filter; policy accept;
ip saddr 172.16.254.0/24 oifname "eth0" counter masquerade
}
chain forward {
type filter hook forward priority filter; policy accept;
ip saddr 172.16.254.0/24 counter accept
}
}
...mas isso não parece ter nenhum impacto. Ao definir as cadeias nesta tabela para prioridade 0, eu esperava que elas correspondessem antes da tabela herdada nat
, mas esse não parece ser o caso.
Existe uma maneira de fazer isso funcionar?
Após algumas discussões no
#netfilter
canal irc, verifica-se que as coisas funcionam "como projetadas". Não é possível para uma cadeia fornecer acesso mais amplo (na forma deaccept
regras) do que o fornecido por uma cadeia com uma regrareject
(ou ).drop
Um
accept
veredicto só é válido na cadeia em que ocorre e não impede que o processamento de pacotes continue em cadeias de prioridade mais alta.Em outras palavras, se você tiver uma cadeia como esta:
Não há como conceder acesso criando cadeias adicionais. A única maneira de substituir essa
reject
regra é adicionando regras adicionais na mesma cadeia .Isso é um palpite.