基于Headscale实现的具有WebUI的Tailscale控制服务器
注意 此版本可能与Headscale、Tailscale官方版本均有不兼容的情况,如需与官方版本并用需要考虑进行兼容性测试。
编译后直接运行程序即可。当前启动模型是:
- 进程启动后先只启动超管 cockpit,默认监听
8081端口;如需避免冲突,可在启动前设置环境变量,例如export MIRAGE_SYS_ADDR="127.0.0.1:18081" - cockpit 入口为
/cockpit,例如http://127.0.0.1:8081/cockpit/ - 首次启动因为还没有有效系统配置,控制器服务不会自动启动;需要先进入 cockpit 完成超级管理员绑定(WebAuthn)和基础配置
- cockpit 中基础配置有效后,控制器服务才会启动;默认控制器监听地址为
8080 - 要使控制器具备实际使用价值,至少需要在 cockpit 上配置服务域名;如需完整用户登录体验,通常还需要继续配置一种或多种第三方身份服务商
- 最新版本已经弃用了原本的 URL 读取外部 DERP 列表方式;为了连通性和可用性,建议在正式用户/租户登入前配置至少一条司南信息
仓库根目录现已提供顶层 Containerfile,可直接在本地 Podman 中构建 MirageServer:
cd /home/hao/A-1/MirageServer
podman build -t mirageserver-local -f ./Containerfile .
mkdir -p /tmp/mirageserver-data
podman run -d \
--name mirageserver-local \
-p 18081:8081 \
-p 18080:8080 \
-v /tmp/mirageserver-data:/var/lib/mirageserver \
localhost/mirageserver-local:latest当前已验证:
- 容器可以正常启动,日志会输出
Cockpit is ready on :8081 http://127.0.0.1:18081/cockpit/可返回200 OK- 在尚未通过 cockpit 完成基础配置并启动服务前,
18080控制器端口不会响应 - 挂载目录中会生成并保留
db.sqlite,容器删除后重建仍可复用该数据目录
建议的本地持久化约定:
db.sqlite:必须持久化,否则超管绑定和系统配置会在容器重建后丢失download/:如果要测试客户端发布/下载链路,也建议一并持久化
当前 Podman 本地测试的边界:
- 适合验证 cockpit、首次绑定、基础配置、服务启动、数据库持久化
- 不等于完整线上认证回归;当前用户侧登录、Dex/OIDC 回调、下载发布 URL 等多处仍依赖
https://<ServerURL>、真实域名和SecureCookie - 因此纯本地 HTTP 容器测试更适合作为部署烟测,而不是完整生产登录链路验证
Windows 客户端安装器资产已经存在于 MirageNavi 仓库中,当前主链路是:
mirageclient-win/build-installer.ps1mirageclient-win/MirageSetup.issmirageclient-win/service_install.go
当前已确认:
- 现有脚本会先生成 Windows 资源,再执行
GOOS=windows GOARCH=amd64 go build,最后调用 Inno Setup 生成安装器 - 在当前 Linux 主机上,已可交叉编译出 Windows
Mirage.exe - 但最终
setup.exe仍依赖 Windows 原生工具链(至少需要 PowerShell +ISCC.exe),因此最终安装器打包应在 Windows 主机或 Windows CI runner 上完成
当前 MirageServer 的 ACL 后端能力 与 Web UI 已暴露能力 不是一回事:
- 后端 policy 结构已经支持
groups、hosts、tagOwners、acls、tests、autoApprovers、ssh - 当前 Web UI / 管理 API 里真正完成并可直接操作的,主要还是标签管理
- 因此阅读下方功能进度时,应理解为:ACL 页签已经存在,但不代表 ACL 全部策略能力都已经完成可视化配置
- 系统零配置文件启动,页面初始化功能
- 超管驾驶舱
- 超管绑定/登录/登出
- 系统运行状态展示与控制
- 配置页
- 系统基本配置
- 三方服务配置【后续需要进行调整】
- 超管换绑
- 客户端版本发布
- 租户页
- 租户列表展示
- 删除租户
- 编辑租户(owner、provider、名称、magicDomain)
- 租户用量信息
- DERP页
- 全局DERP服务配置
- DERP服务自动化部署
- DERP详情页
- 用户页?
- 个人租户信息展示与管理?
- 系统日志页
- 注册与登录
- Google、Microsoft、GitHub、Apple账号登录
-
OIDC对接阿里云IDaaS登录【暂时弃用】 -
对接阿里云手机号注册【暂时弃用】 - 个人微信/QQ/微博登录
- 企业微信/钉钉对接登录
- 主界面框架与页头部用户基本信息展示、登出
- 设备页签
- 设备列表信息展示
- 单个设备详情页展示
- 设备IP复制与设备控制菜单展示
- 修改设备名
- 启/停用设备密钥过期
- 编辑设备子网路由
- 删除设备
- 编辑设备ACL标签
- 客户端版本更新提示
- 分享设备
- 服务页签【暂不考虑】
- 用户页签
- 用户列表展示
- 管理员身份转移/添加
- 更多种类角色划分编辑
- 用户设备筛查
- 用户冻结
- ACL页签(当前主要完成标签管理,非完整 ACL 可视化管理)
- 标签管理
- 群组管理
- 别名管理?
- ACL规则条目编辑
- 其他后端已支持能力的 UI 暴露(如 auto-approvers / ssh / tests 等)
- DNS页签
- 基本信息展示
- 启/停用MagicDNS
- 启/停用Override Local
- 添加全球域名服务器
- 添加split域名服务器
- 修改/删除域名服务器
- Basedomain解绑用户名以及可修改
- Split域名服务器可调整顺序
-
DNS厂商预植【暂不考虑】 -
HTTPS证书(BETA)【暂不考虑】 -
NextDNS支持【暂不考虑】
- DERP页签
- 组织DERP列表展示
- 组织DERP列表基本操作接口
- 全局DERP的区别展示
- 全局DERP区域的禁用操作
- 设置页签
- 通用设置 (暂时不处理设备需预授权开关)
- 组织名称
- 身份提供商
- 设备默认秘钥过期时长
- 账单及用量显示
- 密钥管理
- 授权密钥管理【需要考量这个与用户绑定关系】
-
API密钥管理【暂不考虑】
- 特性功能开关
-
webhook【暂不考虑】 -
OAuth Client【暂不考虑】
- 通用设置 (暂时不处理设备需预授权开关)
- 组织切分及身份源管理
- 按组织划分最终用户
- 组织管理员配置
- DNS、ACL及其他有关系统配置归属至组织
-
日志页签【暂不考虑】 -
i18n【暂不考虑】 -
前后端分离【是否有必要?】【暂不考虑】
感谢Tailscale、Headscale及开源社区的共同努力。













