hampusstrom.headscale

Ansibleロール: Headscale

CI

Headscaleをインストールおよび設定するためのAnsibleロールです。Headscaleは、オープンソースで自己ホストできるTailscaleコントロールサーバーの実装です。

素晴らしいので、ぜひチェックしてください: juanfont/Headscale

免責事項

このプロジェクトの作者は、HeadscaleプロジェクトやTailscale Inc.とは一切関係ありません。

このソフトウェアは「現状有姿」で提供されており、明示的または暗黙的な保証は一切ありません。商業性、特定の目的への適合性、および非侵害の保証を含むがこれに限定されません。著者は、このソフトウェアやその使用または他の取引に関して生じた請求、損害、またはその他の責任には一切責任を負いません。

自己責任で使用してください

互換性

このロールは以下のプラットフォームでテストされています:

  • CentOS 8 x64
  • Debian 10 x64
  • Debian 11 x64
  • Ubuntu Server 20.04 x64
  • Ubuntu Server 22.04 x64

インストール

ansible-galaxy

ansible-galaxy install hampusstrom.headscale

手動インストール

現在のユーザーのみ:

git clone https://github.com/hampusstrom/ansible-role-headscale.git ~/.ansible/roles/hampusstrom.headscale

システム全体:

git clone https://github.com/hampusstrom/ansible-role-headscale.git /etc/ansible/roles/hampusstrom.headscale

必要要件

このロールには特別な要件はなく、Ansible、Headscale、systemdが動作する場所で動作します。

GitHub API

このロールはGitHub APIを使用します。

GitHub APIはリクエスト制限があります。

認証されていないユーザーは、1時間あたり60リクエストしか許可されていません。

開発者の場合、簡単にこの制限に達することがあるかもしれません。

これを回避するためには、以下から個人アクセストークンを取得できます: https://github.com/settings/tokens/new

アクセストークンの詳細をheadscale_github_api_*変数に入力してください。

headscale_github_api_username: あなたのGitHubログインユーザー名

headscale_github_api_password: あなたの個人アクセストークン

headscale_github_api_auth: true

初期化システム: systemd

ルートが必要: はい

ルートが必要なため、become: yesがグローバルに定義されたプレイブックでこのロールを使用するか、become: yesキーワードを使用してこのロールを呼び出してください。

- hosts: headscale
  become: yes
  roles:
    - role: hampusstrom.headscale

# または

- hosts: headscale
  roles:
    - role: hampusstrom.headscale
      become: yes

ロール変数

利用可能なすべての変数の完全な説明は、defaults/main.yamlに記載されています。

変数名の規則

このロールに関連する変数は常にheadscale_で始まります。

headscale_version

ターゲットマシンにダウンロードおよびインストールするHeadscaleのバージョンを定義します。 バージョン番号('v'プレフィックスなし)またはlatestのいずれかです。

最新は自動的にjuanfont/headscale GitHubリポジトリから最新のリリースタグを取得します。

デフォルト: latest

headscale_config

Headscale config.yamlファイルの内容をYAMLオブジェクトとして表現します。 デフォルトの設定をHeadscaleプロジェクトで確認してインスピレーションを得てください。 執筆時点で、Headscaleのバージョン0.20.0には以下の最小値が必要です。

headscale_config:
  server_url: "http://127.0.0.1:8080"
  listen_addr: 127.0.0.1:8080
  private_key_path: "{{ headscale_lib_dir_path }}/private.key"
  db_type: sqlite3
  unix_socket: "{{ headscale_run_dir_path }}/headscale.sock"
  ip_prefixes:
    - 100.64.0.0/10
  noise:
    private_key_path: "{{ headscale_lib_dir_path }}/noise_private.key"

headscale_acl

Headscale acl.yamlファイルの内容をYAMLオブジェクトとして表現します。

headscale_github_repository

Headscaleバイナリを検索およびダウンロードするために使用するユーザー/リポジトリを定義します。 たとえば、フォークのインストールを許可するために、別のリポジトリに変更できます。

デフォルト: juanfont/headscale

headscale_remove_unmanaged_users

trueに設定すると、headscale_usersで指定されていないユーザーは永続的に削除されます。

自己責任で使用してください

デフォルト: false

headscale_users

