Se tudo for possível, considere a possibilidade de configurar um proxy transparente no nível do aplicativo. Um proxy de aplicação provavelmente será muito mais fácil de fazer esse tipo de filtragem.
Se você deve fazê-lo com iptables, uma opção kludgy seria criar uma cadeia, criar um script de linha de comando que atualize periodicamente essa cadeia específica com os resultados do DNS para o nome que você precisa usar.
Se alguém tentasse criar algo que realmente fizesse um DNS baseado em filtragem de pacotes, certamente teria que ser feito via userspace. Especificamente, você usaria algo como libnetfilter_queue . Eu nunca usei isso, mas Packetbl pode estar perto de fazer isso, mas não parece ser muito bem conservado.
Outra alternativa pode ser configurar a filtragem da Camada 7 . Você pode filtrar uma parte da solicitação se o nome DNS estiver sendo transmutado como parte da carga útil do pacote.