Tailscaleロゴ

デバイスを他のユーザーと共有する

最終検証日:
翻訳: 竹洞 陽一郎

デバイスの共有は、すべてのプランで利用できます。
この機能は現在ベータ版です。

デバイスの共有を使うと、自社のtailnetの外にいる相手に対して、特定のマシンへのアクセスだけを許可できます。
インターネットへ公開する必要はありません。
共有された相手がアクセスできるのは、共有したマシンのみで、tailnet内の他のマシンには到達できません。
自社のユーザーは、これまでどおりアクセス制御ポリシーに従います。共有の仕組みが適用されるのは、外部のユーザーに対してだけです。

マシンを他のユーザーと共有する

この操作には、tailnetのOwner、Admin、またはIT adminのロールが必要です。

  1. 管理コンソールのMachinesページを開きます。
  2. メールまたはリンクで招待を送ります。
  3. 相手が承諾するのを待ちます。

相手が承諾すると、そのマシンは相手のTailscaleクライアントと管理コンソールに表示され、自身のtailnetのマシンと同じように扱えます(macOSのメニューバー、Linuxのtailscale statusなどにも表示されます)。

メールで共有する

相手には1回限りの招待リンクが送られます。ログインに使うメールアドレスが、招待したアドレスと一致していなくても承諾できます。

  1. 対象のマシンの三点メニューからShareを選択します。
  2. Share by emailのタブを選択します。
  3. 相手のメールアドレスを追加します。
  4. Shareを選択して招待を送信します。

1回限りのリンクと、繰り返し使えるリンク(最大1,000回)を選べます。いずれも未使用のまま30日が経過すると期限切れになります。

  1. 対象のマシンの三点メニューからShareを選択します。
  2. Copy invite linkのタブを選択します。
  3. 必要に応じてReusable linkを有効にします。
  4. Copy share linkを選択します。
  5. コピーしたリンクを相手に渡します。

招待リンクは、パスワードと同じ扱いをしてください。
そのリンクは、tailnet内のマシンへ接続する権限を与えるものです。

相手の承諾を待つ

招待を承諾するには、相手が自身のtailnetのOwner、Admin、またはIT adminである必要があります。
相手が招待リンクを開いて内容を確認し、承諾すると、共有したマシンのShareのダイアログに相手のプロフィール画像とメールアドレスが表示されます。
管理コンソールでは、どのマシンが外部と共有されているかを確認できます。

招待を取り消す

この操作には、Owner、Admin、またはIT adminのロールが必要です。

  1. 管理コンソールのMachinesページを開きます。
  2. 対象のマシンのShareを開きます。
  3. 三点メニューからRevoke inviteを選択します。

取り消すと、相手はアクセスできなくなります。
再びアクセスを許可するには、新しい招待を作成し、相手が改めて承諾する必要があります。

共有の仕組み

共有したマシンへアクセスできるのは、招待した特定のユーザーだけです。
そのユーザーが属するtailnetの他のユーザーからは見えません。

相手のtailnetに公開される情報は、次の範囲に限られます。

隔離

共有されたマシンは、既定で隔離されます。
共有先のtailnetからの接続には応答できますが、自ら接続を開始することはできません。
これにより、共有先のtailnetにリスクを持ち込むことなく、既定で安全な状態のまま共有を受け入れられます。

共有とMagicDNS

MagicDNSは、tailnetごとに動作します。
共有されたマシンは、v1.4以降でMagicDNSに対応しています。

共有されたマシンには、完全修飾ドメイン名でのみ到達できます。

<hostname>.<tailnet-name>.ts.net

たとえば、yak-bebopというtailnetにあるminecraft-serverという名前のマシンは、minecraft-server.yak-bebop.ts.netとしてアクセスします。
短い名前のminecraft-serverでは到達できません。
これは、MagicDNSの名前が予期せず変わることを防ぎ、共有機能の上に将来の機能を実装できるようにするための制約です。

