Use o netcat para converter consultas DNS UDP em consultas DNS TCP

0

Estou executando o Debian 9 em uma rede isolada e preciso de serviços DNS para resolver nomes de host externos.

(Eu tenho certeza que alguns vão se perguntar por que eu preciso ser capaz de resolver hostnames externos se eu estiver em uma rede insolada, mas isso é mais detalhes do que eu preciso entrar aqui para fazer a minha pergunta. Basta dizer , esta necessidade existe.)

No host isolado do qual preciso resolver nomes de host externos, configurei este túnel SSH:

ssh -N -L localhost:53:192.168.13.14:53 myUserId@jumpServer

Aqui, 192.168.13.14 é um servidor DNS que pode resolver todos os nomes, globalmente. Este túnel SSH envia tudo o que é ouvido na porta TCP TCP 53 para a porta TCP TCP em 192.168.13.14.

Eu posso usar dig para resolver um nome de host, especificando que a consulta deve ser feita usando a porta TCP 53, em vez da porta UDP usual 53:

root@isolatedHost:~# dig @localhost +vc example.com

; <<>> DiG 9.10.3-P4-Debian <<>> @localhost +vc example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 53054
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;example.com.                   IN      A

;; ANSWER SECTION:
example.com.            3600    IN      A       93.184.216.34

;; Query time: 133 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: Wed Dec 20 15:21:01 MST 2017
;; MSG SIZE  rcvd: 56

A chave para fazer este exemplo funcionar é a seguinte:

  1. dig tem o sinalizador "+ vc +" ("circuito virtual") que permite que você use o TCP em vez do UDP normal
  2. Nosso servidor de nomes (aquele em 192.168.13.14) está configurado para aceitar consultas recursivas normais no TCP, bem como o UDP usual

É claro que a escavação é especial. Pode ser dito para usar TCP em vez de UDP. No caso genérico de um aplicativo aleatório que chama a biblioteca de resolvedor local, a consulta sempre será feita por meio do UDP usual.

O problema com o meu túnel SSH é que o SSH só pode encaminhar as portas TCP . Não pode encaminhar portas UDP. Então, eu preciso de uma maneira de converter todas as consultas DNS do UDP usual para o TCP. Eles podem sair da nossa rede isolada através do túnel SSH e seguir para o servidor de nomes.

A primeira coisa que vem à mente é o netcat:

nc -u -l -p 53 | nc localhost 53

Isso, infelizmente, não funciona e ainda não sei por quê.

Alguém tem uma solução para encaminhar as consultas do DNS UDP para uma rede isolada, usando o netcat em conjunto com um túnel SSH ou de outra forma?

    
por Dave 20.12.2017 / 23:46

0 respostas