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 用户手册