Les instructions qui suivent sont orientées iPhone 3G 3.1.2 et Ubuntu 9.10 mais devraient être adaptables.

MANIPULATIONS SUR L'IPHONE

  • D'abord, il faut le jailbreaker avec blackra1n. C'est magique, ça prend environ 15 secondes chrono. Pour ça il faut avoir un Windows sous la main (ou comme moi utiliser VirtualBox).
  • Cliquez sur l'icône blackra1n sur le bureau et installez Cydia. En le lançant il fait sa tabouille et demande à mettre à jour les "paquets essentiels", on le laisse faire.
  • Avec Cydia, installez le paquet OpenSSH. C'est lui qui permetra de se connecter directement à l'iPhone. On doit pouvoir installer OpenSSH sans passer par Cydia directement en montant le filesystem de l'iPhone avec iFuse (j'en reparle plus bas) puis en plaçant les bons fichiers aux bons endroits mais comme de toutes façons il faut le jailbreaker pour pouvoir sortir du chroot-jail, ça serait un peu se faire chier pour rien.

Et voilà, l'iPhone est prêt. Vous pouvez même virer blackra1n et Cydia en passant si comme moi vous préférez un iPhone qui soit au maximum "clean". De toutes façons avec OpenSSH vous avez maintenant un accès direct à votre iPhone en tant que root, ce qui permet de faire toutes les bidouilles qu'on veut en ligne de commande sans passer par des applis hasardeuses.

MANIPULATIONS SOUS LINUX

Apple utilise un protocole USB propriétaire un peu chelou mais heureusement, y'a des gens super intelligents qui se sont penchés sur la question et qui ont reverse-engineeré l'affaire. Suffit juste d'installer quelques paquets pour que votre Linux puisse discuter tranquillement avec votre iPhone.

  • Tout d'abord, lancez le Synaptic Package Manager et ajoutez la source suivante:
ppa:pmcenery/ppa

Pour les autres distributions, voyez par là pour trouver les repos/.deb/.rpm/sources qui vont bien.

  • Installez usbmuxd. C'est le petit bout de software qui permettra de faire un pont entre votre machine et l'iPhone. Au passage, vous pouvez installer aussi iFuse. C'est pas nécessaire pour faire du tethering mais ça va avec et ça permet de mounter le filesystem de l'iPhone et à terme (c'est encore en développement tout ça) d'organiser la bibliothèque de musiques de l'iPhone directement à partir d'un Linux sans passer par iTunes. Et d'ailleurs ça marche même sans jailbreaker! Avec Karmic et iFuse, quand je branche mon iPhone, il est automatiquement mounté et un accès direct aux fichiers apparait sur le bureau avec l'icône et le nom de l'iPhone. C'est bien, c'est beau, c'est GVFS. Mais fermons la paranthèse, c'est pas le sujet du billet. Vous avez donc installé au moins usbmuxd, hein? :)
  • Le paquet usbmuxd inclue un petit utilitaire bien pratique qui s'appelle iproxy et qui permet de créer un tunnel entre un port de votre machine et un port de l'iPhone. Le SSH passe par le port 22, et c'est donc sur ce port que OpenSSH que vous avez installé sur votre iPhone attend des connections depuis tout à l'heure. Il faut donc créer un tunnel entre un port local au hasard (j'ai choisi le 2222 perso mais prenez ce que vous voulez) et le port SSH de l'iPhone. Pour ce faire, ouvrez un terminal et tapez:
iproxy 2222 22 &
  • Maintant qu'on a notre tunnel, il nous faut aussi un proxy SOCKS en local qui servira de proxy à Firefox (et autres...) pour se connecter à internet. SSH c'est bien, c'est beau et ça permet de le faire. Et en plus c'est installé par défaut sur toute distro qui se respecte! Donc dans le même terminal (vous devriez avoir des messages de iproxy qui s'affichent, c'est plutot bon signe ça prouve que ça marche mais si ça vous dérange vous pouvez aussi utiliser un second terminal) on tape la commande:
ssh -D 1080 -p 2222 root@localhost

Cette commande va vous connecter au travers du tunnel d'iproxy directement au port 22 de l'iPhone sur lequel OpenSSH tourne tout en créant un proxy SOCKS sur le port 1080. Là encore vous pouvez utiliser autre chose que 1080 mais comme c'est le port par défaut d'un proxy SOCKS c'est aussi bien comme ça.

  • Attendez un petit moment (30 bonnes secondes) que l'iPhone percute et génère une clé et tout le tremblement. Puis on va vous demander si vous êtes bien sur de vouloir vous connecter à ce serveur. Tant qu'à avoir fait tout ça, on va dire oui, hein! Ensuite on vous demande le mot de pass root de l'iPhone, par défaut c'est "alpine". Si tout se passe bien, vous tombez en face d'une invite de commande. Youpi c'est bientôt terminé!
  • Etape facultative mais bon, tant qu'à faire c'est aussi bien: changer le mot de passe root par défaut. Tapez simplement passwd à l'invite de commande et entrez un autre mot de passe. Ca évitera que la prochaine fois que vous connectez votre iPhone à un réseau WiFi, un petit rigolo se connecte dessus et efface tout.
  • Dernière étape, configurer Firefox pour qu'il accéde à internet au travers du proxy SOCKS créé à l'étape 4. Allez dans les options avancées puis dans les paramètres de connections et là cochez Configuration manuelle du proxy et entrez les informations suivantes:
Hôte SOCKS: localhost
Port: 1080
Pas de proxy pour: localhost, 127.0.0.1

Cochez SOCKS v5 et laissez bien tout les autres champs vides. Ensuite dans le menu about:config de Firefox (tapez ça comme une adresse de page Web), il faut mettre l'option network.proxy.socks_remote_dns à true en cliquant dessus pour que les requêtes DNS passent par le proxy.

Et voilà, bon surf! Normalement vous avez internet au travers de l'iPhone, et sans avoir rien payé ni installé d'usine à gaz style PDANet!


ATTENTION! Selon les opérateurs pour ne pas être facturé en hors forfait vous pouvez avoir besoin de masquer votre user-agent!
  • Pour arrêter le tethering, il suffit de taper exit dans la session SSH puis killall iproxy.
  • Pour redémarrer le tethering, retapez les deux commandes ci-dessus puis entrez votre nouveau mot de passe root.

Firefox est bien fait, si une connection directe est disponible il devrait ignorer les paramêtres de proxy et vous n'aurez donc pas besoin de retourner bidouiller dans les options. Au pire, il existe des addons du genre FoxyProxy pour gérer ça en un clic.

Enfin en conclusion, il est aussi possible d'utiliser la connection tetherée pour des applications en ligne de commande grâce à proxychains. Installez le paquet, configurez /etc/proxychains.conf pour lui faire utiliser le proxy SOCKS et ensuite les commandes de ce style devraient marcher:

sudo proxychains apt-get update

Hello, world!