台灣有高密度的行動網路,讓樹梅派和智能手機一樣透過插入SIM卡,透過電信業者(例如:遠傳電信)來達成行動上網,並在上面運行Python,樹梅派趴趴走玩出各式各樣的花火,透過上面的感測器回傳數據、控制GPIO,遠端遙控拍照和錄影,然後衍生各種邪惡專題,追蹤器、竊聽、遠端偷拍 (誤~ 請各位要用在正途阿!
事情沒這麼簡單,樹梅派和智能手機的應用場景不同,手機是使用者直接操作,樹梅派常用SSH間接操作,透過電信業者行動上網,使用者和樹梅派之間隔著網際網路,但樹梅派弄不到Public IP,就必須費一番操作搞個中繼站伺服器,透過 SSH Tunnel、VPN之類的其他方法,之後再寫其他文章。
首先,跟著設定將你的樹梅派(Raspberry Pi)透過4G LTE USB Dongle 行動上網吧!
準備
- 樹梅派(本篇用Raspberry Pi Zero) + Micro SD
- 4G LTE USB 行動網卡(本篇用D-Link DWM-222)
- 已開通的SIM卡
- USB2.0 Micro-B/公 轉 USB Type-A/
- Mini-HDMI to HDMI 轉接頭
- [選用] USB2.0 Hub
由於 Raspberry Pi Zero 只提供一個 USB2.0 Micro-B接口, 周邊裝置的轉接配件得考慮進去,我預計先用USB有線鍵盤設定樹梅派連上藍芽鍵盤,可以不使用USB2.0 Hub,之後4G LTE USB 行動網卡會占用唯一的USB接口(參考下圖)。
4G LTE USB 行動網卡是本篇的重點,又名4G LTE USB Dongle、USB ModeSwitch,如果你要google查資料先記下這些詞。
*在你購買行動網卡要注意Raspberry Pi 驅動支援,建議找有人已經嘗試過的,其他參考舊裝置列表。再來就是電信業者工作頻段,我推薦D-Link DWM-222、Huawei E3372 在台灣是全頻的。
*基礎設定先參考的Raspberry Pi 作業系統安裝和佈署環境設定安裝好OS、遠端連入Raspberry Pi:使用SSH及VNC—被控端設定打開SSH,然後接上USB行動網卡…
開工囉!
▼圖 Raspberry Pi Zero 組裝圖

一、檢查
插入4G LTE USB 行動網卡後等10秒,輸入以下指令:
lsusb
#顯示本機USB裝置列表
▼圖 輸出結果參考,出現 D-LinkCorp.字樣,代表行動網卡被正確識別

用下面命令查詢USB設備接口
dmesg | grep ttyUSB* #查看USB設備接口
▼圖 查詢USB設備接口結果,詭異的是我只接了一個4G LTE USB 行動網卡,跳了4個出來

改用ls 命令去查詢,結果一樣。
ls /dev/ttyUSB*
▼圖 用ls命令查詢也一樣

雖然有點奇怪,插一個USB裝置跳了4個出來,IT 技術家也碰到一樣的問題,我無法理解,不過不用擔心,不影響接下來的操作。
二、安裝
請使用下面命令安裝 電信撥接套件ppp和設定輔助工具pppconfig
sudo apt-get update sudo apt-get install ppp pppconfig #安裝電信撥接和設定輔助套件
▼圖 安裝套件的結果

三、4G LTE聯網設定
執行下面命令,pppconfig會帶我們一步步完成設定行動上網的相關參數,按圖施工。
sudo pppconfig #設定4G行動上網參數
▼圖 建一個新連線【Create a connection】

▼圖 連線名稱可以自訂,請儘量簡短

▼圖 選【Dynamic】 使用 ISP預設的DNS Server

▼圖 選【PAP】用 Peer Authentication Protocol 驗證協定

▼圖 通常不用改,OK下一步

▼圖 通常不用改,OK下一步

▼圖 通常不用改,維持預設值11520,OK下一步

▼圖 維持預設【Tone】

▼圖 輸入【*99#】設定撥接號碼,這組是台灣之星(已被台灣大哥大買走),讀者可以參考輸入,如果不通要請洽你的ISP業者

▼圖 問你要不要自動默認serial port,選【No】等等手動輸入

▼圖 輸入/dev/ttyUSB1

*注意:回到「第一章 檢查」,如果你發現插一個4G LTE USB Dongle,結果裝置出現不只一個,例如本篇就有 /dev/ttyUSB0~3,若你和我一樣使用D-Link DWM-222,用/dev/ttyUSB1應該沒錯,如果你使用其他不同廠牌的產品,設置可能不同,之後撥號網路不通,就得一個個變更做測試。
▼圖 設定完成選【Finshed】回到主選單

▼圖 設定完成了,它告訴你設定檔的目錄,按OK後請退出程式。

走到這一步已經完工了!
接下來,打開nano編輯器進行些許微調~
sudo nano /etc/ppp/peers/4G
在下方加入
persist
replacedefaultroute
▼圖 如下圖

persist:自動重新撥接
replacedefaultroute:替換預設路由
關閉wifi
如果接固網請將網線拔除,如果用wifi連線,請執行以下命令關閉wifi。
nmcli radio wifi off
#關閉wifi
*以下是建議關閉wifi的理由,避免節外生枝,請斟酌閱讀~
如果你之前設定樹梅派連wifi後,一但在該覆蓋區域它就會自動連上,同時連【行動寬頻】和【wifi】會產生額外的議題,會讓樹梅派解析網域名稱失敗而無法連上網站(輸入IP直連不影響)。
其原因是樹梅派的NetworkManager很靈活的改動DNS,當你連上行動寬頻後,ppp有設定usepeerdns(參閱上圖),會自動取的ISP提供的DNS Server;如果再連上wifi,NetworkManager就會刷寫 /etc/resolv.conf,就是把DNS改成wifi的Gateway,結果造成原本的 行動寬頻DNS變成 wifi的Gateway無法解析網域,這就是接入雙網路介面的困擾。
這問題可以解決的,手動改用Public DNS(例如:8.8.8.8),就是改/etc/resolv.conf,又得處理另一個問題「被NetworkManager改回來」,防止NetworkManager改回來又多一個議題了
未來我也想寫這議題,因為…當你拿樹梅派連行動寬頻上網再連VPN後DNS問題又出來了,早晚得面對╮(╯_╰)╭
行動寬頻聯網測試
使用 pon指令呼叫 pppd執行撥號
sudo pon 4G #[連線]pppd執行撥號連線
sudo poff -a #[斷線]切掉全部pppd
查看連線結果,用ifconfig查詢網路介面,連線成功會多一個ppp0
ifconfig -a #查詢網路介面
注意:這裡碰到一個問題,當一開機時首次使用pon指令連線,無法正常連網,ppp0不會出現,但也不會跳出任何錯誤;使用poff掛斷後二次pon連線就正常聯網,用其他不同型號的樹梅派交叉測試也碰到,我不知道原因,但問題不大,最多寫個腳本就可以解決。
▼圖 查詢網路介面多一個ppp0

▼圖 連線成功後4G LTE USB 行動網卡的燈號會呈現閃爍

測試連線,去ifconfig.co查查取得的外網IP,順便去ping一下google的DNS
curl ifconfig.co #查詢外網IP ping 8.8.8.8 #發送ICMP封包給google DNS
▼圖 正常連線

走到這一步先恭喜你,已經成功連上網了!
如果你的樹梅派是有圖形介面的,嘗試打開瀏覽器去逛一逛網頁,享受一下成就感!
後記
這裡是延伸學習和我踩到的坑,如果沒有碰到問題不必看!
1.標準切斷特定撥號連線應該用
sudo poff 4G
至於使用poff -a的原因,一方面是懶惰,另一方把重複執行的pppd切掉乾淨俐落。
2.撥號上網也可以用以下指令,其效果一樣~
sudo pppd call 4G
3.目前樹莓派使用NetworkManager去管理WiFi,若你上網Google查關閉wifi的方法,會出現以下命令:
sudo ifconfig wlan0 down sudo rfkill block wifi
或暴力的砍掉執行續:
sudo killall wpa_supplicant
以上3個方法能在當下關閉WiFi,但重開機後WiFi依然會連上去。
就算你用關閉 wpa_supplicant服務:
sudo systemctl disable wpa_supplicant
雖然設定要求wpa_supplicant在開機時不被執行,但NetworkManager依然會把wpa_supplicant叫醒,結果依然是啟動狀態,還是會自動連上WiFi。
除非你用更暴力的要求屏蔽服務:
sudo systemctl mask wpa_supplicant
這樣 wpa_supplicant 重開後不會來吵你了, WiFi也就不會連線。
4.下面兩個命令在wifi已停止使用,只會跳出「unknown interfaces wlan0」
sudo ifdown wlan0 #停用 wlan0 網卡 sudo ifup wlan0 #啟用 wlan0 網卡
5.標準的wifi管理建議用NetworkManager,這是Raspberry Pi OS 預設的網路管理工具,指令包含 nmcli (文字命令)和 nmtui (用戶界面)。
參考資料
[1] Brovi E3372 (manufactured by Huawei)
[2] Linux 下用 screen 連接 Serial Port(RS232)
[3] Ubuntu关于串口的操作(查看串口信息、串口助手、串口权限)
[5] PPPoe – by rp-pppoe (clinet)
[8] 【教學/基礎】命令列設定無線網路 <-裡面有停止使用的wifi命令

