dns2tcp - Encapsulation dans des requêtes DNS
Par Yannick le jeudi, 15 mars 2007, 00:34 - Sécu - Lien permanent
- Introduction
dns2tcp est un outils permettant d'encapsuler du trafic dans des requêtes DNS.
La partie serveur simule un serveur DNS (donc doit écouter sur le port 53) et est par exemple à installer sur sa ligne Adsl perso. Le client encapsule les données dans des requêtes DNS qui sont envoyées au serveur interne spécifié. Ce serveur DNS qui lui à le plus souvent accès au port 53 vers Internet (ou en tous cas de résoudre des domaines externes), transmet à notre faux serveur DNS les données qui sont ensuite décapsulées. Le retour des paquets ce fait de la même manière.
- Coté DNS
Il est nécessaire d'ajouter une entrée dans les DNS exemple:
dns2tcp.example.org NS 1.2.3.4
C'est en essayant de résoudre des sous domaines de ce nom que les paquets arriveront jusqu'au faux serveur DNS.
- Coté serveur
cat /etc/dns2tcpd.conf
listen = 0.0.0.0
port = 53
user=nobody
chroot = /var/empty/dns2tcp/
domain = dns2tcp.example.org
ressources = sshYop:127.0.0.1:22
Ici nous indiquons qu'une connexion vers le port 22 du même serveur sera accessible sous le nom arbitraire sshYop
Lancement du server (ici en mode debug...)
sudo dns2tcpd -F -d 1 -f /etc/dns2tcpd.conf
- Coté client
Lister les "connexions disponibles"
dns2tcpc -z dns2tcp.example.org 192.168.1.1
Les paramètres étant le nom de domaine et le serveur DNS accessible (dans l'exemple 192.168.1.1).
La réponse doit être:
Available connection(s) :
sshYop
Pour monter la connexion "DNS":
dns2tcpc -c -r sshYop -l 4430 -z dns2tcp.example.org 192.168.1.1
Les paquets envoyés vers le port 4430 local seront donc envoyés dans l'exemple au port 22 de la machine dns2tcp.example.org (mais tout ceci uniquement avec des requêtes DNS).
Pour monter la connexion SSH:
ssh -p 4430 127.0.0.1
Du browsing est par exemple possible avec la partie Socks de Ssh:
ssh -D 3333 -p 4430 127.0.0.1
- Résumé en image
- Conclusion
Ce programme permet donc d'accéder à Internet quand on a seulement le droit d'accéder à un serveur DNS "interne".
Les "voyageurs" verront tout de suite l'utilité ;)
Merci Modu ;)




