電腦透過 USB 連接線使用手機的網路上網稱 USB Tethering,而反過來手機透過 USB 連接線使用 PC 的網路上網,稱作 Reverse USB Tethering。前幾天在論壇上面看到有人提出 ZenFone 能否使用 Reverse USB Tethering 的問題,覺得頗有意思,研究了一個晚上總算整理出一套流程,我所使用的手機是 ZenFone 5,版本為 Android 4.3。

  • 如果用的是 Mac,請先安裝 RNDIS Driver: HoRNDIS
  • 手機先 root。
  • 如果想讓瀏覽器以外的 app 使用網路,大部分狀況透過安裝 Xposed & HackConnectivityService 即可解決。

步驟:

  • 手機連接到電腦上,到設定 -> 更多內容 -> 網路共用與 Wi-Fi 無限基地台 -> 點選 USB 網路共用。
  • 如果你用的是 Mac,打開 System Preferences -> Network,應該可以看到 Android 這個連線裝置出現,或者點左下角的 + 新增。

預設是 DHCP 取得 IP 位址,請耐心等候他出現 192.168.42.x 的值,再切換到 System Preferences -> Sharing,點選 Internet sharing。右邊的畫面中 Share your connection from: 請選你目前的網路連線裝置,比如 Thunderbolt Ethernet 或者 Wi-Fi;To computers using: 勾選 Android (就是剛剛看到的裝置)。

  • 如果你用的是 Windows 7,先等系統安裝好相關的驅動程式。

接著到控制台 -> 網路和網際網路 -> 網路連線,可以看到會多出一個區域連線 (在這邊是 "區域連線 2")。

在你預設的網路連線介面上按右鍵選共用 (在這邊是 "區域連線"),點選最上面的 "允許其他網路使用者透過這台電腦的網際網路連線來連線(N)",下面的 "家用網路連線" 請選擇前面多出來的區域連線 (在這邊是 "區域連線 2")

  • 此時電腦打開 Terminal 或者命令提示列,透過 adb shell 連接手機,su 為 root。
  • 依序執行下面的代碼:(或者抓 reverse_usb_tether.sh)
    netcfg rndis0 dhcp
    
    讓手機取得新的 IP 位址可以連線出去。
    ndc resolver flushif rndis0
    ndc resolver flushdefaultif
    ndc resolver setifdns rndis0 8.8.8.8 8.8.4.4
    ndc resolver setdefaultif rndis0
    
    設定 DNS,不過似乎大部分的 app 都還是無法連線,得靠下面這行
    iptables -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 8.8.8.8:53
    
    其中 8.8.8.8 可以換成你喜歡的 dns server (比如 168.95.1.1)

到這網路已經可以正常使用,不過某些 app 卻無法正常運行,比如 Play Store 無法下載 app/Google Drive 無法開啟文件.. 原因是這些 app 都會檢查是否有 Wi-Fi 或者數據網路的連線。嘗試過很多偏方,到目前為止都沒有 " 完美 " 的解決方案 (Android 4.3 以上的版本多了一些檢查),安裝 Hack Connectivity Service (得先安裝 Xposed 並啟用) 是一種解法,只是你在使用前得先有可連線的 Wi-Fi,關閉後再跑一次前面的流程,最後打開該 app 選擇 Hack 分類下的 Wifi 即可。

Reference: [Tool][Windows Only][Root] Android Reverse Tethering 3.19

Comments

comments powered by Disqus