節點軟體 · 逐步指南

從一張空桌子到配對好的節點

該買什麼、如何準備一台小型 Linux 電腦、安裝節點軟體、在 Vonode App 中掃描配對 QR Code,以及在免費方案和訂閱之間選擇。已經有模組和 Linux 電腦的讀者,可以直接看安裝頁上的精簡版本。

節點沒有網頁介面。安裝一次、與 App 配對之後,一切都在 App 裡管理。未訂閱時,節點以免費方案執行:App 顯示你選定的一個號碼經行動網路收到的簡訊。其他所有功能(電話、Wi-Fi 通話、傳簡訊、通知、eSIM 設定檔、代理、自動任務、更多號碼)都需要在 App 內購買的有效 Vonode 訂閱。一份訂閱解鎖一個節點。

準備硬體

行動網路模組

Vonode 透過 USB 序列埠(AT)和 QMI 介面驅動採用高通平台的 Quectel 模組。哪些模組測試過,列在硬體頁面上。簡單來說:內建 Quectel EG25-G 的 DJI Cellular 模組,已在一台安裝 Ubuntu 22.04 的 amd64 電腦上測試;同系列的其他 Quectel 模組(單獨的 EG25-G、EC25、EC20、EC21、EM05/EM06、RM500Q)有程式碼支援,但尚未測試。

在測試過的模組上,可以經 Wi-Fi 通話打電話。它不支援行動網路通話,其他模組上的行動網路通話也尚未確認。

常見形式,從最簡單到最有彈性:

  • 內建模組的 USB 網卡(塑膠外殼裡裝著模組,一個 SIM 卡槽,兩根小天線),插上就能用。請確認商品說明寫明會提供序列埠和 QMI 介面(「for Linux」「AT 指令」「QMI」);只提供網路卡功能的網卡(HiLink、僅 RNDIS 或僅 ECM 韌體)不受支援。
  • 裝在 USB 轉接板上的 Mini PCIe 模組。Mini PCIe 轉 USB 轉接板,具備 SIM 卡槽和兩條天線轉接線(SMA 或 IPEX)。一台主機接多個模組時通常用這種方式。
  • 裝在 M.2 轉 USB 轉接板上的 M.2 模組,適用於 5G 的 RM500Q。
  • DJI Cellular 模組。需要先切換一次 USB 識別,Linux 才能辨識它;步驟見硬體頁面。

兩根天線(主天線和分集天線)都要接上,並把主機放在手機收得到訊號的地方:靠近窗戶,而不是放在櫃子裡。即使使用 Wi-Fi 通話,模組也至少要看到一次行動網路才能完成註冊。

示意圖:一個 Quectel EG25-G Mini PCIe 模組插在 USB 轉接板上:左側是 USB-A 接頭,模組插在 Mini PCIe 插槽並以兩顆螺絲固定,一張 SIM 卡半插在轉接板的卡槽中,兩條 U.FL 轉接線從模組連到標示 MAIN 和 DIV 的兩根 SMA 天線
示意圖(不是照片):裝在 USB 轉接板上的 Mini PCIe 模組。兩條轉接線分別連到主天線和分集天線;SIM 卡插在轉接板的卡槽裡。實際轉接板的配置各不相同,但要找的就是這些部件。

主機

  • 任何一台 64 位元 x86(amd64)Linux 電腦。Intel N100 迷你電腦(無風扇、8 GB 記憶體、一顆小 SSD)很合適:USB 埠夠用、耗電低、安靜。二手精簡型電腦或 NUC 也一樣可以。節點本身有 2 GB 記憶體和 4 GB 磁碟就足夠。
  • Debian 12、Ubuntu 22.04 以上版本,或 Fedora。Raspberry Pi 等 ARM 開發板預計在 1.3.1 支援;OpenWrt 路由器、macOS 或 Windows 上的 Docker Desktop,以及沒有 USB 直通的虛擬機器不受支援。
  • 連接多個模組時,請使用有外接電源的 USB 集線器。模組在發射峰值時電流可達 2 A;兩個模組接在主機板無外接電源的 USB 埠上,常會隨機重新啟動或出現「模組消失」的問題。
  • 建議用有線網路連接到路由器。