.beta.tailscale.netの名前は、2024年9月13日にサポートが終了しました。.ts.net形式へ移行してください。

共有とアクセス制御ポリシー

共有先の相手は、共有されたマシンへ接続できます。この接続は、共有元のtailnetのアクセス制御ポリシーに従います。
一方、共有されたマシンは既定で隔離されているため、共有先のマシンへ自ら接続することはできません。
双方でマシンを共有し合うことで、相互にアクセスできる構成にすることもできます。

アクセスルールでは、相手のメールアドレスを直接指定できます。

"grants": [
  {
    "src": ["group:admins"],
    "dst": ["*"],
    "ip": ["*"]
  },
  {
    "src": ["alice@example.com"],
    "dst": ["100.74.78.2"],
    "ip": ["*"]
  }
]

"src": ["*"]のような記述には注意してください。
これは、招待した外部のユーザーを含め、tailnetへアクセスできるすべての相手に適用されます。

メールアドレスを事前に把握せずにルールを書きたい場合は、招待したユーザー全員が自動的に含まれるautogroup:sharedを使えます。

"grants": [
  {
    "src": ["group:admins"],
    "dst": ["*"],
    "ip": ["*"]
  },
  {
    "src": ["autogroup:shared"],
    "dst": ["*"],
    "ip": ["80", "443"]
  }
]

招待したユーザーがアクセスできるのは、共有したマシンだけです。
アクセスルールは、その範囲をさらに絞り込むために使います。

共有では、タグの情報は相手のtailnetへ公開されません。
タグの情報はすべて除去され、相手のtailnetポリシーファイルでは使用できません。

ポリシーの編集には、ビジュアルポリシーエディタも使えます。
操作方法については、ビジュアルエディタリファレンスを参照してください。

共有ではなくtailnetへ招待する

共有では、隔離、サブネットルート、タグなどに制約があります。
相手を自社のtailnetのユーザーとして扱いたい場合は、共有ではなくtailnetへ招待する方法があります。
この場合、相手はアクセス制御ポリシーの対象となり、サブネットルーター経由のアクセスやデバイスポスチャの条件も適用できます。
手順は、任意のユーザーを招待するを参照してください。

共有とサブネットルーター

共有されたマシンは、共有先のtailnetに対してサブネットをアドバタイズしません。
外部のユーザーを自社のtailnetへ招待した場合は、サブネットルーターへのアクセスも与えられます。

共有とExit Node

Exit Nodeを共有すると、そのExit Nodeは相手のtailnetから利用できるようになります。

  1. 対象のマシンをExit Nodeとしてアドバタイズします。
  2. autoApproversを使っていない場合は、管理コンソールでExit Nodeを許可します。
  3. 上記の手順でマシンを共有します。その際、「Allow use as an exit node」を有効にします。

停止・削除されたユーザーと共有

ユーザーを削除すると、そのユーザーが管理していた共有マシンも削除されます。
ユーザーを停止した場合は、そのユーザーが管理していた共有マシンから他のマシンへの接続ができなくなります。
詳細は、ユーザーの削除と停止を参照してください。

共有とTailnet Lock

Tailnet Lockが有効なtailnetへ共有されたノードは、署名されるまで利用できません。
招待を承諾する側のユーザーも、共有されたノードへアクセスする前に、自身のノードがそのtailnetで署名されている必要があります。

トラブルシューティング

共有されたマシンへ接続できない場合は、次の点を確認してください。

  1. 100.x.y.zのアドレスではなくマシン名でアクセスしている場合は、MagicDNSが有効になっているかを確認します。
    管理コンソールのDNSページから有効にできます。
  2. 自身のtailnetのアクセス制御ポリシーに、接続を遮断するルールがないかを確認します。
    見当たらない場合は、共有元の側で制限している可能性があるため、共有元にポリシーの確認を依頼してください。

原文:Share your machines with other users(Tailscale公式ドキュメント)