Headplane 管理 Headscale 笔记

Headplane 管理 Headscale 笔记

IT, 其他

Headscale 是一个开源实现版的 Tailscale 控制器,但是它一直没有官方的 WebUI 管理界面,使用体验远不如 Tailscale 官方实现。目前根据 Viz 的推荐,我开始使用 Headplane 管理 Headscale。Headplane 最佳的使用方式是直接使用 Docker,它可以更好的控制 Headscale 进程,达到动态载入 DNS,ACL 策略的功能。我也尝试将裸机安装的 Headscale 迁移到 Docker 中。

备份 Headscale 配置

Headscale 的配置较为简单,默认设置下只有 /etc/headscale//var/lib/headscale/ 两个目录。前者是 Headscale 的设置,后者是 Headscale 的 sqlite 数据库和密匙。

准备文件

使用 Docker 版 Headplane 需要:

.
├── docker-compose.yml
├── headplane-config
│   └── config.yaml
├── headplane-data
│   └── users.json
├── headscale-config
│   ├── acls.json
│   ├── config.yaml
│   ├── derp.yaml
│   └── dns_records.json
└── headscale-data
    ├── db.sqlite
    ├── db.sqlite-shm
    ├── db.sqlite-wal
    ├── noise_private.key
    └── private.key
  • Docker Compose 配置文件 docker-compose.yml
  • 原始 Headscale 的配置文件夹 /etc/headscale/ ←对应→headscale-config
  • 原始 Headscale 的数据文件夹 /var/lib/headscale/ ←对应→headscale-data
  • Headplane 配置文件 headplane-config/config.yaml
  • Docker Compose 的配置参考如下

    services:
      headplane:
        # I recommend you pin the version to a specific release
        image: ghcr.io/tale/headplane:0.6.0
        container_name: headplane
        restart: unless-stopped
        ports:
          - '127.0.0.1:3003:3000'
        volumes:
          - './headplane-config/config.yaml:/etc/headplane/config.yaml'
          # This should match headscale.config_path in your config.yaml
          - './headscale-config/config.yaml:/etc/headscale/config.yaml'
    
          # If using dns.extra_records in Headscale (recommended), this should
          # match the headscale.dns_records_path in your config.yaml
          - './headscale-config/dns_records.json:/etc/headscale/dns_records.json'
    
          # Headplane stores its data in this directory
          - './headplane-data:/var/lib/headplane'
    
          # If you are using the Docker integration, mount the Docker socket
          - '/var/run/docker.sock:/var/run/docker.sock:ro'
      headscale:
        image: headscale/headscale:0.26.1
        container_name: headscale
        restart: unless-stopped
        command: serve
        labels:
          # This is needed for Headplane to find it and signal it
          me.tale.headplane.target: headscale
        ports:
          - '127.0.0.1:8080:8080'
          - '3478:3478'
        volumes:
          - './headscale-data:/var/lib/headscale'
          - './headscale-config:/etc/headscale'
    

    根据需求修改 headplane-config/config.yaml,必须配置的内容是 cookie_secret。

    server:
      host: "0.0.0.0"
      port: 3000
      cookie_secret: ""
      cookie_secure: true
    
    headscale:
      url: "http://headscale:8080"
      config_path: "/etc/headscale/config.yaml"
      config_strict: true
    
    integration:
      docker:
        enabled: true
        container_label: "me.tale.headplane.target=headscale"
        socket: "unix:///var/run/docker.sock"
    

    修改 headscale-config/config.yaml :

    listen_addr: 0.0.0.0:8080
    policy:
      mode: database
    

    由于使用 Docker,需要监听所有的 IP 地址,并且 ACL 使用 database 模式

    启动 Headplane

    上述文件准备完成后即可启动 Headplane/Headscale

    docker compose pull
    docker compose up -d
    

    如果已经在 headscale 中配置过 apikey 此时就可以在 Headplane 中输入 apikey 配置 Headscale。如果此时没有 apikey,则可运行:

    docker compose exec headscale headscale apikeys create --expiration 999d
    

    如果配置正确的话,你现在就可以在 Headplane 的 WebUI 中看到你的全部 Tailscale 节点。切换到 ACL 选项卡,重新将先前的 acls.json 中的内容粘贴到窗口中并保存。

    *为 Headplane/Headscale 配置 OIDC

    OIDC(OpenID Connect)是开放授权(OAuth)2.0 的一种扩展,它可以为 Headplane 和 Headscale 提供 SSO 单点登录功能以取代使用 key 注册机器/登录面板的功能。它能够通过 OIDC 提供商的配置直接管理哪些用户被允许登录到 Headscale,并且可以分配不同的权限,例如管理员,或者仅能够管理自己节点的用户。

    首先需要根据官方文档设置 OIDC 提供商的权限,最基本的权限是openid , profile, email email会被直接用于 Headscale 的用户名。你需要为 Headplane 和 Headscale 分别设置 oidc client,分别设置 Callback URL /oidc/callback 用于 Headscale,/admin/oidc/callback 用于 Headplane。

    首次注册新的客户端时,就可以使用 OIDC 直接登录账户。

    Amefs, EFS, IT
    上一篇文章
    Git-LFS 使用记录

    发表回复

    您的邮箱地址不会被公开。 必填项已用 * 标注

    Fill out this field
    Fill out this field
    请输入有效的邮箱地址。

    这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理

    keyboard_arrow_up