É possível (como?) Rotejar pacotes UDP de entrada com um IP de destino para um IP de destino que seja resolvido por meio de uma consulta DNS para um URL estático?

2

Eu tenho um conjunto de dispositivos móveis que estão configurados para enviar mensagens UDP para um endereço IP definido em sua SRAM. Eles não têm a capacidade de armazenar um URL ou resolver um URL para um endereço IP. O tráfego que vai para o IP de destino para o qual os dispositivos estão enviando deve passar por um roteador de gateway sob meu controle. O roteador de gateway está executando o OpenWRT linux. Gostaria de rotear esses pacotes UDP para o Amazon Elastic Load Balancing (um serviço da AWS). Uma restrição do Elastic Load Balancing é que (até onde eu consegui determinar) o DNS deve ser usado para resolver o IP do load-balancer (porque a qualquer momento pode haver mais de um loadbalancer em uso pela AWS, e a escolha de qual usar é definida no DNS sob o controle do Amazonas). Essa é a longa história.

O conto é "Como eu posso direcionar pacotes UDP roteados através de um roteador OpenWRT para um endereço resolvido através do DNS naquele roteador?"

Eu estou procurando uma solução através de cadeias de IP / tabelas, regras de firewall etc (ou pelo menos "plugins" com algum histórico) em vez de código gerado personalizado.

Agradeço a todos antecipadamente por sua ajuda!

    
por darkhipo 05.08.2015 / 19:24

1 resposta

4

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.

    
por 05.08.2015 / 21:24