Seit iPhone OS 3.0 gibt es die Möglichkeit des “Tetherings”, auf gut deutsch: die Nutzung des iPhones als UMTS-Modem. Wie das nun genau funktioniert, und ob es überhaupt mit Linux funktioniert kann ich leider nicht testen, da ich noch das iPhone Classic besitze, welches aus marketing “technischen” Gründen diese Funktion nicht besitzt.
Wie dem auch sei, es muss eine Lösung her! Bislang bin ich über ein altes Nokia 6300 unterwegs ins Internet gegangen, MultiSim sei dank. Aber richtig prickelnd ist das nicht. Besser wäre es, das iPhone dafür zu benutzen. Ausserdem sollte es nicht WLAN-basierend sein, sondern über das USB-Kabel funktionieren, damit sich das iPhone vom Laptop mit Strom versorgen kann und nicht in 2 Stunden leer gesaugt ist.
Zum Glück ist das Internet groß und voller Informationen, so dass man das Rad nicht neu erfinden muss. Daher geht der ganze Dank für diesen Artikel auch an snap_b, der hier den Großteil der Anleitung auf English veröffentlicht hat.
Ziel ist es, eine PPP-Verbindung über SSH aufzubauen.
Ich werde nun im Folgenden den Artikel übersetzen und mit einem kleinem Script am Ende versehen, damit das Ganze etwas komfortabler wird.
Alle Befehle müssen als Root ausgeführt werden!
Schritt 1: iTunnel
iTunnel ermöglicht es, eine SSH-Verbindung aufs iPhone über das USB-Kabel herzustellen. Man läd es hier runter und entpackt es nach /opt/itunnel
Eine Installation ist nicht notwendig.
Nun wird iTunnel kurz getestet (als Root!):
Es sollte folgendes zu sehen sein:
get_iPhone() success
- successfully got device
server waiting for ssh connection
Auf einer zweiten Konsole stellt man nun eine SSH-Verbindung her:
Wie man sieht, stellt iTunnel eine SSH-Verbindung auf localhost mit Port 3023 bereit. Nun sollte man in der Konsole des iPhones sein.
Schritt 2: Passwortloser Zugriff
Damit man nicht jedesmal sein Passwort eingeben muss, werden nun SSH-Keys ausgetauscht. Dazu wird zuerst ein Key auf dem Host erstellt:
dabei können alle Abfragen einfach mit Enter bestätigt werden!
als nächstes muss auf dem iPhone etwas getan werden:
ssh -p 3023 localhost
mkdir /var/root/.ssh
normalerweise würde jetzt einfach der SSH-Key mit scp kopiert werden, da es leider mit der Firmware 3.0 des iPhones und der aktuellen iTunnel Version ein Problem gibt, ist es nicht Möglich etwas vom Host auf das iPhone per scp zu kopieren. Deswegen habe ich den “Umweg” über iFuse genommen. Wie das geht steht hier.
Hat man das iPhone über iFuse eingebunden, zum Beispiel unter /media/iPhone dann kann man nun die Keys kopieren.
cp /var/root/.ssh/id_rsa.pub /media/iPhone/private/var/root/.ssh/
Nun wieder zurück zum iTunnel und ab aufs iPhone. Dort dann folgendes Copy&Pasten:
mv /var/root/.ssh/id_rsa.pub /var/root/.ssh/authorized_keys2
chmod 755 /var/root
chmod 700 /var/root/.ssh
chmod 644 /var/root/.ssh/authorized_keys2
exit
Nun sollte man sich mit:
auf sein iPhone einloggen können, ohne das ein Passwort verlangt wird.
Schritt 3: slirp und terminal
Auf iPhone Seite braucht man zum einen das Programm slirp welches eine PPP-Verbindung über eine SSH-Verbindung erstellen kann und zum anderen das Programm Terminal, damit man slirp auch starten kann
Beide sind über Cydia erhältlich.
Schritt 4: Das PPP-Script
Das Script für die PPP-Verbindung erstellen:
touch /usr/local/bin/itether
und folgendes reinschreiben:
#!/bin/sh
IP="10.0.2.15:10.0.2.2"
NETMASK="255.255.255.0"
BAUD="115200"
DEBUG="debug logfile /tmp/ppp.log"
COMPRESS=""
PTY="env SSH_AUTH_SOCK=/tmp/501/SSHKeychain.socket ssh -t root@localhost -p 3023 /usr/bin/slirp -P -b $BAUD"
pppd $IP netmask $NETMASK $BAUD local noauth defaultroute $DEBUG usepeerdns pty "$PTY"
Schritt 4: Die Start und Stop-Scripte:
Das Script für den Verbindungsaufbau erstellen:
touch /usr/local/bin/istart
und folgendes reinschreiben:
#!/bin/bash
/opt/itunnel/itunnel&
sleep 2
itether&
sleep 4
echo "nameserver 208.67.222.222" > /etc/resolv.conf
while [ TRUE ]
do
sleep 5
done
Das Script für den Verbindungsabbau:
touch /usr/local/bin/istop
und folgendes reinschreiben:
#!/bin/bash
killall pppd && killall itunnel
Schritt 5: Die Verbindung herstellen
Zuerst wird auf dem iPhone slirp gestartet. Dazu einfach die Terminal App öffnen, slirp eingeben, enter drücken und Terminal App wieder schließen. Slirp bleibt solange gestartet, bis es beendet wird, oder das iPhone neustartet.
Wie sich herausgestellt hat, ist es nicht nötig auf dem iPhone zuerst slirp zu starten! Allerdings gibt es das Problem, dass das istart Script erst beim zweiten mal funktioniert, wenn das iPhone oder der PC nach der letzten Verbindung neugestartet wurden… Jemand eine Idee warum?
Nun braucht nur noch das Script istart als Root aufgerufen werden und nach ca 10 Sekunden sollte man über das iPhone online sein!