Raspberry Pi 的應用 - 透過 iPhone 的傳輸線,分享 3G/4G 行動網路

by 5月 09, 2015 8 意見                

相信各位一定也遇過這種事吧,家裡的 ADSL 或光纖網路突然不通,只剩 iPhone 可以用 3G / 4G 上網 !!!

那是不是可以讓 Raspberry Pi 透過 iPhone 來上網 ?! 而且順便將 3G/4G 的訊號分享出來,轉成有線或無線的網路介面,讓其他設備也可以上網 !!!

簡介


因為 Apple 官方只有提供 Windows 及 OS X 的 iTunes 程式,卻不支援 Linux,所以強大的網友們只好自立自強,用逆向工程法解析出通訊協定,搞出了 libimobiledevice 這套非官方的函數庫及工具集。


它支援了 iPhone、iPad、iPod Touch 及 Apple TV 等設備,至 2015/05/08 為止,最新的版本是 1.2.0,支援的 iOS 版本是 8.2,支援的作業系統有 Windows、OS X 及 Linux。

這些是它所支援的所有功能,綠色代表已完全,黃色代表部份完成,我們這次要用的功能就是其中的「USB Internet Tethering」。


事前準備

  • Raspberry Pi Model B / B+,Model A / A+ 請自行加上 USB 網路卡。
  • Raspbian 作業系統。
  • iPhone,不需要越獄 (JB / JailBreak),這次是用 iPhone 4S + iOS 8.2。
  • 3G / 4G 門號必須已申辦行動上網。
  • 30 Pin 或 Lightning 的 USB 傳輸線,最好是原廠或是通過 MFI 認證的線,因為在 iOS 7 之後,Apple 已經在系統裡加入了驗證的程式。
  • 這次實作還沒有辦法同時分享給有線及無線介面,只能選擇其中一種。

安裝套件


先從 Raspbian 套件庫安裝需要的套件。
sudo apt-get -y install ipheth-utils libimobiledevice-utils ifuse

不過,為了讓相容性的問題減到最低,我們要將這些套件全部更新到最新的版本,並做一些相關的設定。

由於步驟不少,所以我們直接把它們寫成 script 來執行。
vi ~/update.sh

貼上這些指令。

##### 我是分隔線 #####
#!/bin/bash

sudo apt-get -y install git build-essential libxml2-dev python2.7 python2.7-dev fuse libtool autoconf libusb-1.0-0-dev libfuse-dev

mkdir ~/libimobiledevice && cd ~/libimobiledevice

git clone https://github.com/libimobiledevice/libplist.git
git clone https://github.com/libimobiledevice/libusbmuxd.git
git clone https://github.com/libimobiledevice/usbmuxd.git
git clone https://github.com/libimobiledevice/libimobiledevice.git
git clone https://github.com/libimobiledevice/ifuse.git

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
echo "export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig" | sudo tee -a /etc/bash.bashrc

cd libplist && ./autogen.sh && make && sudo make install && cd ..
cd libusbmuxd && ./autogen.sh && make && sudo make install && cd ..
cd libimobiledevice && ./autogen.sh && make && sudo make install && cd ..
cd usbmuxd && sed -i 's/.\/configure/LDFLAGS\=-lrt .\/configure/g' autogen.sh && ./autogen.sh && make && sudo make install && cd ..
cd ifuse && ./autogen.sh && make && sudo make install && cd ..

groupadd -g 140 usbmux &> /dev/null
useradd -c 'usbmux user' -u 140 -g usbmux -d / -s /sbin/nologin usbmux &> /dev/null
passwd -l usbmux &> /dev/null

echo /usr/local/lib | sudo tee /etc/ld.so.conf.d/libimobiledevice-libs.conf
sudo ldconfig
sudo modprobe fuse
sudo adduser pi fuse

##### 我是分隔線 #####

設定可執行的權限。
chmod +x ~/update.sh

