[Root] Connect phone to internet via USB
Published by shakalaca on June 10th, 2014
電腦透過 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 即可解決。
步驟:
1. 手機連接到電腦上,到設定 -> 更多內容 -> 網路共用與 Wi-Fi 無限基地台 -> 點選 USB 網路共用。
2. 如果你用的是 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 (就是剛剛看到的裝置)。
2. 如果你用的是 Windows 7,先等系統安裝好相關的驅動程式。
接著到控制台 -> 網路和網際網路 -> 網路連線,可以看到會多出一個區域連線 (在這邊是 "區域連線 2")。
在你預設的網路連線介面上按右鍵選共用 (在這邊是 "區域連線"),點選最上面的 "允許其他網路使用者透過這台電腦的網際網路連線來連線(N)",下面的 "家用網路連線" 請選擇前面多出來的區域連線 (在這邊是 "區域連線 2")
3. 此時電腦打開 Terminal 或者命令提示列,透過 adb shell 連接手機,su 為 root。
4. 依序執行下面的代碼:(或者抓 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