usbmux pour le net / USB sur l’iPhone

Lorsque mon iPhone est posé sur son socle, je n’ai pas envie de devoir laisser le wifi activé pour bénéficier de la connectivité quand j’en ai besoin, c’est à dire 5 minutes par jour, pendant que je me grille le cerveau les 23h55 restantes…

201102181841.jpg

À quoi bon sinon mettre l’iPhone sur son socle ??

Heureusement, un programme fort pratique est disponible : nommé usbmux, il permet de rediriger des ports de l’iphone lors d’une connection USB.

Mais servons nous-en pour faire plus : par exemple, pour avoir du SSH, du VNC et de l’AFP en ayant installé depuis Cydia openssh, veency et netatalk (vive l’iPhone libre !) :

$ python tcprelay.py -t 22:12222 5900:55900 548:55548

Forwarding local port 12222 to remote port 22

Forwarding local port 55900 to remote port 5900

Forwarding local port 55548 to remote port 548

Par contre pour se rappeler des ports locaux correspondants, c’est pas facile…

Ne pourrait-on pas faire plus simple que ssh -P 12222 localhost ou Pomme-K afp://localhost:55548 ?

Heureusement, les adresses IP ont plus d’une astuce dans leur sac. Tout le monde connait les classes A, B et C privées, pour configurer un réseau local.

Par contre, saviez-vous que 127.0.0.0/8 est aussi réservé, mais pour des tests sur la machine locale ? Utilisons donc des adresses 127 pour configurer des alias et réutiliser les mêmes ports, et pouvoir dire ssh iphone ou afp://iphone tout en ayant un serveur SSH ou AFP sur 127.0.0.1

Sous OSX, rajouter l’adresse d’alias de 127.0.0.1, par exemple:

# ifconfig lo0 alias 127.0.0.3 up

On peut bien sur en mettre plus !

ifconfig lo0 alias 127.1.1.2

ifconfig lo0 alias 127.1.1.3

ifconfig lo0 alias 127.1.1.4

ifconfig lo0 alias 127.1.2.48

ifconfig lo0 alias 127.1.3.5

ifconfig lo0 alias 127.1.3.6

Dans tcprelay, remplacer HOST=”localhost” par HOST = “iphone”

Déclarer «127.0.0.3 iphone iphone.localdomain » dans /etc/hosts ou dans bind si vous utilisez OSX-Server

Ensuite, sous root (vu que des ports privilégiés sont utilisés) lancer :

# python tcprelay.py -t 22:22 5900:5900 548:548

Attention – netatalk est très pratique pour accéder en AFP à tout le contenu de son iphone, automatiquement et depuis le Finder, mais il peut poser un problème de sécurité, surtout si vous continuez à utiliser le mot de passe par défaut et des réseaux Wifi publics.

Comme indiqué sur Creating a toggle for netatalk on the iPhone « Rob Garth – Mildly Useful Stuff, créez un toogle.

Bon, c’est pas mal, mais pourquoi ne pas rajouter un reverse-tethering tant qu’on y est ? Ainsi, l’iphone accèdera au net par la connection USB… moins cher et plus rapide que le 3G ou l’EDGE !

Pour commencer, configurez simplement un accès ssh sans mot de passe SSH comme indiqué sur iphone passwordless access – Community Ubuntu Documentation

Ensuite, sur votre machine lancez :

pppd debug logfile /tmp/iphone-ppp.log updetach noauth passive pty “/usr/bin/ssh -P iphone -o Batchmode=yes /usr/sbin/pppd nodetach notty noauth” ipparam vpn 192.168.9.1:192.168.9.3

L’iphone sera accessible sur 192.168.9.3, et positionnera comme route par défaut 192.168.9.1 – votre machine OSX où si vous faites du NAT, vous offrirez l’accès internet à votre iPhone en USB !

Pas mal pour une machine où on a juste mis un suivi de port par un script python, non ?

Par contre, mobile safari et les autres ne marche pas. Étrange !

D’autant plus que si l’on pingue ce bon vieux 4.2.2.4, il répond !!

Pour la résolution de domaine, l’iPhone est réputé être buggé : Solving the iPhone’s DNS Issues – Jay Freeman (saurik)

Surtout, le DNS se modifie différemment que sous d’autres Unix : inutile de modifier /etc/resolv.conf, qui est en fait autogénéré.

La bonne solution : utiliser ce script comme expliqué sur Configure DNS lookups from the terminal – Mac OS X Hints, et tout fonctionne alors très bien :

#!/bin/bash

if [ $# -lt 2 ] ; then

echo “Use: $0 <domain> <1.Nameserver> [2.Nameserver]”

echo “Example Use: $0 example.tld 1.2.3.4 1.2.3.5”

exit 1

fi

PSID=$( (scutil | grep PrimaryService | sed -e ‘s/.*PrimaryService : //’)<< EOF

open

get State:/Network/Global/IPv4

d.show

quit

EOF

)

scutil << EOF

open

d.init

d.add ServerAddresses * $2 $3

d.add DomainName $1

set State:/Network/Service/$PSID/DNS

quit

EOF

À conserver comme dns.sh

Ainsi, on a une connection complète en utilisant le script suivant:

#!/bin/sh

ifconfig lo0 alias iphone.localdomain up

python tcprelay.py -t 22:22 5900:5900 548:548

pppd debug logfile /tmp/iphone-ppp.log updetach noauth passive pty “/usr/bin/ssh -P iphone -o Batchmode=yes /usr/sbin/pppd nodetach notty noauth” ipparam vpn 192.168.9.1:192.168.9.3

ssh -P iphone -o Batchmode=yes ./dns.sh localdomain 192.168.9.1

201102181929.jpg

pastedGraphic.pdf

Ouf, ce fut long ! Gagnez un peu de temps en vous procurant les scripts sur la page Téléchargements, mais n’oubliez pas d’adapter les IP à votre réseau local qui utilise peut être déjà certaines plages en 192.168, et surtout à rajouter iphone et iphone.localdomain dans /etc/hosts ou bind !

Advertisements

About guylhem

guylhem.com
This entry was posted in Uncategorized and tagged , , . Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s