こんにちは。GSです。
今日はリモートワークやプライベートのネットワーク等を色々と便利にしてくれるTailscaleというVPNサービスを紹介します。
Tailscaleってなに?→VPNサービスです
Tailscaleは、VPN(仮想プライベートネットワーク)サービスです。
他のVPNサービスと比較して
- WireGuardによる高速で信頼性のあるネットワークを簡単に作れる
- 多くのデバイスに対応
- ユーザー側の設定がものすごく簡単
といったような特徴があります。個人的に「Tailscaleがすごい」と感じる点は、Webサイトにログインするのと同じぐらい簡単にVPNを構築し、参加できることです。またTailscaleだからこそというわけではないですが、WireGuardというVPNプロトコルの快適さにも驚かされます。Tailscaleは独自のアプリケーションをVPNの上に載せています。たとえば、クライアント間のファイル転送などです。こうした小さな機能やVPNの管理がとても便利だと感じ、それらの機能を使う際に、クライアント側で面倒なことはないことがTailscaleの特徴だと思います。
Tailscaleを使用したリモートワークでどんな事ができる?
リモートワークには様々な問題があります。Tailscaleはそういった問題を解決するためのツールになります。たとえば
- リモートデバッグ: Tailscaleを使用することで、リモートのデバッグ環境を構築し、リモートのチームメンバーと共にデバッグをすることができます。
- リモートアクセス: Tailscaleを使用することで、リモートのサーバーやデバイスにアクセスし、遠隔操作をすることができます。
- リモートログイン: Tailscaleを使用することで、リモートのサーバーにログインし、作業をすることができます。
- ネットワーク障害の回避: Tailscaleは、一つのVPN接続で、複数のエンドポイントにアクセスすることができるため、ネットワーク障害が発生した場合でも、別のルートを使用してアクセスすることができます。
- セキュリティ対策: Tailscaleは、暗号化された接続を使用し、リモートアクセス時のセキュリティリスクを軽減します。
- 統一管理: Tailscaleを使用することで、リモートのネットワーク環境を統一管理することができ、複数のオフィスやリモートワーカーにアクセスすることができる。
これらはあくまで一例であり、導入によって解決できる問題は、状況やTaiscaleのプランによって変わります。
参考:リモートワークはシェアオフィスを活用「ナレッジソサエティ」
例:リモートワークで働くチームでプログラムの動作確認をする
以下に例をあげます。
- Aさん: 新幹線の中でノートPCを使って、next.jsを使用したWebフロントアプリをローカルで開発中。現在デバッグしていて「http://localhost:3000」でアプリにアクセスしています。
- Bさん: 在宅ワーク中。
- Cさん: 出社中。
このような状況で、「AさんのノートPCで実行中のプログラム」にBさん、Cさんが直接アクセス(http://AさんのPC:3000/)して触ってみることはどうすればできるでしょうか?
この問題はTailscaleを使用すれば簡単に解決できます。
- A/B/CそれぞれのPCにTailscaleをインストールし、ログインします(有料プランを使用し、複数のユーザーが参加できることを想定しています)
- Aはインターネットに接続するために、何らかの通信手段(テザリングなど)を使用します
この2点を満たした時点で、Bさん、Cさんは(除外設定がない限り)AさんのPCにアクセスすることができます。有料プランでは、ACLによる設定が可能なので、Aさん、Bさん、Cさんを同じグループ(部署や課)にまとめ、他のユーザーからのアクセスを制限することもできます(ACL samples · Tailscale)。設定はHuJSONというファイルで記述することで行えますが、REST APIによる制御も可能なので、社内の人事システムと繋げてACLを定義することもできるのではないでしょうか?
セットアップからインストールまで
無料アカウントを使用したセットアップからインストールまでの手順を説明します。
Tailscaleトップページからアカウント作成
Tailscaleのページから「Use Tailscale for free」をクリックし、アカウントを作成します。
現在、メールアドレスでの登録ができないようですので、手元にあるGoogle / Microsoft / Github のアカウントのいずれかを使用してサインアップしましょう。
クライアントのインストールと初期設定
サインアップ後、チュートリアル画面が表示されます。使用するプラットフォームに応じたクライアントをダウンロードしてインストールしましょう。
AndroidやiOSはストアアプリからダウンロードできます。クライアント(デバイス)がここに表示されていない場合でも利用できる可能性があります。たとえば「家にあるNASはSynologyではなくQNAPなのだけど」といった場合は、tailscale/tailscale-qpkg: Package Tailscale client in QPKG (github.com)を使用し、QNAP用のTailscaleをビルドし、利用することができます。また、「クラウド環境(AWSやGCPなど)に導入したい」など、利用用途によって異なることもあるかと思います。こうした情報はTailscaleのIntegrationsページに掲載されています。インストールを1台に行った時点で、ステップ 2 に進みます。ここでは、次のデバイスを待っているため、2 台目にインストールしてみましょう。
すると、1 台目と 2 台目が接続されているようなグラフが表示されます。「Success, it works!」を押して完了しましょう。
これでチュートリアルは終わりです。
「Go to the admin console」を押すことで、Tailscaleの管理コンソールにアクセスすることができます。
動作確認
ここまでで行ったことは、
- アカウントサインアップ(ソーシャルログインでボタンを押すだけ)
- デバイス1へのクライアントアプリのインストールとログイン
- デバイス2へのクライアントアプリのインストールとログイン
の3点だけですが、この時点でデバイス1とデバイス2はVPNで接続されています。接続されているデバイスの情報はタスクトレイやメニューバーのTailscaleアイコンから確認することができます。
「マシン1」と「マシン2」の部分には、Tailscale上でのマシン名が表示されています。 「マシン1」と「マシン2」の間で、VPN接続ができているかを確認するために、pingを使ってみましょう。
❯ ping マシン1
PING マシン1.tailXXXX.ts.net (100.xx.xx.xx): 56 data bytes
64 bytes from 100.xx.xx.xx: icmp_seq=0 ttl=64 time=54.531 ms
といったように、pingコマンドを使って疎通確認をすることで、「マシン1」と「マシン2」はVPN接続されている状態であることが証明できます(疎通確認されるマシン側にpingの通信ブロックの設定がないことを前提にしています)。ドメイン名を省略し、マシン名だけで接続できる機能は「MagicDNS」と呼ばれ、Tailscaleの機能の一つで、デフォルトで有効になっています。接続に使用しているマシン名やドメイン名(tailXXXX.ts.netの部分)は管理コンソールから変更可能です。
「マシン名だけでアクセスできるのなら、ドメイン名を気にする必要はないのでは?」と思うかもしれませんが、ドメイン名は「他のTailscaleユーザー」からアクセス(Share機能)する場合に必要になります。example1という名前のマシンにアクセスする場合、他のTailscaleユーザー(異なるTeamのユーザー)は「example1.tailXXXX.ts.net」といった形でアクセスする必要があります。「A社にあるマシンZに対し、B社のユーザーYさんがアクセス」という場合を考えると、A社のドメインとB社のドメインが異なっていることが明らかです。そのため、ユーザーYさんがマシンZにアクセスするためには、ドメイン名を省略せずに指定する必要があることがわかります。
自動的にログアウトしないように設定する
Tailscaleに参加したマシンは180日経過すると自動的にログアウトします。これは、セキュリティのために接続に使用する鍵が180日で有効期限が切れるように設定されているためです。
個人のパソコンの場合は、180日ごとに再ログインでも問題はないでしょうが、AWSやGCP上のホストや特定のコンテナ内部にアクセスするためにTailscaleを使うといった場合、自動的なログアウトはアクセス不可能になってしまう可能性があります。そのような場合には、管理コンソールで「Disable key expiry」を選択して、自動ログアウトを無効にすることができます。
「subnet router」機能で、Tailscaleを利用しているマシンのサブネットにアクセスする
Tailscaleの「subnet router」機能は、Tailscaleがインストールされたデバイスのサブネットにアクセスできる機能です。これにより、アクセスしたいデバイスに対して、Tailscaleのインストールが必要なくなります。例えば、24時間稼働しているデバイスにTailscaleをインストールし、外出先から自宅にあるプリンタや他の機器にアクセスする場合などに有用です。設定は簡単で、「subnet router」機能を受け入れるTailscaleのインストール済みデバイス上で、適切なコマンドを実行するだけです。
sudo tailscale up --advertise-routes=192.168.1.0/24
「–advertise-routes」部分に、Tailscaleからアクセスさせたいサブネットを指定する形ですね。設定後、管理コンソールでは、そのマシンに「Subnets」というラベルが付いており、所属しているサブネットアドレスも確認できます。
該当マシンのメニューから「Edit route settings…」を開きます。
ダイアログで「Subnet routes」にある該当サブネットチェックし有効にしましょう。
あとは、アクセス元の機器(例えばスマートフォン)から接続するだけです。
例えば「192.168.1.X 上の Web 画面を開きたい」という場合は「http(s)://192.168.1.X」にアクセスし、ssh 接続したい場合は「ssh 192.168.1.X」で接続できます。
「subnet router」の機能を使用すれば、支店間のネットワークなども簡単に作成できます。また、自宅のPCから支店Aのデバイスやマシンにアクセスすることも容易になります。ここにACLを適用すれば、細かい制御も可能ですし、外出先からの接続を許可しない機器、支店ネットワークからのアクセスのみを許可するホストなどに接続する場合にも有効です。
さらに、「外部に公開されていないホストにアクセスしなければならないスマートフォンアプリのデバッグを、自宅ネットワークから実機(iPhone/Androidデバイス)で行いたい」といったような単純ではないケースの場合も簡単に環境構築できます。
Tailscaleを利用しているマシンをエンドポイント(デフォルトゲートウェイ)にする
企業では、外出先やリモートワークでの直接インターネットアクセスを許可したくないといった場合がよくあると思います。このような場合に役立つのが「exit nodes」機能です。この機能は「subnet router」機能と同様に、Tailscaleがインストールされたマシン上で以下のようなコマンドを実行することで使用できます。
sudo tailscale up --advertise-exit-node
管理コンソール、該当マシンのメニューより「Edit route settings…」を開きます。
ダイアログで「Exit node」にある「Use as exit node」をチェックし有効にしましょう。
あとは「Exit Nodeを経由したいマシン側」で、Exit Nodeに設定したいマシンを選択します。
この設定により、すべての通信はExit Nodeを経由します。ただし、このままではマシンのローカルネットワークにもアクセスできなくなってしまいます。「Allow Local Network Access」にチェックを入れることで、ローカル環境への接続だけはExit Nodeを経由しないように設定することができます。
Tailscaleおすすめの使い方
ssh鍵の設定を任せる
Tailscaleを使うことで、ssh接続に必要な鍵の管理をTailscaleに任せることができます。これは、「terraform等で構築したクラウド環境にTailscaleを導入し、ssh接続したい」といったケースに特に役立ちます。
sudo tailscale up --ssh
で、鍵管理が有効になります。管理コンソールよりACLを設定することで、sshアクセス制御も可能です。
マシンに紐づく証明書を発行させる
Tailscaleをインストールしたマシンで、HTTPS接続を行いたい場合には、そのマシンに必要な証明書をTailscaleから発行することができます。それには、
tailscale cert マシン名.Tailscaleドメイン.ts.net
というコマンドを実行します。これによって、実行したディレクトリに証明書が生成されます。特に開発用マシンにSSL接続を行いたい場合などに便利です。
WSL2にインストールしてssh接続
Windows上のWSL2は、インストールされたマシンから使うことが主だと考えられますが、Tailscaleを導入することで、どこからでもアクセスできるLinuxにすることができます。
ルーターにインストールして外出先から自宅へアクセス
ルーターにTailscaleをインストールすることで、外出先からいつでも自宅にアクセスすることができるようになります。しかし、ルーターにTailscaleをインストールすること自体がハードルの高い作業です。このハードルを超えるための選択肢としてOpenWrtが搭載された製品を使うということが挙げられます。OpenWrt搭載ルーターにTailscaleをインストールすることは簡単にできます。
またOpenWrtを搭載したポータブルルーターを持ち歩くことで、マシンにTailscaleをインストールすることなく、Tailscaleネットワークに接続することもできます。
まとめ
Tailscaleは設定が簡単で、ネットワークに関する多くの問題を簡単に解決できるため、プライベートからビジネス利用までおすすめできます。また、Tailscaleは日々進化しており、例えばこの記事を書いている時点で「Tailscale Funnel」という機能がベータ版としてリリースされています。この機能により、Tailscale内のマシンをインターネット上に公開することができます。この機能は多くの使い方が考えられるため非常に有望なものだと感じます。ngrokの代わりに使ったり、CDNのオリジンに設定しサーバー公開するなどにも使えそうです。
ただし、これらの機能はVPNの範囲を超えており、利用しすぎるとベンダーロックインされてしまうかもしれません。このあたりは注意が必要だと感じました。
おまけ
Tailscale的なものをセルフホストする
WireGuardはオープンなプロトコルであり、Tailscaleと同じような機能を提供するOSS製品も存在します。
https://github.com/juanfont/headscale
https://github.com/gravitl/netmaker
headscaleは
An open source, self-hosted implementation of the Tailscale control server.
と書いてあるので、Tailscaleの代替として使用できるように設計されているようです。Tailscaleのアプリをそのまま使用することはできますが、クライアント側アプリの設定変更が必要なため、Tailscaleの「簡単な設定」を得ることはできません。
<おすすめ記事・メディア>