開始更新。
~/update.sh

更新的時間大約是 5 到 10 分鐘,視 CPU 及 SD 卡的速度而定,就請喝杯咖啡稍候一下。

更新完畢之後,修改一下網路介面的設定。
sudo vi /etc/network/interfaces

在最下方加入這些指令。
allow-hotplug eth1
iface eth1 inet dhcp


Raspbain 2015-05-05 版之後,改用 dhcpcd 服務來處理 DHCP Client 的工作,請將「iface eth1 inet dhcp」改成「iface eth1 inet manual」,否則會導致 eth0 拿不到 IP。

建立給 iPhone 掛載用的目錄。
sudo mkdir /media/iPhone


新增給 udev 用的 iPhone 連線腳本。
sudo vi /lib/udev/iphoneconnect

輸入這些指令。
#!/bin/bash
umount /media/iPhone
ifuse /media/iPhone
ipheth_pair


加入執行權限。
sudo chmod +x /lib/udev/iphoneconnect
修改 iPhone Tether 規則的內容,把「ipheth-pair」改成「iphoneconnect」。
sudo sed -i 's/ipheth-pair/iphoneconnect/g'  /lib/udev/rules.d/90-iphone-tether.rules

啟動 iPhone 的個人熱點


打開 iPhone 的「設定」。

點選「行動網路」。

確認「行動數據」已經被開啟。

回上一層選單,再點選「個人熱點」,如果沒有開啟「行動數據」的話,會是反灰的狀態,無法點選。

「個人熱點」支援了三種連結方式。
  1. Wi-Fi
  2. Bluetooth
  3. USB

啟動「個人熱點」。

插上 iPhone 的傳輸線,接到 Raspberry Pi 的 USB 埠上面。

出現「信任這部電腦」的對話框時 ,點選「信任」,這個選項在 iOS 7.0 之後的版本才有,每次接上 Raspberry Pi 的時候都會出現。

當 iPhone 與 Raspberry Pi 成功連線後,狀態列變成藍色,並顯示「個人熱點:1 個連線」。

而在 Raspberry Pi 會多出一個 eth1 網路介面。
ifconfig -s

這樣子,Raspberry Pi 本機就可以用 iPhone 的行動網路上網了。


無線網路分享


只有 Raspberry Pi 本機可以上網,實在沒什麼實用性,所以讓我們用 Wi-Fi 來分享吧。


或許有些朋友會問:「iPhone 自己就可以用 Wi-Fi 分享了,為什麼還要經過 Raspberry Pi ?」

原因很簡單:
  1. iPhone 用 Wi-Fi 分享個人熱點比用 USB 更耗電。
  2. iPhone 的 Wi-Fi 同時連線人數比 Raspberry Pi 還少。
  3. 可以串接 Raspberry Pi 上面的服務,如:Samba、TOR、Proxy ... 等,可以參閱 Raspberry Pi 的所有文章
  4. 可以讓連上 Raspberry Pi 的所有設備變成在同一個網段裡。

請參閱 Raspberry Pi 的應用 - Wi-Fi 無線基地台 的內容,依照路由模式的步驟實作,再讓設備用 Wi-Fi 連上 Raspberry Pi 即可。


有線網路分享


只要將橋接套件安裝完畢。
sudo apt-get -y install bridge-utils

修改一下網路介面的設定。
sudo vi /etc/network/interfaces

在最下方加入橋接的設定值,並且把先前加入的 eth1 設定值註解掉。
#allow-hotplug eth1
#iface eth1 inet dhcp


auto br0
iface br0 inet dhcp
bridge_ports eth0 eth1

再把 RJ-45 網路線連上 Raspberry Pi 和 PC / Mac 就可以了。