SIM 卡、eSIM 與網路

  • 一張 Nano SIM 卡,並配上適合卡槽的卡套(Mini PCIe 轉接板通常使用標準卡或 Micro 卡)。請先在手機上關閉 SIM 卡的 PIN 碼,否則節點無法使用這張卡。
  • 模組沒有內建 eSIM。要使用 eSIM 設定檔,請在卡槽插入一張可插拔 eUICC 卡(俗稱「eSIM 卡」「實體 eSIM」);之後可以在 Vonode App 中下載、切換和刪除其中的設定檔(訂閱功能)。
  • Wi-Fi 通話(VoWiFi)需要電信業者在你的資費方案中開通,和手機上一樣。
  • 手機必須能透過一個 TCP 連接埠(預設 2222)連到節點:在路由器上設定連接埠轉送,或在手機和主機之間使用 WireGuard、Tailscale 等 VPN。如果位在電信級 NAT 之後(沒有公用 IPv4),請使用 VPN。

準備主機

安裝 Linux 發行版,連上網路,並用可以使用 sudo 的使用者登入。然後更新系統,並停用會搶占模組序列埠的 ModemManager:

$ sudo apt update && sudo apt full-upgrade -y
$ sudo systemctl disable --now ModemManager

插上模組,確認 Linux 已辨識:

$ lsusb | grep -i -E 'quectel|2c7c|qualcomm|05c6'
$ ls /dev/ttyUSB* /dev/cdc-wdm*

每個模組應顯示一行 Quectel 資訊、四個 ttyUSB 連接埠和一個 cdc-wdm 連接埠。如果不是,請看疑難排解。

下載節點安裝套件

每個版本都以 vonode_<version>_linux_amd64_commercial.tar.gz 的形式發布在 Vonode 節點發行頁上,附有 SHA-256 檢查碼、軟體物料清單,以及其中 GPL 和 LGPL 元件的原始碼。下載、驗證並解壓縮:

$ curl -fLO https://github.com/vonode/vonode-releases/releases/download/<version>/vonode_<version>_linux_amd64_commercial.tar.gz
$ curl -fLO https://github.com/vonode/vonode-releases/releases/download/<version>/vonode_<version>_linux_amd64_commercial.tar.gz.sha256
$ sha256sum -c vonode_<version>_linux_amd64_commercial.tar.gz.sha256
$ tar -xzf vonode_<version>_linux_amd64_commercial.tar.gz

安裝節點(systemd 安裝套件)

本版本建議的安裝方式。systemd 安裝套件把節點安裝為兩個系統服務,不需要 Docker。

在安裝套件的最上層目錄執行安裝程式:

$ cd vonode_<version>_linux_amd64_commercial
$ sudo ./install.sh

安裝程式會把程式放到 /opt/vonode,保留既有的設定和資料庫,建立系統使用者 vonode-gateway(UID 和 GID 為 10001),並啟動兩個 systemd 服務:核心服務 vonode,以及 App 所連線的加密 SSH 閘道服務 vonode-gateway。

第一次啟動時,節點會產生一組隨機的管理員密碼,設定中只保存它的雜湊值。明文在 /opt/vonode/config/initial-admin-password 中,只有 root 可以讀取。你很少會用到它。

顯示配對 QR Code,並填寫手機連到節點時使用的位址:設定連接埠轉送時填 DDNS 網域名稱或公用 IP,否則填主機的 VPN 位址或區域網路位址。如果轉送的是其他連接埠,請加上 -port <連接埠>。

$ sudo /opt/vonode/vonode pair -c /opt/vonode/config/config.yaml -host node.example.com

終端機會以方塊圖形顯示 QR Code,5 分鐘內有效,只能使用一次;需要新的 QR Code 時再執行一次這道指令。

