安装与部署

系统要求#

自建协调服务器(可选)Linux x86-64 / arm64,512 MB 内存足够;需要一个大家都访问得到的地址
节点Linux、macOS(Windows 与移动端见下)
网络节点出方向 UDP 可用最佳;完全不通 UDP 时会走中继,功能不受影响

编译与获取#

Celium 是纯 Go 程序,没有 cgo 依赖。你可以直接编译:

bash
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 可使用官方签名软件源。首次使用先添加与系统版本对应的软件源,再安装:

bash
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.gpgstable/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 切换到按版本划分的路径。

安装包包含 celiumceliumdceliumd.service,安装后自动启用并启动守护进程。通过普通用户的 sudo 安装时,该用户可以直接使用 celium up;如果由 root 或自动化系统安装,则用 sudo celium up。软件源公钥只授权给 pkgs.celium.cn,不会变成系统所有软件源的通用信任密钥。

需要手动升级时运行:

bash
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#

bash
sudo install -m 0755 celiumd celium /usr/local/bin/
sudo celiumd

从终端以 sudo 启动时,调用用户可直接执行 celium up;机器密钥仍保存在 root 私有的状态目录。

macOS 上守护进程会创建 utun 接口,需要 root。用户态模式不需要任何权限:

bash
celiumd --tun=userspace --userspace-proxy=127.0.0.1:1080

权限:两种数据面#

模式权限谁能用上这张网
TUN(默认)需要 root机器上的所有程序:整机路由,和直连内网一样
用户态不需要支持代理的程序:守护进程会开一个本地 SOCKS5 端口

用户态模式是容器、CI、以及没有 root 的环境里的实用选择:协议栈在进程内运行,程序通过--userspace-proxy 给出的本地代理访问内网。

bash
celiumd --tun=userspace --userspace-proxy=127.0.0.1:1080
curl --socks5-hostname 127.0.0.1:1080 http://db-1:5432

协调服务器#

bash
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)——移动端的主要工作量在这一层,而不是协议本身。目前可用的替代方案是用户态模式加本地代理。