異常排除

  • 編譯 usbmuxd 時出現下列的錯誤訊息???

    /usr/bin/ld: usbmuxd-utils.o: undefined reference to symbol 'clock_gettime@@GLIBC_2.4'
    //lib/arm-linux-gnueabihf/librt.so.1: error adding symbols: DSO missing from command line
    collect2: ld returned 1 exit status
    Makefile:349: recipe for target 'usbmuxd' failed
    make[2]: *** [usbmuxd] Error 1
    make[2]: Leaving directory '/iphone_libs/usbmuxd/src'
    Makefile:353: recipe for target 'all-recursive' failed
    make[1]: *** [all-recursive] Error 1
    make[1]: Leaving directory '/iphone_libs/usbmuxd'
    Makefile:284: recipe for target 'all' failed
    make: *** [all] Error 2

    請參考 stackoverflow - Official V4L2 Driver for raspberry pi, how do I add lrt flags to a makefile? 的內容,將 autogen.sh 裡的「./configure」改成「LDFLAGS=-lrt ./configure」。
      
  • iPhone 上面重覆出現「信任這部電腦」的對話框???

    之前用 iPhone 5 + iOS 7.12 + JB,一直遇到這個問題;可是在改用 iPhone4S + iOS 8.2 卻是一次就成功,所以懷疑是 JB 的關係,期待其他的勇者也來實驗一下。

    也有其他網友反應是沒有相關套件升級到最新版,或是線材的問題。

系列文章


參考資料


參考資料

  • 2015/05/09 撰文。

Heracles Jam,江湖人稱「海公公」

IT 技術家 - 創站部落客

一個常用 Windows、慣用 macOS、愛用 Linux 的 3C 阿宅
現職 MIS / 業界講師 / 資訊顧問 / 部落客

8 則留言 :

  1. 如你所述,安裝完所有套件,將/etc/network/interfaces,加入
    auto br0
    iface br0 inet manual
    bridge_ports eth0 eth1
    iPhone插上後,Raspberry本身可上網,eth1不會自動加入br0,
    需在iphone plug in以後,要下brctl addif br0 eth1,eth0才能獲取IP聯網,請問須設定哪裡讓iphone插上時,eth1自動加入br0?(Raspberry Pi 3 Model B+ iphone 5S)

    回覆刪除
    回覆
    1. 好一陣子沒用到這個了,沒辦法實際驗證。
      不過當時實作的時候,似乎沒有這個問題,直接就會連起來,不知道是套件改版了還是iOS端有修改...
      或許你可以試試先開好 iPhone 的分享並插上 RPi,再打開 RPi 的電源呢?

      刪除
  2. 已解決.就是去設定udev的.rules設定檔,當USB插入iPhone時,自動去執行一個script,將eth1加入br0就可運作了了...(試過開好iphone分享再開RPi電源也無法解決)

    回覆刪除
    回覆
    1. 感謝你的回覆,原來醬子可以自動橋接了....^^

      刪除
  3. 感谢博主分享,我急需这个方法,明天我也来试试

    回覆刪除
  4. 你好,

    我試了幾次按照您的方式設定,但是在script執行後卻出現
    adduser : The group ‘fuse’ does not exist.

    並且iphone插上去之後不是信任電腦的選項,而是 要允許此裝置取用照片及影片嗎?

    請問版主有遇過嗎?

    謝謝

    回覆刪除
  5. Here at Live Casinos, we categorize, price, and evaluate one of the best casino sites with a sharp consideration to} live casino presents. You can get pleasure from your favorite on-line casino games wherever you are be} at Mr Green. Using the newest expertise, you can to|you probably can} play on any of your mobile gadgets or desktop and nonetheless get pleasure from all the benefits and enjoyable, properly as|in addition to} being completely safe. All you want is an internet connection, and you are be} good to go. We all have our 온라인카지노 favorite TV game show, the place we watch with trepidation as contestants play for large money prizes. And it’s now attainable to expertise the thrill of this for yourself, with several of} gameshow-styled live casino titles.

    回覆刪除