Commentaires
Mais c'est mortel ca !
(pas mal ton site :-) )
Bahh c'est du Modu ;)
Salut, ce procédé à l´air super, mais il y a un point qui viens atténué ´l´awesomité´´ du truc.
En effet, il faut avoir accès au DNS du réseau local où l´on est pour modifier le fichier de zones. Seulement si on a accès au DNS, ca veut dire qu´au sein du réseau, on a une responsabilité assez grande, et très probablement la possibilité d´ouvrir les ports qu´on veut vers sa machine. Dans ce cas, dns2tcp n´a plus d´utilité, si?
Au contraire, si on se connecte via un hot-spot publique mais payant, on n´a pas du tout d´accès sur le DNS, et alors on ne peux plus toucher au serveur DNS et dns2tcp n´a plus d´utilité, si?
Est-ce que la solution ne serait-elle pas de mettre ´´nameserver mon.domaine.com´´ au fichier /etc/resolv.conf pour que ca fonctionne?
>En effet, il faut avoir accès au DNS du réseau local où l´on est pour modifier le fichier de zones.
Non. L'entrée a créer est sur ta zone a toi sur Internet... que tu as créé quand tu était "dehors" tranquille :)
Sur le DNS du réseau local ( celui du hotspot )on a aucun droit, si ce n'est de lui faire résoudre nos requetes.
Lui le DNS local ayant les droits pour aller sur Internet vers les ports 53...
>Est-ce que la solution ne serait-elle pas de mettre ´´nameserver mon.domaine.com´´ au fichier /etc/resolv.conf pour que ca fonctionne?
Non. Car généralement ton PC n'as pas le droit de faire des requetes en direct vers mon.domaine.com.
Et quand bien meme tu aurais le droit, ca ne te permettrais que de faire des resolution DNS.. pas d'encapsuler d'autres protocoles a l'intérieur d'un trafic DNS.
Je ne sais pas si c'est clair ? Sinon demande moi d'autres précisions.
Non, "l´awesomité" n'est pas atténuée ;)
Salut.
D'accord, on se fou du DNS du client en fait, elle sert à résoudre le nom de domaine qui correspond au proxy je suppose.
En fait le truc que je ne comprends pas, c'est de savoir où se trouve le serveur DNS dans lequel on renseigne:
"dns2tcp.example.org NS 1.2.3.4"
Il doit dont se situer dans le réseau local où se situe mon proxy, non? Car l'image d'illustration suggère que ce DNS est dans le réseau local du client (Je suppose que la limitation marron représente le nuage internet). Si elle est dans le réseau proxy, ça nous donne:
Donc, côté client:
- 1 client
Côté serveur:
- 1 proxy dns2tcp
- 1 serveur dns (de type "bind" je suppose)
Est-ce celà?
Je reprend pour clarifier:
- La boite bleue
Ton poste qui veut desesperement aller de l'autre coté du FW.
Est installé dessus en autre la partie "client" de dns2tcp
- La boite orange
Le serveur DNS du reseau Interne.
Les machines bleue peuvent lui faire des requetes DNS, lui ira sur Internet trouver les reponses. et les renverra.
- La "limitation" viollette
Le mechant FW qui empeche la boite bleue d'aller sur internet (sauf a sortir une CB)
- La boite verte
Un PC ayant pour IP 1.2.3.4 , sous ton controle, par exemple un PC chez toi sur ta ligne Adsl perso..
En ecoute un "faux" serveur DNS sur le port 53. (La partie Server de Dns2tcp)
- Non représenté
Les serveurs DNS de la zone example.org (des vrais serveurs DNS genre Bind, genre les DNS de Gandi etc..)
sur lesqueles tu as mis avant l'entree "dns2tcp.example.org NS 1.2.3.4"
Je ne comprends toujours pas l'intéret de recréer un nom de domaine si j'en possède déjà un. J'ai essayé mon nom de domaine avec un serveur openDNS, mais ça ne marche pas.
Aussi, si le proxy DNS écoute sur le port 53, alors comment je pourrais résoudre le nom de domaine que j'indique dans dns2tcpc, alors que mon vrai DNS est inaccessible d'en dehors?
Salut !!
Super article...
Mais je me pose des questions:
Il faut donc ajouter une entrée dans un DNS externe.
Mais comment fait-on pour ajouter une telle entrée? (commandes particulières?)
Faut-il disposer d'un hébergement ou bien est-ce accessible à tout le monde?
Et combien de temps reste valide une entrée?
Merci bien
> Il faut donc ajouter une entrée dans un DNS externe.
oui
> Mais comment fait-on pour ajouter une telle entrée? (commandes particulières?)
On édite la zone comme on le fait pour n'importequelle entrée MX, A etc...
> Faut-il disposer d'un hébergement ou bien est-ce accessible à tout le monde?
Il faut disposer d'un DNS "normal" pour créer le NS du sous domaine. (DNS du registrar par exemple)
Il faut disposer d'une machine en ecoute du démon dns2tcpd (Machine "perso" sur ligne ADSL par exemple)
Bon à priori j'ai trouvé ca comme différences entre Iodine et NSTX, tous deux de meilleurs concurrents à DNS2TCP à ce qu'il me semble :
Compared to NSTX, iodine has the following advantages:
Higher performance
iodine uses the NULL type that allows the downstream data to be sent without encoding. Each DNS reply can contain over a kilobyte of compressed payload data.
Portability
iodine runs on many different UNIX-like systems as well as on Win32. Tunnels can be set up between two hosts no matter their endianness or operating system.
Security
iodine uses challenge-response login secured by MD5 hash. It also filters out any packets not coming from the IP used when logging in.
Less setup
iodine handles setting IP number on interfaces automatically, and up to 16 users can share one server at the same time. Packet size is automatically probed for maximum downstream throughput.
Even though Iodine is much easier to use and it has clients for Windows, it seems that it is not that reliable as NSTX, as NSTX works in some networks where Iodine fails. This has probably something to do with the different types of DNS queries that are used by those two applications.
The immediately obvious advantages are the Windows client, the password protection and the much easier setup process. As iodine comes bundled in most Debian distributions, you can just install it using apt-get
http://think-security.com/ip-over-d...
Le client dns2tcp pour windows existe : http://azertyfab.free.fr/dns2tcp/