終端機中以黑白方塊顯示的配對 QR Code,下方寫著在 Vonode App 中掃描上方 QR Code 進行配對、有效期限至五分鐘後的某個時間且只能使用一次,以及後續步驟(擷取自 Docker 安裝指令碼;systemd 的 pair 指令顯示的是同樣的 QR Code)
終端機中的配對 QR Code。其中的 QR Code、位址和時間都是範例。

在主機防火牆上允許 TCP 2222 連接埠;如果手機要從外部網路連線,還需在路由器上設定連接埠轉送:

$ sudo ufw allow 2222/tcp

配對 App

從 App Store 安裝 Vonode(免費下載)並開啟。在「連接你的節點」頁面點一下掃描框,把相機對準終端機上的 QR Code。App 會透過 SSH 連線到節點,固定節點的主機金鑰,並在首頁顯示這個節點。

Vonode App 在中國大陸以外的 App Store 國家和地區提供,台灣、香港和澳門的 App Store 均可下載;中國大陸的 App Store 目前不提供。

Vonode App 的首次連線頁面「連接你的節點」:QR Code 掃描框、手動登入入口和 App 審核碼輸入欄配對後的 Vonode App 首頁:節點卡片顯示名稱和狀態,號碼顯示各自的通話方式,底部是標籤列(審核演示用的合成資料)
左:掃描頁面。右:剛配對完成的首頁,已列出節點。App 和節點必須能透過 QR Code 中的位址互相連線;如果 App 顯示連線錯誤,先檢查連接埠轉送或 VPN,再產生新的 QR Code。

免費號碼或訂閱

免費方案。開啟「號碼」標籤頁,選擇一個你想查看簡訊的號碼。這個選擇對該節點永久有效,從備份還原也會保留。之後「簡訊」標籤頁會顯示這個號碼收到的簡訊,你可以閱讀和刪除。

免費方案下 Vonode App 的「號碼」標籤頁:「免費方案」標記和「選擇你的免費號碼」卡片,說明 App 可以顯示一個號碼收到的簡訊,且選定後不能更換;下面是這個節點上的號碼、「新增模組」和「解鎖全部功能」(測試用合成資料)Vonode App 的「簡訊」標籤頁:簡訊對話清單,顯示寄件者、預覽和時間(審核演示用的合成資料)
左:「號碼」標籤頁中的免費號碼選擇。右:「簡訊」標籤頁。

訂閱。開啟「更多」,點「查看方案」(或「更多 > 訂閱」)並訂閱。由 Apple 收費;App 把簽署的交易紀錄交給你的節點,節點幾秒內解鎖並重新啟動進入完整模式。之後用「新增模組」加入你的模組,為每張 SIM 卡開啟 Wi-Fi 通話,並依需要設定電話、eSIM、通知和自動任務。

免費方案下 Vonode App 的「更多」標籤頁:節點卡片,以及一張說明卡片:免費方案只顯示免費號碼的簡訊,電話、傳送、自動任務、代理和通知需要訂閱,並有「查看方案」按鈕(測試用合成資料)
免費方案下的「更多」標籤頁。「查看方案」會開啟訂閱頁面,Apple 在那裡顯示你所在地區的方案期間和價格。之後要配對第二支手機,請在 App 中使用「換綁到新手機」,它會顯示一個一次性 QR Code。

日常維運

使用 systemd 安裝套件時,節點以 vonode 和 vonode-gateway 兩個服務執行。

查看狀態和記錄

$ systemctl status vonode vonode-gateway
$ journalctl -u vonode -f

重新啟動

$ sudo systemctl restart vonode

重新啟動或停止最多需要兩分鐘:節點會先取消註冊 Wi-Fi 通話並關閉通道。

忘記管理員密碼

$ sudo systemctl stop vonode
$ sudo /opt/vonode/vonode reset-password -c /opt/vonode/config/config.yaml
$ sudo systemctl start vonode

