2015年4月14日 星期二

樹莓派 Raspberry Pi 使用iPhone連線上網 & 橋接至IP分享器當作緊急備用WAN使用

先來說明為啥筆者會想把手機的4G網路橋接到AP上的WAN吧

動機

  1. 筆者租屋處的網路gg.........QAQ

  2. 筆者的網路設備(NAS Pi、AirPlay Pi、...之類的)沒辦法用無線網路去連手機的熱點.......(至於為啥設備名字後面都有個Pi呢.... 就是沒錢只好自己DIY..........)

  3. 手機的熱點有連線數上限,印象中連5個裝置就極限了

租屋處原始架構圖:
所有網路設備透過AP連上modem

目標架構圖:
刪除右邊的modem

改由Pi橋接AP和手機以3G/LTE連接上網



關鍵字說明:

  Tethering: 意指通過智慧型手機或平板電腦等行動裝置,將它的上網功能分享給其他裝置使用的功能。(節錄自wikipedia: Tethering),在iPhone統一使用個人熱點控制

  AP: Access Point 也就是一般家用的Wi-Fi無線基地台

建立Pi與iPhone個人熱點連線:

  1. 安裝套件讓Pi可以使用USB連結iPhone的個人熱點

#以下步驟全部要使用root權限, 直接切換權限為root pi@ShiunPi ~ $ sudo su - #安裝以下的套件讓Pi可以使用iPhone的Tethering(網路共享功能) root@ShiunPi ~ # apt-get install ipheth-utils root@ShiunPi ~ # apt-get install libimobiledevice-utils root@ShiunPi ~ # aptitude install ifuse #ifuse是使用掛載的方式讓iPhone的Tethering能正常工作 #因此先建立等會兒要用來連線的掛載點 root@ShiunPi ~ # mkdir /media/iphone

  2. 連接iPhone到Pi上並開啟iPhone的個人熱點確定Pi有偵測到iPhone,iPhone若顯示是否信任此裝置請點選信任(參考網站說不用點選信任但筆者這邊選不信任會一直出現錯誤)
#使用ifconfig -s檢查是否出現新的網路介面(通常是eth1) root@ShiunPi ~ # ifconfig -s

  3. 編輯/etc/network/interface讓NetworkManager會自動由eth1取得IP
root@ShiunPi ~ # vi /etc/network/interface #加入以下設定 allow-hotplug eth1 iface eth1 inet dhcp


  4. 重開機

  5. 使用ifuse指令建立Pi與個人熱點的連線
#以下步驟全部要使用root權限, 直接切換權限為root pi@ShiunPi ~ $ sudo su - #使用ifuse掛載/media/iPhone目錄 root@ShiunPi ~ # ifuse /media/iPhone 
  6. 編輯自動建立連線的script iphoneconnect方便下次iPhone接上Pi後自動建立連線
root@ShiunPi ~ # vi /lib/udev/iphoneconnect #!/bin/bash #避免上一次ifuse掛載後沒有解除掛載,掛載錢先嘗試umount umount /media/iPhone ifuse /media/iPhone ipheth_pair
#編輯結束後記得將script權限設定為755 root@ShiunPi ~ # chmod 755 /lib/udev/iphoneconnect

  7. 設定udev偵測到iPhone個人熱點插上Pi時自動執行上一步的script
root@ShiunPi ~ # vi /lib/udev/rules.d/90-iphone-tether.rules #修改原本的第五行的 "RUN+=" 為以下內容 ACTION=="add", SUBSYSTEM=="net", ENV{ID_USB_DRIVER}=="ipheth", SYMLINK+="iphone", RUN+="iphoneconnect"  

  8. 重開機驗證是否可正常執行,到這一步就已經完成iPhone與Pi的連線了



橋接Pi的eth0和iPhone的eth1

  1. 安裝橋接用套件
#安裝bridge-utils即可 root@ShiunPi ~ # apt-get install bridge-utils
  2. 設定eth0與eth1橋接在一起
#編輯/etc/network/interface檔案 root@ShiunPi ~ # vi /etc/network/interface 記得一定要註解掉這兩行,否則會發生同一個IP會出現在兩個interface的奇怪問題 #allow-hotplug eth1 #iface eth1 inet dhcp auto br0 iface br0 inet dhcp bridge_ports eth0 eth1   

  3. 重開機並將筆電 or PC接到Pi的網路孔上(eth0)

  到此步驟後橋接就完成了,此時即可從筆電直接透過iPhone連上internet,接著就直接從筆電上ping外網看看吧


橋接iPhone與AP


接著直接將Pi的網路孔(eth0)接上AP,iPhone開啟個人熱點並接上Pi的USB孔即完成所有工作,現在就不用再害怕租屋處網路又gg了!!!


參考資料


1. Raspberry Pi How To: Tether to iPhone 5 (之前更新網誌的時候不小心弄掉參考資料惹QQ)

5 則留言:

  1. 想請教一下,
    你的 iPhone 的型號及 iOS 版本 ???
    因為我前一陣子在實作的時候,是用 iPhone 5 + iOS 7.12 + JB,
    結果遇到了無限信任的問題,爬遍了很多文,一直無解,後來就放著了....XDDD

    回覆刪除
  2. 我已經解決了,不好意思打擾你了!
    也歡迎到我的部落格參考看看我的實作步驟...^_^

    http://blog.itist.tw/2015/05/Tether-the-raspberry-pi-with-your-iPhone-via-USB-cable.html

    回覆刪除
    回覆
    1. Heracles您好,
      抱歉現在才回答, 我用的是iPhone5 + iOS 8.3無JB

      iPhone的"信任"這問題真的沒遇到過沒辦法給您個好回覆Orz......., 不過在我這邊需要點選信任的只有架設系統的過程而已
      整個架設動作完畢並改成開機啟動後就算不點選信任似乎也沒問題喔(就如同參考網站說的一樣)

      刪除
  3. ㄘㄊ大大
    用android也是類似的步驟嗎?!

    回覆刪除
    回覆
    1. Android有借強者我學長的ASUS padfoneS試過, 步驟如下
      1. 將Android裝置接上Pi
      2. 在Android的設定中找到tethering並啟動
      3. Pi的內建驅動應該會抓到新的網路介面, 接著在ifconfig下可以看到usb0介面出現
      4. 然後把上面網誌中的 "橋接Pi的eth0和iPhone的eth1" 如法炮製就行了

      刪除