Skip to content

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 只支援內嵌形式。

yaml
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 模式執行,無需特殊設定。

最小配置示例

以下是一份可直接修改使用的用戶端配置範本:

yaml
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

基本流程

  1. 在伺服器上產生 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
  2. ca.crtiphone.crtiphone.key 的內容編寫 config.yaml,憑證按上文格式內嵌。
  3. 在 App 中新增 Nebula 網關,貼上整份 config.yaml
  4. 儲存並連線,狀態變為已連線後打開資源,資源位址填對端的 Nebula IP。

常見問題

對端能 ping 通,但網頁或 SSH 打不開

Nebula 防火牆預設全部拒絕,ICMP 放行不代表 TCP 放行。檢查兩端配置:

  • 本機貼上的 config.yamlfirewall.outbound 需放行目標連接埠(範例已放行 any)。
  • 對端firewall.inbound 需放行對應 TCP 連接埠,例如:
    yaml
    firewall:
      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 記憶體和耗電。建議只為常用的網關開啟。

OmniGate App 使用者手冊