停止服務、重設密碼,再啟動服務。所有手機都會登出,需要重新配對。

  • 備份:在 App 的「更多 > 備份紀錄」中操作。備份包含簡訊、通話紀錄和訂閱綁定,請妥善保管。
  • 手機遺失時,可以在 App 的「已配對的手機」清單中移除它。
  • 訂閱到期:如果訂閱到期未續訂,節點會繼續運作 72 小時,讓 App 有時間送達續訂;請開啟 App 續訂。之後,或退款後立即,節點回到免費方案,只顯示所選號碼的簡訊。

移轉到新硬體

在 App 中為舊節點建立並下載備份,安裝並配對新節點,然後匯入備份、還原並重新啟動。備份包含節點的訂閱綁定,所以新節點不必重新購買就能解鎖,並保留免費方案已選定的號碼。請妥善保管備份:其中包含簡訊、通話紀錄和綁定資訊。不要讓舊節點繼續用同一份資料執行。

疑難排解

「ModemManager is running」

它會比 Vonode 先占用序列埠。停用它,然後重新啟動節點:

$ sudo systemctl disable --now ModemManager
$ sudo systemctl restart vonode
偵測不到模組

如果 lsusb 裡沒有 Quectel(2c7c)裝置,請換一條線或換一個連接埠,使用有外接電源的集線器,並查看核心記錄中的 USB 供電錯誤(「over-current」「device not accepting address」)。如果 lsusb 看得到模組但沒有 /dev/ttyUSB*,請載入驅動程式,然後重新插拔模組。有些轉接板出廠時讓模組處於沒有 USB 序列埠的模式,請依轉接板廠商的說明開啟;DJI Cellular 模組請看硬體頁面。

$ sudo dmesg | tail -n 30
$ sudo modprobe -a option qmi_wwan
App 連不上節點

在你的網路之外的裝置上測試連接埠。沒有回應,表示路由器轉送或防火牆設定有誤,或者網路服務供應商使用了電信級 NAT(沒有公用 IPv4)。這時請在手機和主機之間建立 VPN(Tailscale、WireGuard),用主機的 VPN 位址配對,或使用節點文件中介紹的中繼選項。

$ nc -vz node.example.com 2222
配對碼已過期或已使用

配對碼 5 分鐘內有效,只能使用一次;用安裝節點一節中的 pair 指令產生新的配對碼。

Wi-Fi 通話無法註冊

SIM 卡的資費方案需要開通 Wi-Fi 通話,模組至少要用這張 SIM 卡在行動網路上註冊過一次,主機還需要能透過 IPv6 或 IPv4 連到電信業者的 ePDG。App 的診斷頁面會顯示目前所處的階段;它可以匯出的支援套件,就是要寄給支援的資料。

簡訊時間不正確

節點使用主機的時區。請用 timedatectl 設定(使用 Docker 時,對安裝指令碼傳入 --tz Europe/London 這樣的 IANA 時區名稱)。

Docker Compose(即將推出)

即將推出。商用 Docker 映像檔尚未發布,所以本版本還不能使用這種方式,請使用上面的 systemd 安裝套件。下面的步驟說明 Docker 方式推出後的用法。

在映像檔發布之前,setup.sh 會停下並要求指定映像檔:如果某個版本的發行說明提供了 --image vonode/vonode@sha256:<digest>,請傳入它;否則請使用 systemd 安裝套件(在安裝套件最上層目錄、也就是 docker/ 的上一層執行 sudo ./install.sh),這是本版本支援的安裝方式。

安裝 Docker Engine 和 Compose

Docker 官方的便利指令碼可在 Debian、Ubuntu 和 Fedora 上安裝 Docker Engine 和 Compose 外掛程式。最後一道指令必須輸出 Compose v2 的版本號碼。

$ curl -fsSL https://get.docker.com | sh
$ sudo systemctl enable --now docker
$ docker compose version

執行安裝指令碼

在安裝套件的 docker/ 目錄下執行。--host 是手機連到節點時使用的網域名稱或 IP;不填時,指令碼會建議使用主機的區域網路位址,在同一個 Wi-Fi 下第一次配對時這樣就可以。

$ cd vonode_<version>_linux_amd64_commercial/docker
$ sudo ./setup.sh --host node.example.com --image vonode/vonode@sha256:<digest>

