Nebula 網關
Nebula 網關用於接入 Nebula 覆蓋網路。它不是系統級 VPN,不會修改系統網路配置,也不會影響其他 App 的網路流量,僅為本 App 內的資源提供資料通道。
Nebula 透過憑證簽發管理節點身分:在伺服器上用 nebula-cert 產生 CA 和節點憑證,把節點憑證、私鑰和 CA 憑證連同整份 config.yaml 貼進 App 即可。它以無 TUN 的使用者態方式執行(內建 Nebula 協定棧和 gVisor TCP/IP 協定棧),在本地暴露一個 SOCKS5 代理,App 內的 Web、SSH、VNC、RDP、WebDAV 資源都透過該代理連線。
配置項
| 欄位 | 說明 |
|---|---|
| 名稱 | 網關顯示名稱 |
| config.yaml | 完整 Nebula 配置,直接貼上,憑證以內嵌 PEM 寫在 pki 段(見下文) |
| 本地代理位址 | 預設 127.0.0.1 |
| 本地代理連接埠 | 預設 9083 |
| 打開時自動連線 | 打開 App 時自動啟用此網關,預設關閉 |
內嵌憑證配置格式
pki.ca / pki.cert / pki.key 三項的值直接寫 PEM 文字,使用 YAML 區塊字面量 |。不要寫檔案路徑——iOS 沙盒裡沒有那些檔案,App 只支援內嵌形式。
pki:
ca: |
-----BEGIN NEBULA CERTIFICATE-----
(ca.crt 的完整內容)
-----END NEBULA CERTIFICATE-----
cert: |
-----BEGIN NEBULA CERTIFICATE-----
(host.crt 的完整內容)
-----END NEBULA CERTIFICATE-----
key: |
-----BEGIN NEBULA X25519 PRIVATE KEY-----
(host.key 的完整內容)
-----END NEBULA X25519 PRIVATE KEY-----注意:
- 憑證是 Nebula 自己的格式,橫幅為
NEBULA CERTIFICATE,不是 X.509 的-----BEGIN CERTIFICATE-----。X.509 憑證與本網關無關。 pki.cert只放本節點憑證,不要把 CA 憑證拼進去;CA 只寫在pki.ca。- 私鑰僅支援明文的
NEBULA X25519 PRIVATE KEY(或NEBULA P256 PRIVATE KEY)。nebula-cert -encrypt-key產生的加密私鑰無法使用,請先解密或重新簽發。 - 使用 v2 憑證時橫幅為
NEBULA CERTIFICATE V2;v1 + v2 雙憑證可以在cert下首尾相接貼上多塊。 |區塊內每行縮排必須一致且比鍵名更深,不要使用 Tab。tun段可以照常貼上,App 會自動按無 TUN 模式執行,無需特殊設定。
最小配置示例
以下是一份可直接修改使用的用戶端配置範本:
pki:
ca: |
-----BEGIN NEBULA CERTIFICATE-----
...
cert: |
-----BEGIN NEBULA CERTIFICATE-----
...
key: |
-----BEGIN NEBULA X25519 PRIVATE KEY-----
...
lighthouse:
am_lighthouse: false
interval: 60
hosts:
- "燈塔伺服器公網位址:4242"
static_host_map:
"燈塔的 Nebula IP": ["燈塔伺服器公網位址:4242"]
listen:
host: 0.0.0.0
port: 0
tun:
disabled: false
dev: nebula0
firewall:
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: any
host: any基本流程
- 在伺服器上產生 CA 與節點憑證:bash
nebula-cert ca -name "my-ca" nebula-cert sign -name "iphone" -ip "192.168.100.2/24" \ -ca-file ca.crt -ca-key ca.key - 按
ca.crt、iphone.crt、iphone.key的內容編寫config.yaml,憑證按上文格式內嵌。 - 在 App 中新增 Nebula 網關,貼上整份
config.yaml。 - 儲存並連線,狀態變為已連線後打開資源,資源位址填對端的 Nebula IP。
常見問題
對端能 ping 通,但網頁或 SSH 打不開
Nebula 防火牆預設全部拒絕,ICMP 放行不代表 TCP 放行。檢查兩端配置:
- 本機貼上的
config.yaml中firewall.outbound需放行目標連接埠(範例已放行 any)。 - 對端的
firewall.inbound需放行對應 TCP 連接埠,例如:yamlfirewall: inbound: - port: 8080 proto: tcp host: any - 對端服務需監聽在它的 Nebula IP 上(綁定
0.0.0.0或該 IP),只綁127.0.0.1無法存取。
打不開對端所在區域網路的位址
本網關只能存取憑證網段內的 Nebula IP。unsafe_routes(網段轉發,存取對端區域網路)是 TUN 裝置特性,App 的使用者態模式不支援。如需存取對端區域網路服務,可讓對端在它的 Nebula IP 上做連接埠轉發或反向代理。
連線失敗提示憑證相關錯誤
Nebula 憑證有效期間(預設 1 年),過期後交握失敗;重新簽發節點憑證並更新貼上的配置。私鑰報錯多為貼上了加密私鑰或橫幅不匹配,參見上文內嵌格式說明。
當前實作說明
Nebula 完整協定棧內建於 App(純 Go 實作),不建立系統 VPN。它只服務於 OmniGate 內資源,不會讓其他 App 走 Nebula 網路。本地 SOCKS5 代理連接埠可修改,注意不要與其他網關連接埠衝突。
自動連線
Nebula 網關支援「打開時自動連線」開關。開啟後:
- App 啟動時會自動啟用此網關。
- 網關列表中該網關會顯示
auto標籤。 - 開啟開關後會立即觸發連線並儲存配置。
關閉開關後網關列表顯示 lazy 標籤,只有打開該網關下的資源時才會連線。
開啟自動連線可以省去等待網關連線的時間,但會增加 App 記憶體和耗電。建議只為常用的網關開啟。
