.png)
Обновился до Fedora 32, в которой используется nftables, с которым я совершенно не знаком, и после прочтения всей документации, которую смог найти, я не могу понять, как реплицировать мой 1:1 NAT с nftables, что означает, что в настоящее время мой почтовый сервер недоступен.
Я использовал эти правила с firewalld/iptables.
<passthrough ipv="ipv4">-t nat -A PREROUTING -i eno1 -d public.ip -j DNAT --to-destination 10.99.99.21</passthrough>
<passthrough ipv="ipv4">-t nat -A POSTROUTING -s 10.99.99.21 -o eno1 -j SNAT --to public.ip</passthrough>
<passthrough ipv="ipv6">-t nat -A PREROUTING -i eno1 -d public.ipv6 -j DNAT --to-destination fdb9:b611:5d5d:ffff::21</passthrough>
<passthrough ipv="ipv6">-t nat -A POSTROUTING -s fdb9:b611:5d5d:ffff::21 -o eno1 -j SNAT --to-source public.ipv6</passthrough>
Я попробовал это, но это, похоже, не работает:
nft list table nat
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.99.99.21 oif "eno1" snat to public.ip
}
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
iif "eno1" ip daddr public.ip dnat to 10.99.99.21
}
}
Дополнительная информация: После дальнейшего изучения выяснилось, что по какой-то причине не срабатывает правило SNAT.
решение1
Я собираюсь ответить на свой собственный вопрос, поскольку я понял это после разговора с одним из разработчиков firewalld на github.
Видимо, проблема в том, что nftables и iptables используются одновременно.
Цитата:
This makes sense. It's due to the fact that iptables and nftables rules are executed independently inside the kernel/netfilter. So your scenarios are:
iptables backend
your direct rules accept the packets in the FORWARD chain
further iptables rules in the FORWARD chain are not evaluated (due to accept)
firewalld rules are part of iptables, so they're not considered (due to accept)
nftables backend
your direct rules accept the packets in the FORWARD chain
further iptables rules in the FORWARD chain are not evaluated (due to accept)
packet is now subject to firewalld's nftables ruleset, this happens even if the packet is accepted it iptables.
zone is using "default" target, so packet is dropped in the FORWARD chain
due to drop POSTROUTING (SNAT) is never reached
There is no fix possible as it's a result of how the kernel works. You can read more about this in the CAVEATS section of man page firewalld.direct.
Источник:https://github.com/firewalld/firewalld/issues/708
Итак, приведенные выше правила nftables, созданные через альтернативы iptables-nft, не работают, поскольку они все еще используют код ядра iptables. Они просто появляются на nft.
Подробное объяснение взаимодействия nftables и iptables здесь: https://developers.redhat.com/blog/2020/08/18/iptables-the-two-variants-and-their-relationship-with-nftables/