Iodine et DNS Tunneling

Plop à tous …

Aujourd’hui, encore du DNS Tunneling … et cette fois avec iodine, un soft écrit en C, beaucoup plus puissant que les autres scripts en perl comme dnstunnel et ozymandns que j’ai présenté sur mon blog, qui permet des connexions en parallèles, ce qui permet un chargement plus rapide des pages web, par contre, comme ça utilise le protocole DNS, le débit peut seulement aller jusqu’à 20-30 ko/s donc c’est assez limité.
Mais ça permet d’utiliser la plupart des bornes d’accès ouvert de type Neuf Wifi/FreeWifi qui force l’utilisation de leurs services pour utiliser la borne wifi sans avoir à fournir de couple login/pass valide ^^.

Comme pour les 2 autres systèmes de dns tunneling présenté, il vous faut un serveur extérieur avec un serveur DNS (cf la config présenté ici) et le logiciel iodine :

Sur le serveur donc (en utilisant la config DNS de l’autre lien) :

apt-get install iodine
iodined 172.16.0.0 -l votreIP -u nobody -P UnMotDePasse tunnel.domaine.org

172.16.0.0 est la plage IP qui sera fournit par le soft (on peut prendre 10.x.x.x ou 192.168.x.x)
le -l est là pour spécifier l’ip sur laquelle écouter
le -u est là pour dropper les droits
-P est là pour spécifier un mot de passe (histoire d’empecher les autres de profiter de ce service)
tunnel.domaine.org, et le nom du sous domaine en NS qui sera utilisé.

Sur le client :

apt-get install iodine
iodine -P UnMotDePasse tunnel.domaine.org

Et normalement on est connecté … le seul problème, c’est que le soft ne spécifie aucune route à part celle de son réseau, il faut donc les spécifier :

route del default
route -host ipDuDNSFournitParLaBorne gw ipDuGatewayFournitParLaBorne
route add default gw 172.16.0.1

Ce qui supprime la route par défaut, force l’utilisation du gateway fournit par la borne pour l’accès au serveur DNS, puis route tout le traffic restant sur le gateway du tunnel …

Le gros problème est de faire cette manipulation à chaque connexion à un réseau wifi, j’ai donc fait un script pour automatiser ça en détectant le DNS et le Gateway fournit, puis en effectuant les remplacements et qui remet tout en place une fois que l’on termine la connexion :

#!/bin/bash

IOBIN="/usr/sbin/iodine"
IODOM="tunnel.domaine.org"
IOPAS="UnMotDePasse"
IOMTU="1188"
IODEV="dns0"
IOIP="172.16.0.1"

#FIN EDITION

DNS=`cat /etc/resolv.conf |egrep -v "^#"| head -1|awk '{print $2}'`
GW=`netstat -rn|egrep "^0.0.0.0"|tr -s " " " "|cut -d " " -f2` 
echo "Lancement de $IOBIN avec les options demandées"
$IOBIN -P $IOPAS -m $IOMTU $IODOM

echo "Remplacement des routes"
route del default
route add -host $DNS gw $GW
route add default gw $IOIP $IODEV
echo "***********************************"
echo "Appuyer sur une touche pour terminer la connexion"
read yornot 
killall -9 $IOBIN
echo "Remise en place des routes"
#route del default
route del -host $DNS
route add default gw $GW

Il suffit ensuite de le configurer avec vos options et de l’executer en root pour profiter des bornes wifi gratos … Bien sûr la seule utilitée de cette méthode est de se connecter rapidement au net au détriment du débit que l’on aurait après avoir cracké une borne wifi WEP/WPA …

