headscale多租户改造,ACL、路由、DNS等全隔离

之前我写过一篇 headscale 无限扩展 的文章,关于如何对 headscale 进行 集群化改造,使其设备的接入能力近乎无限。

核心思路就是将每个 headscale 实例赋予一个 client_id, 然后所有的 实例共用一个数据库或数据库集群

headscale 系列:组建 headscale 集群,把设备接入能力做成“无限接近无限”

今天我来跟大家分享下 如何对单实例的 headscale 进行多租户改造(可能讲解的内容不多,主要是部分成果展示)。

多租户改造

headscale 原本是单实例、单tailnet 的,要想实现在单个实例中创建多个tailnet,关键点是我们要隔离租户的 ACL、tailnet、路由、DNS等。

tailnet

每个租户都拥有独立的 tailnet ,初始地址池保持默认:10.64.0.0/10 。 也可以进行自定义,将地址池改成 192.168.6.0/24,具体看我们的需求。

程序里保留了 default 租户,如果没有多租户需求的用户,可以保持之前使用 headscale 的习惯,所有用户会自动归类到 default 租户。

ACL

每个租户都是独立完整的 ACL,可以使用原有完整的 ACL 功能。

路由

每个租户的路由也是独立的,可进行单独的配置。

MagicDNS

主机 FQDN 使用 hostname.<tenant_key>.<dns.base_domain> 格式,其中 dns.base_domain 是所有租户共用的。

default 租户 使用 default 子域名。

CLI

命令行工具都进行了改造,使其支持租户功能, -t 指定租户。

中继服务器

每个租户可以使用 共用的中继服务器,也可以自己设定独立的中继服务器 与其它租户完全隔离。

图片示例

程序中新增了 tenant 字段,用户区分租户。

users

node

node-t