Iptables para redirecionar o IP e a porta de pesquisa de DNS

20

Eu descobri que meu ISP (verizon) está interceptando todo o tráfego DNS na porta 53.

Usando o iptables, desejo redirecionar todo o tráfego de pesquisa de DNS para um IP e uma porta específicos (5353). Qualquer tentativa de conectar meu computador a outro computador na porta 53 deve ser redirecionada para 23.226.230.72:5353.

Para verificar o servidor DNS e a porta que estou tentando usar, executei este comando.

~$ dig +short serverfault.com @23.226.230.72 -p5353
198.252.206.16

Esta é a regra do iptables que estou tentando usar.

iptables -t nat -A OUTPUT -p udp -m udp --dport 53 -j DNAT --to-destination 23.226.230.72:5353

Após adicionar essa regra, todas as pesquisas de DNS não são encontradas. Os pings do site retornam unknown host . Páginas da web dizem "Servidor não encontrado".

~$ mtr serverfault.com
Failed to resolve host: Name or service not known

Eu quero que meu DNS seja pesquisado em 23.226.230.72:5353. Como posso fazer a regra do iptables funcionar?

EDITAR

Demonstração de interceptação de DNS (porta 53) pelo meu ISP. Rastreie a saída da escavação para 23.226.230.72 pela porta 5353 e, em seguida, pela porta 53.

~$ dig +trace stackexchange.com @23.226.230.72 -p5353

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p5353
;; global options: +cmd
.           86395   IN  NS  ns7.opennic.glue.
.           86395   IN  NS  ns4.opennic.glue.
.           86395   IN  NS  ns3.opennic.glue.
.           86395   IN  NS  ns5.opennic.glue.
.           86395   IN  NS  ns2.opennic.glue.
.           86395   IN  NS  ns10.opennic.glue.
.           86395   IN  NS  ns1.opennic.glue.
.           86395   IN  NS  ns6.opennic.glue.
.           86395   IN  NS  ns8.opennic.glue.
dig: couldn't get address for 'ns8.opennic.glue': no more


~$ dig +trace stackexchange.com @23.226.230.72 -p53

; <<>> DiG 9.9.5-3-Ubuntu <<>> +trace stackexchange.com @23.226.230.72 -p53
;; global options: +cmd
.           7440    IN  NS  f.root-servers.net.
.           7440    IN  NS  d.root-servers.net.
.           7440    IN  NS  j.root-servers.net.
.           7440    IN  NS  i.root-servers.net.
.           7440    IN  NS  g.root-servers.net.
.           7440    IN  NS  k.root-servers.net.
.           7440    IN  NS  a.root-servers.net.
.           7440    IN  NS  h.root-servers.net.
.           7440    IN  NS  e.root-servers.net.
.           7440    IN  NS  m.root-servers.net.
.           7440    IN  NS  c.root-servers.net.
.           7440    IN  NS  b.root-servers.net.
.           7440    IN  NS  l.root-servers.net.
;; Received 239 bytes from 23.226.230.72#53(23.226.230.72) in 2948 ms

stackexchange.com.  215 IN  A   198.252.206.16
;; Received 62 bytes from 192.228.79.201#53(b.root-servers.net) in 116 ms

Meus iptables atuais. iptables-save