27 réflexions sur « Iodine et DNS Tunneling »

  1. Salut,
    je suggère d’utiliser 0.6rc1 de iodine (se compile tout seul), qui permet du udp direct (sans utiliser le protocol dns) lorsque c’est possible. Quelles perfs obtiens-tu sur du wifi? Sur de la 3G si ce n’est pas du vrai tunnel udp ce n’est pas glorieux (lire: utilisable pour ssh mais pas pour browser à moins d’être extrêmement patient).

  2. Pour ma part sur du Neuf Wifi je tourne en moyenne à 14-20ko/s avec des pointes à 40-50ko/s suffisant pour du browsing (en évitant youtube et co.).

    Côté 3G j’utilise plutôt le tether de mon G1 qui me donne des perfs similaire.

  3. Salut,
    Si je comprend bien la derniere de iodine n’a plus besoin d avoir un serveur DNS? est il possible d avoir un tuto sur comment faire sans DNS?
    ca serait cool, il n t a pas grand chose sur le net

  4. Bonjour,
    je suis en train de mettre en place iodine mais je me demande :
    Ai-je vraiment besoin de 2IP sur internet?
    Est ce faisable avec un serveur iodined qui héberge aussi un serveur dns?
    Je ne comprends pas trop tout le routage au niveau de iodine.
    pouvez vous m’aider?
    merci

  5. Pour utiliser iodine, si l’on a une seul ip, comme on ne peut avoir qu’un seul serveur écoutant sur le port 53 (dns), il faut héberger sur sa machine iodine, et il faut alors utiliser des services du style xname.org pour gérer le DNS.

    Sinon, il faut 2 IP, et dans ce cas, jouer sur les binds

  6. je possède un compte dyndns pour récupérer mon IP et pfsense pour faire du nat si besoin.
    Derrière pfsense un serveur pour iodine .Cette infrastructure est-elle suffisante?

  7. XName est plus ou moins équivalent à dyndns, mais est plus fait pour gérer son nom de domaine (nécessite une IP fixe).
    XName n’est pas obligatoire dans cet environnement.

  8. ok je sais tout maintenant.
    Je vais m’essayer je reviens vers vous en cas de problème.
    merci

  9. me revoila 🙂
    Je viens de faire pas mal de test mais je n’arrive pas a me connecter a iodine sur le port 53 depuis internet.
    La configuration decrite dans le manuel iodine en local fonctionne tres bien part contre.

    pour ce qui est d’internet j’utilise dyndns puis un nat du port 53 sur mon serveur iodine mais je n’arrive pas a me connecter.
    auriez vous une idée?

  10. Si la configuration fonctionne correctement en local, et que les problèmes apparaissent uniquement sur internet, je penche plutôt pour un problème de redirection de port (vérifier le routeur). Pour ma part, je n’ai utilisé ce logiciel que sur mon serveur, donc je ne sais pas trop la configuration a utiliser sur un réseau local, mais si la redirection de port (TCP et UDP) est effectué, il ne devrait y avoir aucun probleme.

    Vous disiez utiliser dyndns (je n’avais pas réellement réfléchi au type de redirection que fournit ce service) … en fait, je crois pas que ça puisse fonctionner avec ce système (à vérifier dans les options de configuration de dyndns), car il faut être déclaré « serveur de nom » (NS) dans la configuration du nom de domaine, ce qui n’est pas le cas avec ces services. (Cela dit, il faudrait vérifier sur le site du service, ma dernière expérience dyndns remonte à 4 ans donc, il est possible qu’ils fournissent des redirections de type NS).

    ça peut peut-être fonctionner en utilisant ce qu’ils appellent des « wildcards » (à vérifier, si c’est du NS ça passe, mais si c’est du A en *, ça ne marchera pas je pense).

  11. je vais verifier dyndns merci.
    mon nat est bon pas de soucis au niveau du routeur.je vous tiens au courant.

  12. je viens de verifier sur dyndns et tu avais raison.
    Je n’ai pas de « zone services » = nom de domaine a mon nom je n’utilise que l’option  » hostname » qui ne fournit pas la redirection NS, je ne peux donc pas utiliser dyndns gratuitement pour faire tourner iodine.Faut -il que je me tourne vers xname? que je ne connais pas :).
    Le but étant de le faire tourner iodine gratuitement.

  13. Pour utiliser xname, il faut un nom de domaine (un .info côute 1 à 2€ par an chez 1and1), et une ip fixe (avec une ip dynamique, il faudrait utiliser dyndns avec un CNAME dessus, mais comme il n’y a pas de ns … :s).

  14. mince alors avec mon ip dynamique je n’ai aucune chance de faire tourner iodine a la maison si je comprends bien 🙁

  15. Bonjour,
    je reviens vers toi, je viens de souscrire a freeDNS qui me permet apparemment d’avoir un A en dynamique et d’avoir en plus un NS.
    Mais je n’ai pas réussi a le faire fonctionner.
    Penses tu que c’est possible avec ce service?

  16. Salut,

    Je viens de remarquer que dans ton cas, il était possible avec dyndns de faire fonctionner iodine (comme ils fournissent un ndd qui est utilisable en CNAME, il aurait juste fallut mettre le tunnel.ndd IN NS le.nom.fournit.par.dyndns).

    Sinon, je ne connais pas freeDNS, mais tant que ton NS pointe sur ton IP, ou un CNAME qui pointe ton ip ça devrait fonctionner.

    Si ça ne marche toujours pas, vérifie bien ton nat et ton fw. (tu peux utiliser le logiciel dig depuis une machine externe à ton réseau pour faire des requêtes DNS sur ton serveur iodine, et vérifier qu’il fonctionne).

    Sinon les deux scripts (ozymandns et dnstunnel) fournit plus haut font l’équivalent de iodine en plus simple (qui peuvent servir au moins à tester si la config dns/nat/fw est bonne).

  17. Bonjour,
    je ne comprends pas vraiment cette ligne :
    iodined 172.16.0.0 -l votreIP -u nobody -P UnMotDePasse tunnel.domaine.org

    A quoi correspond « votre ip » ? Au serveur dns que j’utilise ou à l’@IP de mon serveur que je veux iodined ou autre chose ? Car comme on entre déjà un nom de domaine associé à l’@IP du serveur, je ne vois pas trop à quoi cela sert.

    Merci

  18. Bonjour, ça correspond à l’ip d’écoute du serveur iodined, si votre serveur n’a qu’une seule ip, vous pouvez omettre ce paramètre (dans mon cas, mon serveur avait deux IP, une avec le serveur DNS, et une avec le serveur iodine, comme ces deux services utilisent le port 53 en udp/tcp, il fallait donc les binder sur leur propre IP).

Les commentaires sont fermés.