Faça seu próprio servidor DNS maluco!

Eu queria compartilhar uma joia que fiz e tenho uma demonstração divertida.

Sempre me interessei por clientes e servidores DNS e a certa altura tive uma configuração muito específica com servidores atrás de uma conexão ADSL NAT, o que significava que nomes resolvidos localmente apontavam para servidores dentro do NAT enquanto nomes resolvidos externamente deveriam apontar para o modem ADSL tinha regras VHOST apropriadas. Assim nasceu o RubyDNS.

RubyDNS é um servidor DNS infinitamente flexível que inclui um cliente DNS assíncrono para garantir um comportamento sem bloqueio ao encaminhar solicitações para cima. É construído em EventMachine que teoricamente deve fornecer uma boa base assíncrona para o processamento de solicitações de DNS e integração com outros sistemas assíncronos (por exemplo, em-http-request).

Para me divertir, dei um exemplo. WikipediaDNS permite que você consulte wikipedia via DNS, por exemplo:

^_^ > dig +tcp +short @ayako.oriontransfer.org computer.wikipedia TXT
"A computer is a general purpose device that can be programmed to carry out a finite set of arithmetic or logical operations. Since a sequence of operations can be readily changed, the computer can solve more than one kind of problem."

Estou executando no meu VPS (temporariamente para esta demonstração, não espere que seja uma casa permanente) e você também pode executá-lo localmente, o código está disponível: https://github.com/ioquatix/rubydns/ blob / master / test / examples / wikipedia-dns.rb – neste exemplo, eu forcei + tcp porque o udp parece estar bloqueado, pelo menos da minha localização atual.

RubyDNS tem sido usado em uma série de sistemas interessantes, incluindo Murakumo, um sistema DNS ponto a ponto distribuído e ao lado do vagrant para fornecer nomes DNS registrados dinamicamente para hosts virtuais criados dinamicamente. Alguém também me contatou recentemente sobre como usá-lo para testes de integração de rede em grande escala e também testes de nível de navegador de algum tipo. Foi usado no f *** PSN, uma ferramenta para contornar a rede PSN, e também foi usado no SiriProxy (tenho certeza que você pode adivinhar o que ele faz).

Eu adoraria compartilhar RubyDNS com a esperança de ver mais projetos interessantes desenvolvidos em cima dele. Eu fico muito animado pensando em todas as possibilidades. Por exemplo, seria realmente interessante fazer uma arquitetura cliente-servidor para envio de dados via DNS, talvez algum tipo de sistema de segurança de porta DNS, melhor integração de sistemas de informação com DNS (por exemplo, mapeamento de “banco de dados de documentos” para registros DNS).

O código-fonte está disponível: https://github.com/ioquatix/rubydns

Página inicial do projeto com vídeo de introdução e documentação: http://www.codeotaku.com/projects/rubydns/index.en