Tunelar dados IPv4 através de servidores DNS para contornar restrições de firewall e fornecer acesso de rede encoberto para testes de penetração.
Este é um software que permite criar um túnel de dados IPv4 através de um servidor DNS. Isso pode ser útil em diferentes situações em que o acesso à internet é bloqueado por firewall, mas as consultas DNS são permitidas.
Para compilar o iodine, você precisa do meson.
Execute os seguintes comandos para compilar dentro do diretório build:
meson setup build
cd build
ninja
Para compilar e executar os testes, você precisa da biblioteca check. Inicie-os executando ninja test dentro do diretório de compilação.
Experimente na sua própria LAN! Siga estes passos simples:
./iodined -f 10.0.0.1 test.com.
Se você já usa a rede 10.0.0.0, use outra rede interna como
172.16.0.0../iodine -f -r 192.168.0.1 test.com.
Substitua 192.168.0.1 pelo endereço IP do seu servidor.10.0.0.2 e o servidor tem 10.0.0.1.Para realmente usá-lo através de um servidor de nomes de retransmissão, veja abaixo.
Nota: servidor e cliente precisam falar exatamente o mesmo protocolo. Na maioria dos casos, isso significa executar a mesma versão do iodine. Infelizmente, implementar compatibilidade de protocolo retroativa e futura geralmente não é viável.
Para usar este túnel, você precisa de controle sobre um domínio real (como mydomain.com),
e de um servidor com um endereço IP público para executar o iodined. Se este servidor
já executa um programa DNS, altere sua porta de escuta e então use a opção -b do iodined
para permitir que o iodined encaminhe as requisições DNS. (Observe que este procedimento
não é recomendado em ambientes de produção, porque o encaminhamento DNS do iodined
não é completamente transparente, por exemplo, transferências de zona não funcionarão.)
Alternativamente, você pode encaminhar o subdomínio do seu servidor DNS para o iodined,
que então deve ser executado em uma porta diferente (-p).
Em seguida, delegue um subdomínio (digamos, t1.mydomain.com) ao servidor iodined.
Se você usa BIND para o seu domínio, adicione duas linhas como estas ao arquivo de zona:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
A linha NS é tudo o que é necessário para rotear consultas para o subdomínio t1
para o servidor t1ns. Usamos um nome curto para o subdomínio, para manter o máximo
de espaço possível disponível para o tráfego de dados. No final da linha NS
está o nome do seu servidor iodined. Este pode ser qualquer nome, apontando para qualquer lugar,
mas neste caso é facilmente mantido no mesmo arquivo de zona. Deve ser um nome
(não um endereço IP), e esse nome em si deve ter um registro A
(não um CNAME).
Se o seu servidor iodined tem um IP dinâmico, use um provedor de DNS dinâmico. Simplesmente
aponte a linha NS para ele, e omita a linha A:
t1 IN NS myname.mydyndnsprovider.com. ; note the dot!
Em seguida, recarregue ou reinicie o seu programa de servidor de nomes. Agora quaisquer consultas DNS para
domínios terminando em t1.mydomain.com serão enviadas ao seu servidor iodined.
Por fim, inicie o iodined no seu servidor. O primeiro argumento é o endereço IP
dentro do túnel, que pode ser de qualquer faixa que você ainda não use (por
exemplo 192.168.99.1), e o segundo argumento é o domínio atribuído (neste
caso t1.mydomain.com). Usar a opção -f manterá o iodined em execução no
primeiro plano, o que ajuda durante os testes. O iodined abrirá uma interface virtual
("tun device"), e também começará a escutar consultas DNS na porta UDP 53.
Digite uma senha na linha de comando (-P pass) ou depois que o servidor
tiver iniciado. Agora tudo está pronto para o cliente.
Se houver a possibilidade de você usar um túnel iodine a partir de ambientes
inesperados, inicie o iodined com a opção -c.
A linha de comando resultante nesta situação de exemplo:
./iodined -f -c -P secretpassword 192.168.99.1 t1.mydomain.com
Toda a configuração está feita, basta iniciar o iodine. Ele recebe um ou dois argumentos, o
primeiro é o servidor DNS de retransmissão local (opcional) e o segundo é o domínio
que você usou (t1.mydomain.com). Se você não especificar o primeiro argumento, a
configuração DNS atual do sistema será consultada.
Se consultas DNS forem permitidas para qualquer computador, você pode fornecer diretamente o endereço do servidor iodined como primeiro argumento (no exemplo: t1ns.mydomain.com ou 10.15.213.99). Nesse caso, também pode acontecer de qualquer tráfego ser permitido para a porta DNS (53 UDP) de qualquer computador. O iodine detectará isso e mudará para tunelamento UDP bruto se possível. Para forçar o tunelamento DNS em qualquer caso, use a opção -r (especialmente útil ao testar dentro da sua própria rede).
A interface de túnel do cliente receberá um IP próximo ao do servidor (neste caso 192.168.99.2 ou .3 etc.) e uma MTU adequada. Digite a mesma senha do servidor, seja como opção de linha de comando ou após o cliente ter iniciado. Usar a opção -f manterá o cliente iodine em execução em primeiro plano.
Linha de comando resultante nesta situação de exemplo, adicionando -r força o tunelamento DNS mesmo que o tunelamento UDP bruto fosse possível:
./iodine -f -P secretpassword t1.mydomain.com
De qualquer um dos lados, você agora deve conseguir fazer ping no endereço IP na outra extremidade do túnel. Neste caso, ping 192.168.99.1 a partir do cliente iodine, e 192.168.99.2 a partir do servidor iodine.
Os dados dentro do túnel são apenas IPv4.
O servidor escuta tanto IPv4 quanto IPv6 para requisições recebidas por padrão. Use as opções -4 ou -6 para escutar apenas em um protocolo. O modo bruto será tentado no mesmo protocolo usado para o login.
O cliente pode usar nameservers IPv4 ou IPv6 para se conectar ao iodined. Os nameservers de relay traduzirão entre protocolos automaticamente se necessário. Use as opções -4 ou -6 para forçar o cliente a usar uma versão de IP específica para suas consultas DNS.
Se o seu servidor estiver escutando em IPv6 e for acessível, adicione um registro AAAA para ele na sua configuração de DNS. Estendendo o exemplo acima, ficaria assim:
t1 IN NS t1ns.mydomain.com. ; note the dot!
t1ns IN A 10.15.213.99
t1ns IN AAAA 2001:db8::1001:99
É possível rotear todo o tráfego através do túnel DNS. Para fazer isso, primeiro adicione uma rota de host para o nameserver usado pelo iodine sobre a interface com fio/sem fio, tendo o gateway padrão como gateway. Em seguida, substitua o gateway padrão pelo endereço IP do servidor iodined dentro do túnel DNS e configure o servidor para fazer NAT.
No entanto, observe que o tráfego de dados tunelado não é criptografado de forma alguma e pode ser lido e alterado por terceiros com relativa facilidade. Para máxima segurança, execute uma VPN através do túnel DNS (=tunelamento duplo), ou use acesso por secure shell (SSH), possivelmente com encaminhamento de portas. Este último também pode ser usado para navegação web, quando você executa um proxy web (por exemplo, Privoxy) no seu servidor.
O servidor iodined responde a requisições NS enviadas para subdomínios do domínio do túnel. Se o seu subdomínio iodined for t1.mydomain.com, envie uma requisição NS para foo123.t1.mydomain.com para ver se a delegação funciona.
dig é uma boa ferramenta para isso:
% dig -t NS foo123.t1.mydomain.com
ns.io.citronna.de.
Além disso, o servidor iodined responderá a requisições começando com 'z' para qualquer um dos tipos de requisição suportados, por exemplo: