Redirecionar toda a solicitação de DNS UDP de saída para um servidor DNS localhost

2

Estou tentando redirecionar toda a solicitação de DNS de saída (feita do local) para um túnel em execução no host local para ouvir o UDP em 127.0.0.1:5353.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 127.0.0.1:5353

Testando com

nc -u -l -p 5353

nc -u 127.0.0.1 53

está bem, e a sessão do udp está funcionando, mas enquanto tento testá-lo com

nc -u 8.8.8.8 53

O nc listening pode receber o tráfego, mas a resposta falha com

enviado 2, rcvd 2: Conexão recusada

enquanto

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 192.168.1.108:5353

pode funcionar corretamente e o dispositivo em execução no mesmo wifi pode receber e responder com êxito.

Gostaria de lhe agradecer antecipadamente por me ajudar.

Editar: consultas DNS feitas com o TCP são feitas separadamente, não há necessidade de considerá-las.

    
por Xiaokang Wang 16.07.2016 / 13:07

1 resposta

2

Para redirecionar solicitações baseadas em UDP do DNS, se o daemon / proxy de DNS estiver escutando na porta 5353 / UDP, será necessário fazer isso:

iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

A fonte tem que ser o netblock / rede (s) interna (s) usada (s), pois não precisamos de loops (ou seja, ainda podemos precisar fazer solicitações de DNS para o exterior).

Se o roteamento de uma rede interna em uma máquina multihomed, você também pode aplicar a interface, não precisando da rede de origem.

iptables -i eth0 -t nat -A PREROUTING  -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:5353

Você também pode fazer isso na porta 53, desde que você coloque o destino na lista negra como em:

iptables -t nat -A PREROUTING  ! -d 127.0.0.1/32 -p udp -m udp --dport 53 -j DNAT --to-destination 127.0.0.1:53

A fila OUTPUT pode funcionar em testes locais, no entanto, para máquinas remotas e a configuração atual, é aconselhável usar a fila PREROUTING.

    
por 16.07.2016 / 14:29