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 内存和耗电。建议只为常用的网关开启。
