2010/10/10: Update: It appaears that the current version of curl on Cydia does not support HTTPS so the dns.sh script was changed to use wget.
I use EasyDNS to provide name resolution for my domain names. They provide a web based dynamic DNS updates service that allows people with dynamic IP address to update their records to point back to their machines.
I wanted to do this for my (jailbroken) iphone, so I documented my procedure below.
1 – Jailbreak your iPhone
There are plenty of guides on the web about this, and it’s too much to go into here. Try Google.
Once you are jailbroken, continue…
2 – Using Cydia, install the following packages
- SBSettings
- OpenSSH
- cURL (Now using wget, so no download needed)
- BigBossRecommended Tools
3 – Start SSH and get your IP address
Swipe the top of the screen to bring up the SBSettings menu.
Make sure that SSH is started. If you cannot see “SSH”, goto More -> Set Toggles and enable the SSH toggle button.
Read off the “Data IP Address:” (Should be of the form 1.2.3.4)
4 – Check SSH is working
Check you can connect to the phone over ssh (replace the IP with the one you found above):
computer# ssh root@1.2.3.4
The default root password is “alpine”. If you have the default password, change it now, before doing anything else:
iphone# passwd rootChanging password for root.New password: <type password>Retype new password: <type password again>
iphone# passwd mobileChanging password for mobile.New password: <type another password>Retype new password: <type another password again>
Now log out of the phone:
iphone# logout
5 – Create the following two files on your computer:
Use your favorite text editor and create the following files (changing the red text to match your account):
dns.sh
#!/bin/shLAST_IP=xxxwhile (true); doIP=`ifconfig pdp_ip0 | grep inet | cut -d " " -f 2`if [ "$IP" != "" ]; thenif [ "$IP" != "$LAST_IP" ]; thenRES=`wget -qO - --no-check-certificate --user=username --password=password "https://members.easydns.com/dyn/dyndns.php?hostname=iphone.example.com&myip=${IP}"`if [ "$RES" == "NOERROR" ]; thenLAST_IP=$IPfififisleep 60done
easydns.plist
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"><plist version="1.0"><dict><key>Label</key><string>easydns</string><key>OnDemand</key><false/><key>ProgramArguments</key><array><string>/bin/bash</string><string>/var/root/dns.sh</string></array><key>StandardErrorPath</key><string>/dev/null</string></dict></plist>
6 - Copy the files to the phone
computer# scp dns.sh root@1.2.3.4:/var/root/computer# scp easydns.plist root@1.2.3.4:/Library/LaunchDaemons/
7 – Setup permissions and Launchd item
computer# ssh root@1.2.3.4iphone# chmod +x dns.shiphone# sh -x ./dns.sh
If it runs with no error (it will keep running), you should see (among a lot of debug):
+ RES=NOERROR
Now press control-c to stop it.
Next, load the launch agent to keep the script running in the background (the script needs to stay running so it remembers your last IP and only updates DNS if it changes):
iphone# launchctl load /Library/LaunchDaemons/easydns.plist
This should complete with no output. You can finally check the script is running
iphone# ps -ef |grep dns0 1886 1 0 0:00.22 ?? 0:00.29 /bin/bash /var/root/dns.sh
8 – You’re done
Try connecting to your phone by name:
computer# ssh root@iphone.example.com
Filed under: Hacks, MacOS X Image may be NSFW.
Clik here to view.
Clik here to view.