~# iptables-save
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*mangle
:PREROUTING ACCEPT [79950528:41742899703]
:INPUT ACCEPT [78748282:41360159554]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85455483:57472640071]
:POSTROUTING ACCEPT [85480442:57475512901]
-A POSTROUTING -o lxcbr0 -p udp -m udp --dport 68 -j CHECKSUM --checksum-fill
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*nat
:PREROUTING ACCEPT [71:18713]
:INPUT ACCEPT [7:474]
:OUTPUT ACCEPT [109:7855]
:POSTROUTING ACCEPT [109:7855]
:DOCKER - [0:0]
-A PREROUTING -m addrtype --dst-type LOCAL -j DOCKER
-A OUTPUT ! -d 127.0.0.0/8 -m addrtype --dst-type LOCAL -j DOCKER
-A POSTROUTING -s 172.17.0.0/16 ! -d 172.17.0.0/16 -j MASQUERADE
-A POSTROUTING -s 10.0.3.0/24 ! -d 10.0.3.0/24 -j MASQUERADE
COMMIT
# Completed on Tue Jul 15 23:06:52 2014
# Generated by iptables-save v1.4.21 on Tue Jul 15 23:06:52 2014
*filter
:INPUT ACCEPT [78748139:41360144354]
:FORWARD ACCEPT [13:5427]
:OUTPUT ACCEPT [85454926:57472600172]
:fail2ban-ssh - [0:0]
:fail2ban-vsftpd - [0:0]
-A INPUT -p tcp -m multiport --dports 21,20,990,989 -j fail2ban-vsftpd
-A INPUT -p tcp -m multiport --dports 22,6622 -j fail2ban-ssh
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 53 -j ACCEPT
-A INPUT -i lxcbr0 -p tcp -m tcp --dport 67 -j ACCEPT
-A INPUT -i lxcbr0 -p udp -m udp --dport 67 -j ACCEPT
-A FORWARD -o docker0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i docker0 ! -o docker0 -j ACCEPT
-A FORWARD -i docker0 -o docker0 -j ACCEPT
-A FORWARD -o lxcbr0 -j ACCEPT
-A FORWARD -i lxcbr0 -j ACCEPT
-A fail2ban-ssh -j RETURN
-A fail2ban-vsftpd -j RETURN
COMMIT
    
por Rucent88 14.07.2014 / 16:19

5 respostas

11

Execute todas essas instruções como root (sudo).

Edite este arquivo.

/etc/NetworkManager/NetworkManager.conf

Desative o DnsMasq comentando a linha dns=dnsmasq . Coloque um # na frente da linha

#dns=dnsmasq

Reinicie sua rede.

service network-manager restart

Adicione estas regras de iptable.

iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to 23.226.230.72:5353
iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353
    
por 20.07.2014 / 09:07
3

Parece que o que você realmente quer é controlar o que acontece com suas consultas DNS.

Não tenho certeza se usar o iptables seria a minha solução preferida.

Você já pensou em configurar um servidor DNS local que simplesmente encaminha suas solicitações para o host e a porta que deseja? Um exemplo: usando a opção de encaminhadores bind9, você pode adicionar uma porta a um encaminhador.

Tal configuração é muito mais fácil de manter e solucionar problemas, e pode ser muito mais flexível. Considere a vantagem do cache, ou apenas considere o caso em que seu servidor DNS externo está inativo. Você pode ter vários encaminhadores em sua configuração de DNS, mas apenas um IP nas regras do iptables ....

Existe uma boa visão geral da configuração do bind9 em um tutorial no oceano digital . Basta adicionar a porta aos encaminhadores e você deve estar tudo pronto.

O Bind9 não consome muitos recursos e é facilmente configurado (ou pelo menos: mais fácil que o iptables :-))

    
por 19.07.2014 / 10:11
2

Tente isto:

Primeiro, você deve ativar a opção de encaminhamento em

/etc/sysctl.conf

Defina para um o valor de

net.ipv4.ip_forward = 1

Ativar as alterações

sysctl -p 

Salve e execute o seguinte:

iptables -t nat -A PREROUTING -p tcp --sport 53 -j DNAT --to-destination 23.226.230.72:5353
iptables -t nat -A POSTROUTING -j MASQUERADE

Se você pudesse especificar a interface interna (-i eth1) em PREROUTING ou / e out-interfect (-o eth0), o IN POSTROUTING poderia ser útil.

NOTA: A linha MASQUARADE é necessária enquanto isso mascara o IP de destino com o IP principal.

    
por 14.07.2014 / 16:43
1

Tente isto:

iptables -t nat -A OUTPUT -p tcp --dport 53 -j DNAT --to 23.226.230.72:5353;

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

iptables -t nat -A POSTROUTING -j MASQUERADE

Isso significa:
 1) Qualquer usuário local contatando o mundo para a porta tcp 53 enviar para 23.226.230.72 na porta 5353.
 2) O mesmo que 1 mas para o udp
 3) Defina as informações de origem no pacote de saída como provenientes de nós.

    
por 18.08.2015 / 11:58
0
iptables -t nat -A PREROUTING -p tcp --dport 53 -j DNAT --to XX.XX.XX.XX:53
iptables -t nat -A PREROUTING -p udb --dport 53 -j DNAT --to XX.XX.XX.XX:53
iptables -t nat -A POSTROUTING -j MASQUERADE
    
por 06.06.2018 / 12:28

Tags