用SSH tunnel,通過iphone的EDGE讓PC上網

 修改掉OpenSSH對DNS CNAME的解析Bug了,現在很爽了!
修改後的sshd放在附件裏頭

注意: 用iphone的EDGE上網前,請仔細斟酌EDGE帶來的費用!
[ 聲明 ] 您閱讀此文章,及按此文章進行任何操作所帶來的任何結果,與本人無關,繼續閱讀說明您已明確瞭解
並同意此項聲明。


iphone的EDGE速度尚可,有些時候,我們可能需要通過iphone的EDGE,將我們的筆記本接入Internet

已知的辦法有3個
1) SSH Tunneling
2) Tiny Proxy
3) Srelay( Socket Server)

其中,TinyProxy僅能提供HTTP/HTTPS代理服務,有些應用程序你是無法使用此代理的,而且其表現有時顯得相當詭異
Srelay尚可一用,就是相當於在iPhone上開了一個SOCK5的代理,不過個人不太喜歡Srelay
使用SSH Tunneling,如果你的iphone已經安裝了OpenSSH,則不需要在iPhone上安裝額外的軟件,而且,OpenSSH
的開關就是代理的開關,你用Services也好,iToggle也好,不用再去考慮開關代理。OpenSSH的穩定性也是經過
Unix界多年的運行認可的。
當然你從installer或者其他什麼地方搞到的OpenSSH,都是含有一個DNS CNAME解析BUG的,我們稍後說明並解決
這個問題

使用SSH Tunneling:
適用條件,已安裝SSH的iphone
適用人羣,對技術有一定了解的用戶,不太適合普通用戶
已知問題,如果目標地址的DNS屬於CNAME別名,則必須首先在iPhone上訪問此地址,或者在PC上先訪問
該地址的實際域名。(該問題已經解決)

原理
PC軟件 <=> PC SSH本地代理,相當於Sock5服務器 <=> WIFI <=> Iphone SSH服務 <=> EDGE <=> internet

防止鎖屏網絡中斷
運行之前,爲了防止iphone關屏幕的時候自動關閉網絡連接,你可以用兩種方式來做
A. iphone不在充電/外接電源狀態,請關閉屏幕自動鎖定
B. 如果iphone在充電/外接電源狀態,那麼,如果你接通了SSH Tunneling,基本上iphone的網絡連接不會
   因爲屏幕鎖定而中斷
   前提條件是:
   B.1. 沒有安裝SummerBoard
   B.2. 已經安裝了SummerBoard,也安裝了JohnTool
如果還是出現Wifi中斷,請在SSH Tunneling的同時,保持一個SSH Shell登錄到iphone
btw, 痛恨SummerBoard,早就手工刪掉它了,哈哈

安裝使用方法:
1. PC端需要有個能進行SSH Tunneling的軟件,可以選擇 Putty, 或者命令行版本的 plink,我用的是
    plink,http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

2. 在PC設置一個Ad hoc的無線網絡,即計算機到計算機的無線網絡
    強烈建議設置固定的IP,否則你需要配置PC爲DHCP服務器

3. 在iphone上打開無線,與PC建立無線連接,設置iphone的無線IP,不要設置網關
    如果發現EDGE圖標變成了WIFI圖標,那麼說明操作失敗,iphone錯誤的認爲該無線連接可以用於
    Internet,如果出現此問題,請從iphone上斷開連接,重複連接一次,此時,iphone顯示E不顯示wifi
    圖標但是依然可以連接wifi

4. 現在我們建立了PC<->iphone的無線連接,確認可以在PC上ping通iphone

5. 打開iphone的SSH服務

6. 更換/usr/sbin/sshd爲沒有CNAME BUG的版本,見附件

   首先複製備份 /usr/sbin/sshd 爲 /usr/sbin/sshd.old,這樣即使有問題我們還可以在iphone上命令行修復
   把新的 sshd 上傳到 /usr/sbin/,修改其屬性爲755

6. 在PC上運行plink,命令行爲
    plink -N -D 9999 root@youriphoneIP
    其中 -N 表示不要打開一個SSH Shell,-D表示打開PC本機9999端口,youriphoneIP是你的iphone的IP

7. 現在可以設置firefox瀏覽器走 SOCK5 代理,代理地址 127.0.0.1,端口9999
    如果其他程序需要上網,一樣要設置SOCK5代理,不支持使用SOCK5代理的程序可以使用SocksCap軟件


這種方式我用了好幾天了,原有的OpenSSH DNS CNAME問題比較討厭,今天重新編譯了一個沒有這個問題的OpenSSH
現在很爽了,20元全包不限流量的動感地帶就是好,哈哈
注意: 用iphone的EDGE上網前,請仔細斟酌EDGE帶來的費用!

附:自行編譯OpenSSH的一點Tips,非專業人員請直接無視
我用的是Cygwin的arm-apple-darwin ToolChain,
./configure --host=arm-apple-darwin CC=/usr/local/bin/arm-apple-darwin-gcc --prefix=/usr --sysconfdir=/etc
修改 channels.c 的 connect_to() 函數,並且把 openbds-compact 下面的 fake-rfc2553.c 裏頭的freeaddrinfo()
malloc_ai() getaddrinfo() 函數扔到這個connect_to()函數前,修改他們的名字爲myXXX並去掉#ifndef
然後再 connect_to() 裏頭引用 myXXXXX
最後編譯完成後,運行這個
/usr/local/bin/arm-apple-darwin-gcc -o sshd sshd.o auth-rhosts.o auth-passwd.o auth-rsa.o /
auth-rh-rsa.o sshpty.o sshlogin.o servconf.o serverloop.o auth.o auth1.o auth2.o auth-options.o /
session.o auth-chall.o auth2-chall.o groupaccess.o auth-skey.o auth-bsdauth.o auth2-hostbased.o /
auth2-kbdint.o auth2-none.o auth2-passwd.o auth2-pubkey.o monitor_mm.o monitor.o monitor_wrap.o /
kexdhs.o kexgexs.o auth-krb5.o auth2-gss.o gss-serv.o gss-serv-krb5.o loginrec.o auth-pam.o /
auth-shadow.o auth-sia.o md5crypt.o audit.o audit-bsm.o platform.o /
-L. -Lopenbsd-compat/ -lresolv -lssh -lopenbsd-compat  -lcrypto -lz
用libresolv.a裏頭沒有問題的gethostbyname()強行鏈接進去
這個沒有問題的libresolv.a可以從http://wickedpsyched.net/iphone/dns獲得
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章