作成すべきユーザーのリストで、headscale_remove_unmanaged_usersと一緒に使用する場合は削除されません。

デフォルト: []

headscale_binary_path

Headscaleバイナリがダウンロードおよびインストールされる場所を定義します。

デフォルト: /usr/local/bin/headscale

headscale_user_name

Headscale systemdデーモンを実行するシステムユーザーの名前を定義します。 まだ存在しない場合は作成されます。

デフォルト: headscale

headscale_user_group

headscale_user_nameユーザーの主グループの名前を定義します。

デフォルト: {{ headscale_user_name }}

headscale_user_uid

headscale_user_nameユーザーのユーザーIDを定義します。

デフォルト: 777

headscale_user_gid

headscale_user_groupグループのグループIDを定義します。

デフォルト: {{ headscale_user_uid }}

headscale_etc_dir_path

Headscaleの構成データが配置されるパスを定義します。 通常は変更する必要はありませんが、一部のカスタム構成/フォーク用にオプションがあります。

デフォルト: /etc/headscale

headscale_lib_dir_path

Headscaleのライブラリデータが配置されるパスを定義します。 通常は変更する必要はありませんが、一部のカスタム構成/フォーク用にオプションがあります。

デフォルト: /var/lib/headscale

headscale_run_dir_path

HeadscaleのUNIXソケットが配置されるパスを定義します。 通常は変更する必要はありませんが、一部のカスタム構成/フォーク用にオプションがあります。 unix_socket設定エントリは、このディレクトリ内の.sockファイルを指す必要があります。 例: unix_socket: /var/run/headscale/headscale.sock

デフォルト: /var/run/headscale

headscale_db_path

SQLiteデータベースファイルのパス。

デフォルト: {{ headscale_lib_dir_path }}/db.sqlite

headscale_backup_dir_path

データベースバックアップを保存するパス。 バックアップは、Headscaleのアップグレードの前に自動的に作成されます。 Headscaleをダウングレードする場合は、データベースを復元することを強くお勧めします。 これを行うには、Headscaleを停止し、dbファイルをheadscale_db_pathにコピーして、Headscaleを再起動します。

デフォルト: {{ headscale_lib_dir_path }}/backups

例プレイブック

常に公式のHeadscaleドキュメントを確認して、あなたのバージョンのHeadscaleに必要なすべての値が正しく設定されていることを確認してください。 公式の設定例をコピーして、設定の基本として使用することを強くお勧めします。

