安装与部署
系统要求#
| 自建协调服务器(可选) | Linux x86-64 / arm64,512 MB 内存足够;需要一个大家都访问得到的地址 |
| 节点 | Linux、macOS(Windows 与移动端见下) |
| 网络 | 节点出方向 UDP 可用最佳;完全不通 UDP 时会走中继,功能不受影响 |
编译与获取#
Celium 是纯 Go 程序,没有 cgo 依赖。你可以直接编译:
git clone <仓库地址> && cd celium
make build # 产出 bin/celium、bin/celiumd、bin/celium-control三个二进制各自的分工:
| 二进制 | 跑在哪里 | 作用 |
|---|---|---|
celium-control | 一台服务器 | 协调服务器:账号、节点注册、地址分配、策略、中继 |
celiumd | 每台机器 | 守护进程:持有密钥、维护隧道、提供本地 API |
celium | 每台机器 | 命令行,通过本地 socket 驱动 celiumd |
Linux:APT 安装#
Debian/Ubuntu 的 amd64、arm64 可使用官方签名软件源。首次使用先添加与系统版本对应的软件源,再安装:
set -o pipefail
. /etc/os-release
sudo mkdir -p -m 0755 /usr/share/keyrings
curl -fsSL "https://pkgs.celium.cn/stable/$ID/$VERSION_CODENAME.noarmor.gpg" | sudo tee /usr/share/keyrings/celium-archive-keyring.gpg >/dev/null
curl -fsSL "https://pkgs.celium.cn/stable/$ID/$VERSION_CODENAME.celium-keyring.list" | sudo tee /etc/apt/sources.list.d/celium.list
sudo apt-get update
sudo apt-get install celium
celium up例如 Ubuntu 16.04 使用 stable/ubuntu/xenial.noarmor.gpg 和 stable/ubuntu/xenial.celium-keyring.list。当前提供 Ubuntu xenial、bionic、focal、jammy、noble、questing、resolute,以及 Debian bullseye、bookworm、trixie。其他发行版或派生版请先确认它对应的 Ubuntu/Debian 版本,再使用对应目录和代号。
当前软件源公钥指纹为 CD5D B4FE 435D EA1C 6657 87CE 527C 7DFE 0EBB 0603。你可以用 gpg --show-keys --fingerprint /usr/share/keyrings/celium-archive-keyring.gpg 核对。已有的旧版 https://pkgs.celium.cn/ stable main 软件源继续可用;重新执行上述命令会把 /etc/apt/sources.list.d/celium.list 切换到按版本划分的路径。
安装包包含 celium、celiumd 和 celiumd.service,安装后自动启用并启动守护进程。通过普通用户的 sudo 安装时,该用户可以直接使用 celium up;如果由 root 或自动化系统安装,则用 sudo celium up。软件源公钥只授权给 pkgs.celium.cn,不会变成系统所有软件源的通用信任密钥。
需要手动升级时运行:
celium update它通过 sudo 运行 apt-get update,然后只升级 celium 包;升级会短暂重启守护进程。也可直接运行 sudo apt-get install --only-upgrade celium。
手动部署二进制时,仍可执行 sudo install -m 0755 celiumd celium /usr/local/bin/,随后用 sudo celiumd 启动。注意 /usr/local/bin 通常排在 /usr/bin 前面;若从手动部署迁移到 APT,请先移走旧二进制,避免继续运行旧版本。
macOS#
sudo install -m 0755 celiumd celium /usr/local/bin/
sudo celiumd从终端以 sudo 启动时,调用用户可直接执行 celium up;机器密钥仍保存在 root 私有的状态目录。
macOS 上守护进程会创建 utun 接口,需要 root。用户态模式不需要任何权限:
celiumd --tun=userspace --userspace-proxy=127.0.0.1:1080权限:两种数据面#
| 模式 | 权限 | 谁能用上这张网 |
|---|---|---|
| TUN(默认) | 需要 root | 机器上的所有程序:整机路由,和直连内网一样 |
| 用户态 | 不需要 | 支持代理的程序:守护进程会开一个本地 SOCKS5 端口 |
用户态模式是容器、CI、以及没有 root 的环境里的实用选择:协议栈在进程内运行,程序通过--userspace-proxy 给出的本地代理访问内网。
celiumd --tun=userspace --userspace-proxy=127.0.0.1:1080
curl --socks5-hostname 127.0.0.1:1080 http://db-1:5432协调服务器#
celium-control \
--domain=vpn.example.com \
--listen=:8080 \
--tls-cert=/etc/letsencrypt/live/vpn.example.com/fullchain.pem \
--tls-key=/etc/letsencrypt/live/vpn.example.com/privkey.pem \
--derp --derp-hostname=derp.example.com| 参数 | 说明 | |
|---|---|---|
--domain | 这张网的名字,也是内网域名的后缀 | |
--listen | 监听地址。放在反向代理后面时用 127.0.0.1:8080 | |
--tls-cert / --tls-key | 直接提供 TLS;不提供则以明文运行(只适合本机测试) | |
--derp | 同时运行中继,省掉单独部署 | |
| `--auth=dev\ | authkey` | 节点入网是否需要凭据。authkey 是正式用法;dev 只用于本机实验 |
--login-url | 设备授权页的外部地址,例如 https://login.example.com | |
--require-approval | 新机器需要管理员批准后才出现在网络里 |
关于控制公钥:它保存在状态目录的 control.key 里,服务器每次启动都会打印。它的公开部分被所有节点 pin 住,所以不要在已有部署上重新生成——那等于让每个节点都拒绝这台服务器。
备份#
协调服务器的状态目录(默认 /var/lib/celium-control,或你指定的 --statedir)就是整个部署的身份:账号、节点、地址分配、策略、控制密钥。备份它一个目录即可。
节点的状态目录(默认 root 下 /var/lib/celium,普通用户下 ~/.celium)保存机器密钥、节点密钥、偏好与会话。机器密钥决定设备身份,丢了会被服务器当成一台新设备;节点密钥每次启动都会轮换,丢了没有影响。
Windows 与移动端#
Windows 的 Wintun 接口路径已完成交叉编译,仍需在 Windows 实机验证并制作安装包。Android 与 iOS 复用同一份 Go 核心,需要接入系统的 VPN 框架(Android VpnService、iOS NEPacketTunnelProvider)——移动端的主要工作量在这一层,而不是协议本身。目前可用的替代方案是用户态模式加本地代理。