コンテンツにスキップ

Tailscale

提供: ArchWiki
2026年5月28日 (木) 19:04時点におけるKusanaginoturugi (トーク | 投稿記録)による版 (記事を更新)
(差分) ← 古い版 | 最新版 (差分) | 新しい版 → (差分)

関連記事

Tailscale は WireGuard の上に構築され、ピアがメッシュ ネットワークを構築するための OAuth2 (SSO)、OpenID、および SAML 認証を提供します。クロスプラットフォームであり、ACL 設定と内部 DNS があります。

インストール

tailscaleインストールし、システムを再起動してください。

tailscale を Docker コンテナとして実行することもできます。この方法では、1 台のマシン上で複数の exit node を実行でき、それぞれを独自の tailnet に所属させることができます。

システムトレイアプリケーション

ノート この機能は現在 beta です。

v1.88 で導入され、tailscale には systray アプリケーションが同梱されています。systray を起動するには、以下を実行してください:

$ tailscale systray

起動時に systray を実行するには、systemd ユーザーサービスとして以下を実行するか:

$ tailscale configure systray --enable-startup=systemd

または freedesktop autostart ファイルを使用します:

$ tailscale configure systray --enable-startup=freedesktop

詳細は tailscale の公式ドキュメント を参照してください。

サードパーティクライアント

  • KTailctl — Tailscale を監視および管理する GUI。
https://github.com/f-koehler/KTailctl || ktailctlAUR
  • trayscale — Tailscale CLI クライアント用の非公式 GUI ラッパー。
https://github.com/DeedleFake/trayscale || trayscaleAUR
  • tailscaledesktop — 非公式の Tailscale デスクトップアプリケーション。
https://gitlab.com/tailscaledesktop/application || tailscaledesktopAUR
  • tailscale-systray-git — tailscale system tray menu の Linux 移植版。
https://github.com/mattn/tailscale-systray || tailscale-systray-gitAUR

使用方法

tailscale を使用するには、tailscaled.service有効化/起動し、以下のようにサーバーを実行します:

# tailscale up

auth key を指定して、headless マシンを認証できます:

# tailscale up --authkey=tskey-KEY
ノート デフォルトでは、tailscale は ログをサーバーに送信し、中央ストレージに保存します。以下のいずれかの手順で opt out できます:
  • /etc/default/tailscaled を編集して TS_NO_LOGS_NO_SUPPORT=true を含める
  • /etc/default/tailscaled を編集し、FLAGS--no-logs-no-support を追加する
中央ログを opt out すると、Tailscale から技術サポートを受けられない場合があります。

高度な使用方法

カスタム Control Server を使用する

headscale のようなカスタム control server を使用できます。

ログインするには、以下を実行します:

# tailscale up --login-server https://example.com

headless システムでは、token を使用した非対話ログインが可能です。

# tailscale up --login-server https://example.com --authkey your_auth_key

headscale.service起動した後、以下のコマンドで user と auth-key を作成できます:

# headscale users create USER -e email@example.com
# headscale users list
# headscale preauthkeys create -u <ID> --reusable

ユーザー間で node を共有する

policy を含むファイルを作成します:

{
 "tagOwners": {
   "tag:shared": ["user1@"]
 },
 "groups": {
   "group:all": ["user1@", "user2@", "user3@"]
 },
 "acls": [
   {
     "action": "accept",
     "src": ["group:all"],
     "dst": ["tag:shared:*"]
   }
 ]
}

config.yaml でこのファイルを指定します:

policy:
 mode: file
 path: "/etc/headscale/policy.json"

tag を advertise します:

 tailscale up --advertise-tags=tag:shared --login-server=https://headscale.localdomain/
 

nextcloud または別の OIDC provider との統合

nextcloud-app-oidcAUR をインストールして client key を作成し、redirection uri として https://headscale.localdomain/oidc/callback を使用します。

以下の snippet を config.yaml に追加します:

oidc:
 issuer: "https://cloud.example.com"
 client_id: "<client-id>"
 client_secret: "<client-secret>"
 scope: ["openid", "profile", "email"]
 user_map:
   name: "preferred_username"
   email: "email"