---
---
# コマンドで実行:
# ansible-playbook -i "yourinventoryfile" -K example-playbook.yml
- hosts: all
  become: yes
  vars:
    headscale_version: 0.20.0
    headscale_config:
    # Headscaleは、以下の順序で`config.yaml`(または`config.json`)という名前の設定ファイルを探します:
    #
    # - `/etc/headscale`
    # - `~/.headscale`
    # - 現在の作業ディレクトリ

    # クライアントが接続するURL。
    # 通常、これは次のようなドメインになります:
    #
    # https://myheadscale.example.com:443
    #
    server_url: http://127.0.0.1:8080

    # サーバーがリッスンする/バインドするアドレス
    #
    # 本番環境では:
    # listen_addr: 0.0.0.0:8080
    listen_addr: 127.0.0.1:8080

    # /metricsのためにリッスンするアドレス、内部ネットワークにこのエンドポイントをプライベートに保つことをお勧めします
    #
    metrics_listen_addr: 127.0.0.1:9090

    # gRPCのリッスンアドレス。
    # gRPCは、ヘッドスケールサーバーをCLIからリモートで制御するために使用されます。
    # 注意: リモートアクセスは有効な証明書が必要です。
    #
    # 本番環境では:
    # grpc_listen_addr: 0.0.0.0:50443
    grpc_listen_addr: 127.0.0.1:50443

    # gRPC管理インターフェースをINSECUREモードで実行することを許可します。
    # トラフィックが暗号化されないため、お勧めできません。知っている場合のみ有効にしてください。
    grpc_allow_insecure: false

    # HeadscaleとTailscaleクライアント間のトラフィックを暗号化するために使用される秘密鍵。
    # 秘密鍵ファイルが欠落している場合は自動生成されます。
    #
    # 本番環境では:
    # /var/lib/headscale/private.key
    private_key_path: ./private.key

    # Noiseセクションには、TS2021 Noiseプロトコルの特定の設定が含まれています。
    noise:
      # Noiseの秘密鍵は、HeadscaleとTailscaleクライアント間のトラフィックを暗号化するために使用されます。
      # これは、従来の秘密鍵とは異なる必要があります。
      #
      # 本番環境では:
      # private_key_path: /var/lib/headscale/noise_private.key
      private_key_path: ./noise_private.key

    # Tailscaleアドレスを割り当てるためのIPプレフィックスのリスト。
    # 各プレフィックスは、IPv4またはIPv6アドレスと関連するプレフィックスの長さから構成されており、スラッシュで区切られています。
    # この値は任意ではなく、TailscaleクライアントがサポートするIP範囲内である必要があります。
    # IPv6: https://github.com/tailscale/tailscale/blob/22ebb25e833264f58d7c3f534a8b166894a89536/net/tsaddr/tsaddr.go#LL81C52-L81C71
    # IPv4: https://github.com/tailscale/tailscale/blob/22ebb25e833264f58d7c3f534a8b166894a89536/net/tsaddr/tsaddr.go#L33
    ip_prefixes:
      - fd7a:115c:a1e0::/48
      - 100.64.0.0/10

    # DERPは、直接接続が確立できない場合にTailscaleが使用する中継システムです。
    # https://tailscale.com/blog/how-tailscale-works/#encrypted-tcp-relays-derp
    #
    # Headscaleは、クライアントに提示できるDERPサーバーのリストを必要とします。
    derp:
      server:
        # 有効にすると、埋め込まれたDERPサーバーを実行し、残りのDERP設定に統合します。
        # 上で定義されたHeadscale server_urlはHTTPSを使用している必要があります。DERPはTLSを必要とします。
        enabled: false

        # 埋め込まれたDERPサーバーに使用するリージョンID。
        # リージョンIDが通常のDERP設定から取得された他のリージョンIDと衝突する場合は、ローカルDERPが優先されます。
        region_id: 999

        # リージョンコードと名前は、Tailscale UIにおいてDERPリージョンを識別するために表示されます。
        region_code: "headscale"
        region_name: "Headscale Embedded DERP"

        # NATトラバーサルを支援するためにSTUN接続のために設定されたアドレスでUDPでリッスンします。
        # 埋め込まれたDERPサーバーが有効な場合、stun_listen_addrを設定する必要があります。
        #
        # これがどのように機能するかの詳細については、この記事をチェックしてください: https://tailscale.com/blog/how-tailscale-works/
        stun_listen_addr: "0.0.0.0:3478"

      # 外部で利用可能なDERPマップのリストをJSON形式でエンコード
      urls:
        - https://controlplane.tailscale.com/derpmap/default

      # YAML形式でエンコードされたローカルで利用可能なDERPマップファイル
      #
      # このオプションは、独自のDERPサーバーをホストする人々にとって主に興味深いものです:
      # https://tailscale.com/kb/1118/custom-derp-servers/
      #
      # paths:
      #   - /etc/headscale/derp-example.yaml
      paths: []

      # 有効にすると、指定されたソースを定期的に更新してderpmapを更新するためのワーカーが設定されます。
      auto_update_enabled: true

      # どのくらいの頻度でDERPの更新を確認するか?
      update_frequency: 24h

    # 起動時にHeadscaleの更新確認を自動的に無効にします
    disable_check_updates: false

    # 非アクティブなエフェメラルノードが削除されるまでの時間は?
    ephemeral_node_inactivity_timeout: 30m

    # Tailnet内のノードの更新を確認する期間。値が低すぎると、HeadscaleのCPU使用率が大幅に影響を受けます。
    # 値が高すぎる場合(60秒を超える)、ノードには十分に頻繁に更新やキープアライブメッセージが届かず、問題が発生します。
    # 疑問がある場合は、デフォルトの10秒を触らないでください。
    node_update_check_interval: 10s

    # SQLite設定
    db_type: sqlite3

    # 本番環境では:
    # db_path: /var/lib/headscale/db.sqlite
    db_path: ./db.sqlite

    # # Postgres設定
    # Postgresに接続するためにUnixソケットを使用する場合、'host'フィールドにソケットパスを設定し、'port'は空白のままにします。
    # db_type: postgres
    # db_host: localhost
    # db_port: 5432
    # db_name: headscale
    # db_user: foo
    # db_pass: bar

    # 他の'sslmode'が'require(true)'および'disabled(false)'の代わりに必要な場合は、'db_ssl'フィールドに必要な'sslmode'を設定してください。
    # https://www.postgresql.org/docs/current/libpq-ssl.htmlの表34.1を参照してください。
    # db_ssl: false

    ### TLS設定
    #
    ## Let's Encrypt / ACME
    #
    # Headscaleは、Let's Encryptを使用してドメインのTLSを自動的にリクエストしたり設定したりすることをサポートしています。
    #
    # ACMEディレクトリのURL
    acme_url: https://acme-v02.api.letsencrypt.org/directory

    # ACMEプロバイダーに登録するためのメール
    acme_email: ""

    # TLS証明書をリクエストするドメイン名:
    tls_letsencrypt_hostname: ""

    # letsencryptに必要な証明書とメタデータを保存するパス
    # 本番環境では:
    # tls_letsencrypt_cache_dir: /var/lib/headscale/cache
    tls_letsencrypt_cache_dir: ./cache

    # 使用するACMEチャレンジのタイプ、現在サポートされているタイプ:
    # HTTP-01またはTLS-ALPN-01
    # 詳細については[docs/tls.md](docs/tls.md)を参照してください。
    tls_letsencrypt_challenge_type: HTTP-01
    # HTTP-01チャレンジが選択された場合、letsencryptは
    # 検証エンドポイントを設定する必要があり、リッスンされます:
    # :http = ポート80
    tls_letsencrypt_listen: ":http"

    ## 既に定義された証明書を使用します:
    tls_cert_path: ""
    tls_key_path: ""

    log:
      # ログの出力形式: textまたはjson
      format: text
      level: info

    # ACLポリシーが含まれるファイルへのパス。
    # ACLはYAMLまたはHUJSONで定義できます。
    # https://tailscale.com/kb/1018/acls/
    acl_policy_path: ""

    ## DNS
    #
    # HeadscaleはTailscaleのDNS設定とMagicDNSをサポートしています。
    # 概念をより理解するために、彼らのKBを見てください:
    #
    # - https://tailscale.com/kb/1054/dns/
    # - https://tailscale.com/kb/1081/magicdns/
    # - https://tailscale.com/blog/2021-09-private-dns-with-magicdns/
    #
    dns_config:
      # Headscaleが提供するDNSを使用するか、ローカルを使用することを優先するか。
      override_local_dns: true

      # クライアントに公開するDNSサーバーのリスト。
      nameservers:
        - 1.1.1.1

      # NextDNS(https://tailscale.com/kb/1218/nextdns/を参照)。
      # "abc123"はNextDNSの例IDで、あなたのものに置き換えてください。
      #
      # メタデータ共有ありの場合:
      # nameservers:
      #   - https://dns.nextdns.io/abc123
      #
      # メタデータ共有なしの場合:
      # nameservers:
      #   - 2a07:a8c0::ab:c123
      #   - 2a07:a8c1::ab:c123

      # Split DNS(https://tailscale.com/kb/1054/dns/を参照)、
      # 各ドメインの検索ドメインとクエリするDNSのリスト。
      #
      # restricted_nameservers:
      #   foo.bar.com:
      #     - 1.1.1.1
      #   darp.headscale.net:
      #     - 1.1.1.1
      #     - 8.8.8.8

      # 注入する検索ドメインのリスト。
      domains: []

      # 追加のDNSレコード
      # 現在、Aレコードのみがサポートされています(tailscale側で)。
      # 制限についてはhttps://github.com/juanfont/headscale/blob/main/docs/dns-records.md#Limitationsを参照してください。
      # extra_records:
      #   - name: "grafana.myvpn.example.com"
      #     type: "A"
      #     value: "100.64.0.3"
      #
      #   # 一行にまとめることもできます
      #   - { name: "prometheus.myvpn.example.com", type: "A", value: "100.64.0.3" }

      # [MagicDNS](https://tailscale.com/kb/1081/magicdns/)を使用するか。
      # 少なくとも1つのネームサーバーが定義されている場合にのみ機能します。
      magic_dns: true

      # MagicDNSのホスト名を作成するための基本ドメインを定義します。
      # `base_domain`はFQDNで、末尾のドットは含まない必要があります。
      # ホストのFQDNは
      # `hostname.user.base_domain`(例:_myhost.myuser.example.com_)となります。
      base_domain: example.com

    # 認証なしでCLIが接続するために使用するUnixソケット
    # 注意: 本番環境では、これを次のようなものに設定することをお勧めします:
    # unix_socket: /var/run/headscale.sock
    unix_socket: ./headscale.sock
    unix_socket_permission: "0770"
    #
    # Headscaleは実験的なOpenID接続サポートをサポートしています。
    # 現在テスト中で、バグがある可能性があります。テストを手伝ってください。
    # OpenID Connect
    # oidc:
    #   only_start_if_oidc_is_available: true
    #   issuer: "https://your-oidc.issuer.com/path"
    #   client_id: "your-oidc-client-id"
    #   client_secret: "your-oidc-client-secret"
    #   # または、`client_secret_path`を設定してファイルから秘密を読み取ります。
    #   # 環境変数を解決し、systemdの`LoadCredential`との統合が簡単になります:
    #   client_secret_path: "${CREDENTIALS_DIRECTORY}/oidc_client_secret"
    #   # client_secretとclient_secret_pathは排他的です。
    #
    #   # ノードがOpenIDで認証されてからの有効期限を指定します。
    #   # 値を「0」に設定すると、有効期限はなくなります。
    #   expiry: 180d
    #
    #   # ユーザーがログインしたときに受け取ったトークンからの有効期限を使用するか。
    #   # これは通常、再認証が頻繁に必要となり、知っている場合以外は有効にしないでください。
    #   # 注意: これを有効にすると、`oidc.expiry`が無視されます。
    #   use_expiry_from_token: false
    #
    #   # OIDCフローで使用するスコープをカスタマイズします。デフォルトは"openid"、"profile"、"email"であり、クエリパラメータを追加できます。
    #   scope: ["openid", "profile", "email", "custom"]
    #   extra_params:
    #     domain_hint: example.com
    #
    #   # 許可されるドメインやユーザーのリスト。
    #   # 認証されたユーザーのドメインがこのリストにない場合、認証要求は拒否されます。
    #
    #   allowed_domains:
    #     - example.com
    #   # 注意: keycloakからのグループには先頭に'/'があります。
    #   allowed_groups:
    #     - /headscale
    #   allowed_users:
    #     - [email protected]
    #
    #   # `strip_email_domain`が`true`に設定されている場合、ユーザー名のメールアドレス部分が削除されます。
    #   # これにより、`[email protected]`がユーザー`first-name.last-name`に変換されます。
    #   # `strip_email_domain`が`false`に設定されている場合、ドメイン部分は削除されないため、次のようなユーザーになります。
    #   ユーザー: `first-name.last-name.example.com`
    #
    #   strip_email_domain: true

    # Logtailの設定
    # LogtailはTailscaleのログと監査のインフラストラクチャで、コントロールパネルは
    # Tailscaleノードにリモートサーバーにアクティビティをログするよう指示できます。
    logtail:
      # このHeadscaleクライアントに対してlogtailを有効にします。
      # 現在、Headscale内でログサーバーをオーバーライドすることはサポートされていないため、これは
      # デフォルトで無効です。これを有効にすると、クライアントはTailscale Inc.にログを送信します。
      enabled: false

    # このオプションを有効にすると、デバイスはWireGuardトラフィックに対して
    # デフォルトの静的ポート41641ではなくランダムポートを優先します。このオプションは
    # 一部のバグのあるファイアウォールデバイスに対する回避策です。詳細はhttps://tailscale.com/kb/1181/firewalls/を参照してください。
    randomize_client_port: false

  roles:
    - hampusstrom.headscale

タグ

install

Headscaleとそのネームスペースの完全なインストールと設定。

configure

構成ファイルまたはsystemdユニットファイルのみを更新します。

users

ネームスペースのみを設定します。

ライセンス

MIT ライセンス

プロジェクトについて

Deploys Headscale, An open source, self-hosted implementation of the Tailscale control server.

インストール
ansible-galaxy install hampusstrom.headscale
ライセンス
mit
ダウンロード
97
所有者