I'm looking for a solution through IP chains/tables, firewall rules etc (or at least "plugins" with some history) rather than custom generated code.
Não vai acontecer, desculpe. Os mecanismos de firewall e roteamento normalmente resolverão o registro DNS para um endereço IP quando a política for ativada, e o Linux não é uma exceção a isso. O kernel não realizará pesquisas de DNS adicionais para procurar a alteração do registro DNS.
A página manpage para iptables
deixa isso bem claro, enfatizando o meu:
Address can be either a network name, a hostname, a network IP address (with /mask), or a plain IP address. Hostnames will be resolved once only, before the rule is submitted to the kernel. Please note that specifying any name to be resolved with a remote query such as DNS is a really bad idea.
O DNS tradicionalmente não tem um papel nesses tipos de pilhas porque eles estão tentando manter a operação o mais determinista possível. Ignorar a complexidade que a implementação desse código adiciona ao quadro geral é também um risco de segurança, porque você está essencialmente delegando o controle sobre sua diretiva de segurança para quem controla o registro DNS. Mesmo se você tiver 100% de certeza que confia no operador do servidor remoto, o DNS baseado em UDP é um protocolo inerentemente falso (o DNSSEC protege contra falsificação upstream, mas não fornece proteções entre cliente e recursor aka "a última milha"), tornando isso uma péssima idéia em toda a linha. Se você encontrar um produto que suporte isso, provavelmente não deveria apoiá-lo!
Você precisa remover o DNS dessa equação. É a ferramenta errada para o trabalho na camada em que você está trabalhando.