简体中文
安全
中枢、被控端和客户端各以什么身份运行,谁能连进中枢,密钥和密码存在哪,中枢往外连哪些地方,都列在这一页。
为什么是 root
中枢要改防火墙、装软件包、启动和停止系统服务,所以以 root 运行。macOS 上它是 root 的 LaunchDaemon,Windows 上它是以 SYSTEM 运行的服务。被控端要替中枢装模块、管服务,也以同样的身份运行。
Linux 上,中枢的 systemd 单元收窄了 root 能做的事。
- 它不能再提权,setuid 程序也不能给它更多权限。
- 它不能创建 setuid 或 setgid 文件。
- 它只能用自己用到的五类套接字。
- 它不能改系统时钟,也不能用实时调度。
macOS 和 Windows 上没有这样的服务单元,中枢以完整的 root 或 SYSTEM 权限运行。
面板不存这台电脑的 sudo 密码。面板里存的 sudo 密码属于受管设备,只经 SSH 用在那台设备上。
VS Code 和 CloudCLI 以它们服务的那个账户运行。浏览器拿到它们的令牌,也只能碰到这个账户的文件。终端默认以 root 开 shell,可以在终端模块里换成别的账户。客户端以你自己的账户运行,在 Android 上就是这个应用本身。
8443 开在外面时谁能进来
- 手机和笔记本上的客户端、别的机器上的被控端,都只连中枢的 8443。直连、SSH 中继和虚拟网都通到这一个端口,所以对外要守的只有它。
- 加入中枢要一条面板生成的链接,只有登录面板的人能生成。链接里有中枢证书的指纹和一张票据,票据 30 分钟内有效,只能用一次。
- 加入时,中枢发给设备一个令牌。之后每次连接,设备先核对中枢证书的指纹,对上了才发出令牌。
- 中枢关掉连上来 3 秒还不发数据的连接(Windows 上是 10 秒),也关掉 30 秒内没通过令牌核对的连接。没加入的连接同时最多 128 个。
- 60 秒内有 30 次加入失败时,中枢暂停新的加入,直到最早那次失败超过 60 秒。已加入的设备照常连接。
- 客户端只能打开 客户端 页允许它的那几类服务,终端也是其中一类。在那一页停用或删除一个客户端,它开着的终端和连接立即关闭。
- 直连只在网口上开 8443 这一个端口。面板、AI 网关和其他端口,仍然只在 网络 页 开放范围 里的网络上应答。
- 客户端链接里还带着加入虚拟网的材料,也就是 NetBird 的 setup key 或 EasyTier 网络的密钥。在 外部访问 页换掉它们之前,用过的链接还能加入虚拟网,但拿不到令牌。
面板
面板默认用 HTTP,只在 开放范围 里的网络上应答。在 设置 页可以 开启 HTTPS。证书由中枢自己的证书颁发机构签发,这个颁发机构只给私有地址、CGNAT 地址和几个私有名字签证书。浏览器装上它,信任的范围也只到这些地址。
面板密码只存 scrypt 哈希。连续输错密码后,登录页显示 多次失败后已锁定。 在中枢上运行 sudo nhub unlock 解除,Windows 上在管理员 PowerShell 里运行 nhub unlock。重启机器也会解除锁定。
密钥和密码存在哪
| 存的是什么 | 存在哪 | 怎么保护 |
|---|---|---|
| SSH 密钥、登录信息、令牌,AI 提供方的 API 密钥也存成令牌 | 保险库,配置目录下的 credentials/vault.json | AES-256-GCM 整个加密,名字和种类也看不到;数据密钥用保险库口令包着 |
| 解开保险库的数据密钥 | 状态目录下的 vault.key | 只有 root 能读;Windows 上只有 SYSTEM 和管理员能读 |
| 面板密码 | 配置目录下的 web/settings.json | 只存 scrypt 哈希 |
| AI 网关发给客户端的密钥 | 配置目录下的 cliproxyapi/cliproxyapi.json | 用保险库的数据密钥封存 |
| AI 订阅账号的登录文件 | 状态目录下的 cliproxyapi/auth/ | 只在这台电脑上,备份里没有;恢复备份后重新登录 |
Linux 上,配置目录是 /etc/neutrino/hub,状态目录是 /var/lib/neutrino/hub。macOS 和 Windows 上的位置,见卸载的最后一节。
保险库口令护的是备份:备份配置目录得到的文件里,密钥都是加密的,拿到这份文件的人没有口令打不开。中枢这台电脑上的 root 能解开保险库,因为数据密钥就在状态目录里。
中枢往外连哪里
| 什么时候 | 连到哪 |
|---|---|
在 设置 页检查更新,或运行 nhub update | 完整版连 GitHub,国内版连 Gitee |
| 装 CloudCLI | Node.js 和 npm 包:完整版连 nodejs.org 和 npmjs.org,国内版连 npmmirror |
| 装 code-server | 完整版连 GitHub,国内版连中国科学技术大学的镜像 |
| 机器的 AI 工具第一次用到 cc-switch | 完整版连 GitHub,国内版连微子自己在 Gitee 上的发布 |
| 装其他模块 | 各模块的发布方 |
| 开着 NetBird、EasyTier 或 SSH 中继 | NetBird 的管理服务器、EasyTier 控制台或碰头点、你的中继服务器 |
| AI 网关转发请求 | 你加的提供方,或订阅账号所属的服务 |
| 代理开着 | 你的出口节点 |
| Linux 上第一次打开 NetBird、EasyTier、代理或 AI 网关 | 这个程序在 GitHub 上的发布页;要装的系统包来自系统的软件源 |
| 在 代理 页选择 更新 geodata | GitHub 上 v2fly 的 geoip 和 geosite 发布 |
| 代理测量出口节点 | 经每个节点连 探测地址(probe URL);参照地址(reference URL) 直接连,默认是 www.msftconnecttest.com |
| 容器 模块列出镜像的标签 | Docker Hub |
装模块时,有的文件由中枢下载后转给被控端,有的由装模块的那台机器自己下载。这台电脑自己的 DNS 解析、时间同步一类系统服务归操作系统管,不在这张表里。
卸载
把微子从机器上拿掉的做法,见卸载。
