Ubuntu 22.04 安装 Nebula VPN 指南
Ubuntu 22.04 安装 Nebula VPN 1.11.2 完整指南:官方二进制下载与 sha256 校验、证书签发、最小配置、-test 校验、systemd 托管与开机自启、离线安装方案、常见故障与卸载清理,全程实机实测。
Ubuntu 22.04 安装 Nebula VPN 指南
目标:在一台 Ubuntu 22.04 服务器上以官方二进制 + systemd 方式安装 Nebula VPN 1.11.2,跑通证书签发、配置校验、服务托管与开机自启的完整链路。文中全部命令与回显均来自本机实测(执行日期 2026-10-20),方案设计与软件背景见《Nebula VPN 1.11.2 介绍与选型指南》(https://www.quzuo.net/document/pyoceG4tz3PZ),配置参数逐项说明见《Nebula VPN 1.11.2 配置参数详解》。
一、环境信息
- 操作系统:Ubuntu 22.04.4 LTS(x86_64),systemd 249(
systemctl --version实测首行systemd 249 (249.11-0ubuntu3.23)) - 内核要求:具备 TUN 设备(
/dev/net/tun存在),Ubuntu 默认内核自带 - 软件版本:Nebula VPN 1.11.2(当前最新稳定版,2026-09-22 发布,GitHub releases.atom 实查)
- 安装方式:官方 GitHub Releases 二进制包 nebula-linux-amd64.tar.gz
- 部署形态:单机部署一个 lighthouse(信标)节点,systemd 托管,
/usr/local/bin+/etc/nebula标准目录布局 - 网络参数:overlay 网段 10.99.0.0/24,节点 IP 10.99.0.1,underlay 监听 UDP 4242
二、前置条件
安装前逐项确认:
- root 或 sudo 权限:nebula 需要创建 TUN 网卡(CAP_NET_ADMIN)并写
/etc、/usr/local/bin。 - TUN 设备存在(虚拟机/云主机环境需额外确认,物理机默认满足):
ls -l /dev/net/tun
实测输出:
crw-rw-rw- 1 root root 10, 200 10月 19 23:47 /dev/net/tun
- UDP 4242 端口空闲。注意 Nebula 监听的是 UDP 而非 TCP,排查时用
ss -lunp:
ss -lunp | grep ':4242 ' || echo "4242 free"
实测输出:
4242 free
- 系统防火墙与云安全组放行 UDP 4242。实测本机 ufw 为关闭状态(
ufw status回显Status: inactive);若开启 ufw 则执行sudo ufw allow 4242/udp;云主机还需在控制台安全组放行同规则。 - 下载通道可达 github.com(离线环境直接看方案 B)。
三、版本选型说明
| 版本 | 发布日期(releases.atom 实查) | 说明 |
|---|---|---|
| v1.10.1 | 2026-01-16 | v1.10 系列首个稳定版 |
| v1.10.2 | 2026-01-21 | 补丁版 |
| v1.10.3 | 2026-02-08 | v1.10 系列当前末版 |
| v1.11.0 | 2026-07-23 | v1.11 首版 |
| v1.11.1 | 2026-08-21 | 补丁版 |
| v1.11.2 | 2026-09-22 | 当前最新稳定版,本文版本 |
选型结论:新装一律用最新稳定版 v1.11.2(v1.11.2 修复了 Windows 端 NLMTU 处理、Android netlink 绑定、macOS 自地址校验三个缺陷,属低风险补丁版);生产升级前留意 Release Notes 是否有兼容性变更。架构选择:x86_64 选 linux-amd64,ARM 主机选 linux-arm64。
安装渠道说明:Nebula 官方只提供 GitHub Releases 二进制分发,Ubuntu 官方 apt 源中没有 nebula 包,因此「官方二进制 + systemd」就是社区标准装法。v1.11.2 的发布件不再附带 CHECKSUMS 校验清单(发布资产实测仅含各平台压缩包),下载后用 sha256sum 记录哈希与官方发布页大小核对即可。
四、方案 A:官方二进制在线安装
4.1 下载与校验
cd /tmp
curl -LO "https://github.com/slackhq/nebula/releases/download/v1.11.2/nebula-linux-amd64.tar.gz"
ls -l nebula-linux-amd64.tar.gz
sha256sum nebula-linux-amd64.tar.gz
实测输出:
-rw-r--r-- 1 root root 18600385 10月 20 18:16 nebula-linux-amd64.tar.gz
6140d33f2ec21ce7f6b655b5bc820e93a684d97e51d0ddcf907324b5b28aac1e nebula-linux-amd64.tar.gz
文件大小 18,600,385 字节与 GitHub 发布页一致;sha256 可留存与后续升级包比对。
4.2 解压并安装二进制
tar xzf nebula-linux-amd64.tar.gz
ls -l nebula nebula-cert
install -m 0755 nebula /usr/local/bin/nebula
install -m 0755 nebula-cert /usr/local/bin/nebula-cert
nebula -version
nebula-cert -version
实测输出(ls -l 与两个版本号均为实测,uid 1001 为 tar 包内保留的打包者 uid):
-rwxr-xr-x 1 1001 1001 26317909 9月 22 21:02 nebula
-rwxr-xr-x 1 1001 1001 10336960 9月 22 21:02 nebula-cert
Version: 1.11.2
Version: 1.11.2
💡 注意:v1.11.2 起 tar 包内同时包含 nebula(主程序)与 nebula-cert(证书工具)两个二进制,一次解压即齐;老版本教程里的
nebula-cert-linux-amd64.tar.gz单独包已不存在。
4.3 生成 CA 与节点证书
mkdir -p /etc/nebula
nebula-cert ca -name "Quzuo Nebula CA" -duration 87600h -out-crt /etc/nebula/ca.crt -out-key /etc/nebula/ca.key
nebula-cert sign -name lighthouse -networks "10.99.0.1/24" -groups "lighthouse" -ca-crt /etc/nebula/ca.crt -ca-key /etc/nebula/ca.key -out-crt /etc/nebula/host.crt -out-key /etc/nebula/host.key
ls -l /etc/nebula/
实测输出(两条签发命令静默成功,exit=0;ls 回显如下,四个文件均为 600 权限):
total 16
-rw------- 1 root root 261 10月 20 18:20 ca.crt
-rw------- 1 root root 174 10月 20 18:20 ca.key
-rw------- 1 root root 326 10月 20 18:20 host.crt
-rw------- 1 root root 127 10月 20 18:20 host.key
要点:-duration 87600h 表示 CA 有效期 10 年;节点证书默认跟随 CA 有效期上限,可用 nebula-cert sign -duration 收短。证书参数与运维组合在《Nebula VPN 1.11.2 常用 CLI 命令详解》篇逐条展开。
4.4 编写节点配置
写入 /etc/nebula/config.yaml(lighthouse 节点最小可用配置):
pki:
ca: /etc/nebula/ca.crt
cert: /etc/nebula/host.crt
key: /etc/nebula/host.key
lighthouse:
am_lighthouse: true
interval: 60
listen:
host: 0.0.0.0
port: 4242
tun:
dev: nebula0
mtu: 1300
firewall:
outbound:
- port: any
proto: any
host: any
inbound:
- port: any
proto: any
host: any
4.5 配置校验与前台试运行
先用 -test 校验配置再启动是好习惯:
nebula -test -config /etc/nebula/config.yaml
echo "exit=$?"
实测输出节选(实测尾部;首行为整份配置回显故略去):
time=2026-10-20T18:21:10.771+08:00 level=INFO msg="Firewall rule added" firewallRule="map[caName: caSha: cidr: direction:incoming endPort:0 groups:[] host:any localCidr: proto:0 startPort:0]"
time=2026-10-20T18:21:10.771+08:00 level=INFO msg="Firewall started" firewallHashes=SHA:498215dec4e5687a2353f51c10838c113bd1af35ef72b8e8c9f536986ada5417,FNV:2782948616
time=2026-10-20T18:21:10.771+08:00 level=INFO msg="Main HostMap created" preferredRanges=[]
time=2026-10-20T18:21:10.771+08:00 level=INFO msg="punchy enabled"
exit=0
配置有问题时 -test 会直接给出原因并以非零退出(实测故障配置回显):
time=2026-10-20T18:21:10.785+08:00 level=ERROR msg="Could not load client cert" error="unable to read pki.cert file /etc/nebula/missing.crt: open /etc/nebula/missing.crt: no such file or directory"
exit=1
前台试运行观察启动日志:
nebula -config /etc/nebula/config.yaml
实测输出(出现 Nebula interface is active 即启动成功,Ctrl+C 可退出):
time=2026-10-20T18:21:28.491+08:00 level=INFO msg=listening addr=0.0.0.0:4242
time=2026-10-20T18:21:28.491+08:00 level=INFO msg="Nebula interface is active" interface=nebula0 networks=[10.99.0.1/24] build=1.11.2 udpAddr=0.0.0.0:4242 boringcrypto=false
4.6 systemd 托管与开机自启
Ctrl+C 停掉前台进程后,创建 /etc/systemd/system/nebula.service(实测单元全文):
[Unit]
Description=Nebula VPN Service
Documentation=https://nebula.defined.net/docs/
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yaml
Restart=on-failure
RestartSec=5
LimitNOFILE=65536
[Install]
WantedBy=multi-user.target
启用并启动:
systemctl daemon-reload
systemctl enable --now nebula
systemctl is-enabled nebula; systemctl is-active nebula
实测输出:
enabled
active
服务状态核查:
systemctl status nebula --no-pager -l | head -14
实测输出:
● nebula.service - Nebula VPN Service
Loaded: loaded (/etc/systemd/system/nebula.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2026-10-20 18:33:16 CST; 29s ago
Docs: https://nebula.defined.net/docs/
Main PID: 1463729 (nebula)
Tasks: 10 (limit: 38359)
Memory: 9.8M
CPU: 39ms
CGroup: /system.slice/nebula.service
└─1463729 /usr/local/bin/nebula -config /etc/nebula/config.yaml
10月 20 18:33:16 ops nebula[1463729]: time=2026-10-20T18:33:16.688+08:00 level=INFO msg=listening addr=0.0.0.0:4242
实测单节点内存占用仅 9.8M,lighthouse 无业务流量时 CPU 接近零。
4.7 验证
ss -lunp | grep ':4242 '
journalctl -u nebula --no-pager | tail -3
实测输出:
UNCONN 0 0 0.0.0.0:4242 0.0.0.0:* users:(("nebula",pid=1463825,fd=8))
time=2026-10-20T18:33:16.688+08:00 level=INFO msg="Firewall started" firewallHashes=SHA:498215dec4e5687a2353f51c10838c113bd1af35ef72b8e8c9f536986ada5417,FNV:2782948616
time=2026-10-20T18:33:16.688+08:00 level=INFO msg=listening addr=0.0.0.0:4242
time=2026-10-20T18:33:16.689+08:00 level=INFO msg="Nebula interface is active" interface=nebula0 networks=[10.99.0.1/24] build=1.11.2 udpAddr=0.0.0.0:4242 boringcrypto=false
同时 ip addr show nebula0 应能看到 10.99.0.1/24 已落在网卡上。至此单节点安装完成;接入 client 节点、防火墙分组与 relay 的配置在《Nebula VPN 1.11.2 配置参数详解》篇实测展开。
五、方案 B:离线二进制安装
适用于无法直连 GitHub 的内网主机,思路是「联网机下载 → 校验 → 传输 → 相同安装步骤」。
- 在联网机上下载(同 4.1)并记录校验值:
大小:18,600,385 字节
sha256:6140d33f2ec21ce7f6b655b5bc820e93a684d97e51d0ddcf907324b5b28aac1e
- 传输到目标主机(U 盘/内网文件服务均可,以 scp 为例):
scp nebula-linux-amd64.tar.gz user@内网主机:/tmp/
- 目标主机上校验后按 4.2–4.7 完全相同步骤安装:
sha256sum比对哈希一致 → 解压 →install到/usr/local/bin→ 证书与配置 → systemd 单元。所有后续步骤与方案 A 完全一致,无需联网。
💡 离线环境的证书建议在运维机上统一签发(
nebula-cert是独立二进制,可离线运行),把 ca.crt/host.crt/host.key 与 config.yaml 一起分发,节点上不留 CA 私钥,缩小密钥暴露面。
六、方案对比与选择建议
| 维度 | 方案 A:在线安装 | 方案 B:离线安装 |
|---|---|---|
| 网络要求 | 安装机可达 github.com | 仅传输介质可用即可 |
| 校验手段 | sha256 + 文件大小对照发布页 | sha256 提前在联网机算好,离线侧复算比对 |
| 适用场景 | 单台/少量可上网服务器 | 无外网的数据中心、涉密机房 |
| 升级方式 | 重新 curl 下载替换二进制 | 联网机制作升级包,走内网分发 |
| 一致性风险 | 低(直取官方发布件) | 中(注意别把解压后的二进制与包混传) |
选择建议:能联网一律方案 A;批量离线机器建议把「下载+校验+签证书」做成一条内网流水线,避免逐台手抄。两种方案最终的运行形态(二进制路径、目录、systemd 单元)完全一致,后续篇章不再区分。
七、安装产物与配置说明
安装完成后系统内留下的产物清单(路径均为实测):
| 路径 | 说明 | 实测权限 |
|---|---|---|
| /usr/local/bin/nebula | 主程序守护进程 | 0755 |
| /usr/local/bin/nebula-cert | 证书签发/校验工具 | 0755 |
| /etc/nebula/ca.crt | CA 证书(分发给所有节点) | 0600 |
| /etc/nebula/ca.key | CA 私钥(只留签发机,严禁随节点分发) | 0600 |
| /etc/nebula/host.crt | 本节点证书 | 0600 |
| /etc/nebula/host.key | 本节点私钥 | 0600 |
| /etc/nebula/config.yaml | 节点配置 | 0644 |
| /etc/systemd/system/nebula.service | systemd 单元 | 0644 |
journald tag nebula | 运行日志(journalctl -u nebula) | - |
systemd 单元字段解读:
Type=simple+ExecStart=/usr/local/bin/nebula -config /etc/nebula/config.yaml:nebula 前台常驻,无需 fork 守护。Restart=on-failure/RestartSec=5:异常退出自动拉起;手动systemctl stop不会被重启。LimitNOFILE=65536:节点规模大时(几千条隧道)抬高句柄上限。WantedBy=multi-user.target:随系统启动,is-enabled实测回显enabled。
安全建议:ca.key 建议迁移到签发机或离线保管,节点只留 ca.crt 与自身证书/私钥;config.yaml 中如果写有 lighthouse 地址等信息,注意不要把含真实拓扑的配置公开。
八、常见问题
8.1 启动报 unable to bind to socket: address already in use
端口被其他进程占用。先用 UDP 视角排查(Nebula 是 UDP 监听,用 ss -lunp 而非 -ltnp):
ss -lunp | grep ':4242 '
实测占用时的 journalctl -u nebula 报错(真实复现):
time=2026-10-20T18:44:39.490+08:00 level=INFO msg=listening addr=0.0.0.0:4242
time=2026-10-20T18:44:39.500+08:00 level=ERROR msg="Failed to open udp listener" queue=0 error="unable to bind to socket: address already in use"
(注意该场景下 nebula 会先打一条 listening 再报 bind 失败并退出,以 ERROR 行为准。)释放占用进程或改 listen.port 后重启服务即可。
8.2 重复签发报 refusing to overwrite existing cert
nebula-cert sign 的 -out-crt/-out-key 指向已存在的文件时会拒绝覆盖(实测):
Error: refusing to overwrite existing cert: dup.crt
(exit=1)先删除旧文件或改用新文件名;轮换证书时用带日期的新文件名(如 host-2026.crt)更稳妥。
8.3 -test 校验失败排查
nebula -test 的 ERROR 行会直接指出问题文件与原因,常见是 pki 三个路径写错或文件权限不可读,见 4.5 节实测故障回显;修好后再启动。
8.4 两节点握手一直不通(Handshake timed out)
client 侧日志反复出现 Handshake message sent 后伴随 Handshake timed out 且无 Handshake message received,常见原因依次排查:① UDP 4242 未放行(云安全组/ufw);② static_host_map 里 lighthouse 的 underlay 地址写错;③ 两侧 cipher 显式钉死了不同算法(默认不写则自动协商,实测不匹配时的现象与修法见《Nebula VPN 1.11.2 配置参数详解》5.5 节)。
8.5 升级前必须留意的点
升级 = 替换二进制 + 重启服务(先 nebula -version 确认新版本),回滚同理放回旧二进制。证书与配置与二进制版本解耦,不用重签;跨大版本(如 1.9→1.11)先读 Release Notes 的变更说明。
九、卸载与清理
按依赖顺序完整移除(以下为实测卸载过程,回显逐行照抄):
systemctl disable --now nebula
systemctl is-active nebula
ss -lunp | grep ':4242 ' || echo "4242 not listening"
ip link show nebula0
rm /etc/systemd/system/nebula.service
systemctl daemon-reload
rm -rf /etc/nebula
rm -f /usr/local/bin/nebula /usr/local/bin/nebula-cert
实测输出:
Removed /etc/systemd/system/multi-user.target.wants/nebula.service.
inactive
4242 not listening
Device "nebula0" does not exist.
最终核验(实测,三项均应无输出或回显“不存在”):
systemctl list-unit-files | grep nebula || echo "no nebula unit"
pgrep -ax nebula || echo "no nebula process"
ss -lunp | grep ':4242 ' || echo "4242 not listening"
实测输出:
no nebula unit
no nebula process
4242 not listening
如在其他节点也要卸载,同样先 disable --now 再删文件;删除 /etc/nebula 前确认 ca.key 是否还需保留(CA 私钥一旦删除,全网证书都要重新签发)。
十、参考链接
- 官方文档(安装/快速开始):https://nebula.defined.net/docs/
- 发布页(v1.11.2 资产与校验):https://github.com/slackhq/nebula/releases/tag/v1.11.2
- systemd 单元实践参考:https://nebula.defined.net/docs/guides/systemd/
- 站内相关:《Nebula VPN 1.11.2 介绍与选型指南》、《Nebula VPN 1.11.2 配置参数详解》、《Nebula VPN 1.11.2 常用 CLI 命令详解》(Nebula VPN 专栏)