hampusstrom.headscale
Ansibleロール: Headscale
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 ライセンス