Tailscale
関連記事
Tailscale は WireGuard の上に構築され、ピアがメッシュ ネットワークを構築するための OAuth2 (SSO)、OpenID、および SAML 認証を提供します。クロスプラットフォームであり、ACL 設定と内部 DNS があります。
インストール
tailscale をインストールし、システムを再起動してください。
tailscale を Docker コンテナとして実行することもできます。この方法では、1 台のマシン上で複数の exit node を実行でき、それぞれを独自の tailnet に所属させることができます。
システムトレイアプリケーション
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。
- trayscale — Tailscale CLI クライアント用の非公式 GUI ラッパー。
- tailscaledesktop — 非公式の Tailscale デスクトップアプリケーション。
- tailscale-systray-git — tailscale system tray menu の Linux 移植版。
使用方法
tailscale を使用するには、tailscaled.service を有効化/起動し、以下のようにサーバーを実行します:
# tailscale up
auth key を指定して、headless マシンを認証できます:
# tailscale up --authkey=tskey-KEY
/etc/default/tailscaledを編集してTS_NO_LOGS_NO_SUPPORT=trueを含める/etc/default/tailscaledを編集し、FLAGSに--no-logs-no-supportを追加する
高度な使用方法
カスタム 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.service と tailscaled.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.service が systemctl status で loaded ではなく active になっているか確認してください。