Docker コンテナとして実行する

tailscale を Docker コンテナとして実行する一般的な方法については、このガイド に従ってください。

exit node として

Docker コンテナとして実行している tailscale インスタンスを exit node として使用できるようにするには、コンテナのネットワークで小さい MTU を使用する必要があります。これは MTU 関連の問題 が原因です。

まだ作成していない場合は、カスタムネットワークを作成します:

# docker network create --opt com.docket.network.driver.mtu=1280 my_custom_network

次に、そのネットワークをコンテナインスタンスで使用します:

# docker run --detach --name=my_tailscale_container --network=my_custom_network --volume /var/lib/tailscale-exitnode-1:/var/lib/tailscale --env TS_STATE_DIR=/var/lib/tailscale --env TS_USERSPACE=1 --env TS_AUTHKEY=tskey-auth-XXX --env TS_EXTRA_ARGS='--advertise-exit-node' tailscale/tailscale

注意点:

  • デフォルトでは、docker は bridge 型のネットワークを作成するため、ここで指定する必要はありません。
  • node の認証には auth key を使用してください。通常の SSO 方式で認証すると時間がかかりすぎ、初回認証が成功する前に process が timeout する場合があります。
  • TS_USERSPACE=1 を定義すると、コンテナに昇格権限 (CAP_NET_ADMIN および CAP_NET_RAW) が不要になります。
  • ホスト上の未使用ディレクトリ (/var/lib/tailscale-exitnode-1) をコンテナ内の /var/lib/tailscale に bind mount し、さらに TS_STATE_DIR=/var/lib/tailscale を定義してください。これにより、tailscale は永続的な state file を使用します。これらがない場合、exit node は状態を保持するために volatile memory を使用するため、コンテナを再起動するたびに新しい ID と tailnet IP アドレスを取得します [1]

ヒントとテクニック

NetworkManager と併用する

NetworkManager を使用している場合、tailnet 内の他のデバイスとの接続に問題が発生する場合があります。これは NetworkManager と tailscaled の間で発生する管理競合が原因です。

これを解消するには、NetworkManager が tailscale ネットワークデバイス (例: tailscale0) を管理しないようにする必要があります。

そのためには、/etc/NetworkManager/conf.d/99-tailscale.conf のような config を作成し、以下の内容を記述します:

[keyfile]
unmanaged-devices=interface-name:tailscale0

その後、NetworkManager.servicetailscaled.service再起動してください。

tailscale を一度切り替える必要がある場合もあります:

# tailscale down
# tailscale up

これで、tailnet 上の他のデバイスに ping できるようになるはずです。

Magic DNS

Tailscale は、tailnet 設定から DNS server と search suffixes を設定するために、正常に動作する systemd-resolved を備えたシステムを想定しています。そうでない場合、/etc/resolv.conf上書きしようとします

セキュリティ強化

Tailscale は専用のユーザーで、動作に必要な capabilities のみを持って実行するようにできます。詳細は 公式 knowledge base article を参照してください。

トラブルシューティング

起動時に Tailscale がクラッシュする

tailscaled.service を起動した後、クラッシュして restart loop に陥る場合があります。これは tun kernel module が存在しないことが原因である可能性があります。実際にこれが原因か確認するには、systemd 経由で tailscaled.service のログを確認します:

# systemctl status tailscaled.service

または、terminal で root として binary を実行します:

# /usr/sbin/tailscaled

以下のような、または類似したエラーが systemctl status または binary の実行時に表示される場合があります:

...is CONFIG_TUN enabled in your kernel? modprobe tun failed with: modprobe: FATAL: Module tun not found in directory /lib/modules/5.17.4-arch1-1 kernel/drivers/net/tun.ko found on disk, but not for current kernel; are you in middle of a system update and haven't rebooted? found: /lib/modules/5.17.8-arch1-1/kernel/drivers/net/tun.ko.zst wgengine.NewUserspaceEngine(tun "tailscale0") error: tstun.New("tailscale0"): no such device

その場合は、単にシステムを再起動し、tailscaled.servicesystemctl status で loaded ではなく active になっているか確認してください。

参照