指令碼會檢查主機(Linux、amd64、root、Docker、Compose、ModemManager),列出找到的模組及其裝置節點,在指令碼旁邊建立 config/、data/ 和 logs/,寫入 .env 和 docker-compose.override.yml,下載映像檔,啟動兩個容器(核心 vonode,以及供 App 連線的 SSH 閘道 vonode-gateway),並等待兩者都回報 healthy,第一次啟動大約需要半分鐘。預設把整個 /dev 綁定進核心容器,這樣重新列舉或熱插拔的模組仍能使用;--devices 只對應目前存在的裝置節點。可變的映像檔標籤會被拒絕,除非加上 --allow-tag。最後,指令碼會顯示初始管理員密碼的位置(config/initial-admin-password,只有 root 可以讀取)和配對 QR Code。

sudo ./setup.sh --host node.example.com 的終端機輸出:偵測到兩個 Quectel 2c7c:0125 模組及其 ttyUSB、cdc-wdm 和 wwan 裝置節點,部署摘要(映像檔 digest、SSH 連接埠 2222、時區、本機回送管理連接埠、整個 /dev 綁定進核心),下載映像檔,Docker Compose 建立並啟動 vonode 和 vonode-gateway 容器,Both containers are healthy 一行,以及初始管理員密碼的位置
實際的 setup.sh 輸出;與主機相關的值已替換為範例。

傳入 --port <n> 可以使用其他 SSH 連接埠;路由器轉送的外部連接埠不同時,再傳入 --public-port <n>。隨時產生新的配對碼(在同一個目錄下):

$ sudo docker compose exec vonode /app/vonode pair -c /app/config/config.yaml -host node.example.com -port 2222

Docker 方式的日常維運

以下指令都在安裝套件的 docker/ 目錄下執行。

操作指令
查看狀態(兩個服務都應為 healthy)sudo docker compose ps
查看記錄sudo docker compose logs -f vonode
產生新的配對碼sudo docker compose exec vonode /app/vonode pair -c /app/config/config.yaml -host <address> -port 2222
新增或移動了模組(重新偵測模組,其餘保持不變)sudo ./setup.sh
重新啟動(最多兩分鐘)sudo docker compose restart vonode
停止並保留資料sudo ./setup.sh --uninstall
全部刪除sudo ./setup.sh --uninstall --purge
忘記管理員密碼(所有手機需要重新配對)sudo docker compose stop vonode, sudo docker compose run --rm --no-deps vonode reset-password -c /app/config/config.yaml, sudo docker compose start vonode
升級:把新的映像檔參照寫入 .env(或傳入 --image),再執行指令碼vonode/vonode@sha256:<digest> → .env / --image, sudo ./setup.sh

不要執行 docker compose down -v:vonode_gateway-private 磁碟區保存著已配對手機所固定的 SSH 主機金鑰。setup.sh --uninstall 會保留它。

  • 127.0.0.1:7575 連接埠已被占用:另一個程式占用了節點的本機配對頁連接埠。執行 sudo ./setup.sh --admin-port 17575(任何空閒的連接埠),指令碼會同時把連接埠寫入設定和 Compose 環境。
  • 容器不是 healthy:用 sudo docker compose logs vonode 查看原因。核心在內部通訊端建立後即為 healthy;vonode-gateway 在能連到該通訊端並監聽 2222 連接埠後為 healthy。最常見的原因是 2222 連接埠衝突(ss -ltn | grep 2222),請用 --port 換一個連接埠。
  • 模組重設後連接埠變了:模組重設後會重新列舉,ttyUSB 編號可能改變。預設綁定整個 /dev 時,它們會自動出現;如果你用了 --devices,請再執行一次 sudo ./setup.sh。

節點軟體是 VONODE LLC 的專有軟體。第三方元件及其授權條款列在安裝套件的 THIRD_PARTY_NOTICES.txt 和 SBOM 中。Vonode 不是緊急通訊服務:請只在你有權使用的 SIM 卡、號碼和網路上使用,並遵守電信業者的條款。