Tailscale VPN を使ってみたので感想

この記事は最終更新日から1年以上が経過しています。情報が古くなっている可能性があります。

最近某所で話題になっていた Tailscale VPN が気になったので、試しに使ってみました。

結論から言うと、めちゃくちゃおすすめです(大塚明夫ボイス)。
特に今まで VPN 環境を作って外出先から自宅の端末にアクセスしたかったけど難しくてできなかった、といった方にはうってつけです。

元々私はネットワーク方面に関してあまり詳しくないので、一部誤った認識の記述があるかもしれません。あらかじめご了承ください。

Sponsored Link

Tailscale VPN とは何か

VPN には、

  • アメリカなど海外にある VPN サーバーに接続し、それ経由でインターネットに接続することで通信元を秘匿したり、海外 IP に変えないとアクセスできないサイトにアクセスする
  • VPN 環境を自分で構築し、外出先や職場などから自宅にある PC やスマホにアクセスする

という 2 種類のニュアンスがあるように感じています。
どちらも VPN という技術を使っている事には変わりありませんが、目的が大きく異なります。
このうち、Tailscale は後者にあたるサービスです。

前者のようなサービスとは利用目的が異なります。
また、Tailscale は P2P 型の VPN で、VPN サーバーを提供するサービスではありません(後述)。

前者は NordVPN などが有名で、ほとんどが有料ですが、ぶっちゃけ金を積めさえすれば簡単に構築できると思います(言い方…)。プロキシの高機能版みたいな用途です。

一方、後者に関しては一筋縄ではいきません。
自宅に高性能なルーター機器をお持ちの方ならルーターの VPN 機能をオンにすればいけるかもしれませんが、そもそも VPN 機能のついていないルーターでは使えませんし、設定手順も(少なくとも、技術に精通していないユーザーにとっては)煩雑で難しいでしょう。

あとは自宅にある PC やラズパイに OpenVPN サーバーを立て、ルーターのポート転送設定をいじればできるかもしれません。…が、いずれもネットワーク関連の知識がなければ難しいです。
また、V6プラス(MAP-E)といった IPv4 アドレスを複数のユーザーで共有しているようなネットワーク環境では、自宅に VPN サーバーを立てるのはより難しくなります。

というわけで、外出先から自宅の PC にアクセスしたい場合、一番手軽な手順として、これまでは Chrome リモートデスクトップを使って画面ごと操作するという手法が取られてくることが多かったように思います。
実際、リモートデスクトップしたいだけならそれでもいいのですが、「外出先から自宅の PC でリッスン中の開発サーバーにアクセスしたい」みたいな用途には使えません。

… そういった煩雑な手順を極力排除し、クライアントをインストールしてログインするだけで使えるようになるのが、この Tailscale の魅力です。

私の家のネット回線はV6プラスです。そのため、自宅に VPN サーバーを立てることができません。
そこで、借りている VPS に OpenVPN サーバーを立てた上で、家のデバイスに OpenVPN クライアントと接続設定ファイルをインストールし、常時 VPS に立てた VPN サーバーに接続しておくことで、ようやく外出先から家の端末にアクセスすることができました。
ただ、構築時に書いた記事 を見ていただければ分かる通り、VPN サーバーの導入方法が非常に煩雑です。導入当時は相当苦戦した記憶がありますし、設定項目も難解で初見殺しだと思います。

また、Tailscale は WireGuard というオープンソースの VPN ソフトを使っていて、また P2P 型の VPN になっています。
つまり、 VPN サーバーが存在せず、通信が Tailscale のサーバーを通ることもありません
NAT超えができない特殊なネットワーク用に一応プロキシはあるらしいですが、極力使わなくて良いように構築されているみたいです

Tailscale は接続用の鍵の管理と認証を行うサーバーと、2端末間の接続を橋渡しするサーバーを提供するのみで、実際の通信は端末同士で直接行われています。P2P 型にすることで VPN サーバーの帯域等に左右されずに、通信速度を高速化できているのだと思います。謎の技術…。

Tailscale を使う

2021年12月追記: 有料プランの改定にともない、現在では無料 (Personal) プランで接続できるのは 20 台にまでになっています(以前は 100 台まで接続できた)。
とはいえそれ以外の機能制限はありませんし、個人で20台以上のデバイスを持っている逸般的な誤家庭はごく僅かであろう事を鑑みると、さほど問題にはならないと思います(後述しますが、ほかの Tailscale アカウントとデバイスをシェアすれば、1アカウントにつき2台ずつ上限が緩和されます)。

有料プランはおもに法人での利用を想定しているようで、ACL といったアクセス制御関連の設定をより細かくいじれたり他のユーザーを追加できたりといった、法人向けの機能が追加されています。

100台まで無料のVPNサービス「tailscale」、リンクだけでマシンのシェアも可能!?【イニシャルB】
とにかく手軽にVPN接続環境を整えたいのであれば、これほど優れたサービスはほかにない。ユーザーがやることは3つだけで、オフィス-社員宅間や拠点間接続など、WireguardベースのフルメッシュVPNを即座に構築できる。

Tailscale の詳細は上記の記事に譲りますが、使い方は本当に簡単です。

法人向けのフリーミアムモデルだからか、個人利用は完全に無料です。機能制限も今のところありません。個人で 20 台以上接続することはあまりないでしょうから、基本問題にはならないでしょう。
最悪 Personal Pro プランを契約すれば、以前同様に 100 台まで使えるようにもできます。

1. アカウントを登録する

Tailscale

最初に、こちら からアカウントを登録します。

アカウントは Google アカウント・Microsoft アカウント・GitHub アカウントで登録できます。
メールアドレスでの登録はないようですが、Google アカウントはほとんど全員持っているでしょうから、いつも使っている Google アカウントで登録するのがおすすめです。

2. クライアントをインストールし、認証する

Download · Tailscale
Tailscale is a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any ne...

Google アカウント (もしくは Microsoft / GitHub アカウント) で認証するとこのような画面が表示されるので、画面に表示されている [Download Tailscale] ボタンか、ダウンロードページ から Tailscale のクライアントをインストールします。
macOS 版は Mac App Store から、iOS 版は App Store から、Android 版は Google Play からインストールできます。
まだ比較的新しいサービスですが、ほとんどすべての OS にクライアントをインストールできるようになっていて、本当に素晴らしいです。

インストール手順は言うまでもないくらいなので割愛します。インストールが完了すると、Tailscale が Windows 版はタスクトレイに、Mac 版はメニューバーにそれぞれ格納されます。

いろいろ確認しましたが、とくに設定は不要です。
Windows 上で Tailscale の仮想ネットワークアダプターは「プライベートネットワーク」と認識されるので、そのあたりも問題ありません。

OpenVPN for Windows は確か「パブリック ネットワーク」扱いされてしまうので、ファイアウォールの設定が面倒だった記憶が…

Windows 版

Windows 版は、インストールした際に自動的にスタートアップに登録され、ログオン時に自動で Tailscale に接続されます。
さらに、タスクトレイの Tailscale アイコンを右クリック → [Run unattended] にチェックを入れておきます(なんかダイヤログ出ますが OK しておきます)。こうすることで、ログオフされていても VPN が動くようにしてくれるらしいです。

その後、[Log in…] をクリックでログインページに飛び、Google アカウント (または Microsoft / GitHub アカウント) で認証すれば認証完了です。

macOS 版

macOS 版の場合は、メニューバー右側のアイコン並んでる部分の Tailscale アイコンを右クリック → [Start on Login] にチェックを入れます。インストール時にデフォルトでそうなっているかもしれません。
こうすることで、ログオンした際に Tailscale が自動で起動されます。Windows 版とは異なり、ログオフ状態でも動くようなオプションはないようです。

その後、[Log in…] をクリックでログインページに飛び、Google アカウント (または Microsoft / GitHub アカウント) で認証すれば認証完了です。

Linux 版

Download · Tailscale
Tailscale is a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any ne...

様々なディストリビューションに対応しており、インストールも公式のコマンドをそのままコピペするだけで OK です。Ubuntu 20.04 LTS と Ubuntu 18.04 LTS で動作を確認しました。

Linux 版の場合は必ずしも GUI 環境が入っているとは限らないからか、sudo tailscale up した後にコンソールにログイン用の URL が表示されて待機状態になります。表示された URL を何かしらのブラウザで開いて、Google アカウントで認証すれば OK です。
Tailscale は systemd サービスとしてインストールされるため、システム起動時に自動的に接続されます。

だいたい Linux でこういう類のソフトをインストールする際は何かしら設定ファイルをいじったりが必要になるものですが、Tailscale ではそうした設定が一切不要で、UX の素晴らしさに感動します。

iOS 版 / Android 版

App Store / Google Play からアプリを入れて、Google / Microsoft / GitHub アカウントで認証するだけです。Active スイッチをオンにすると接続され、オフにすると切断されます。

すこし注意点として、デフォルトのデバイス名には、スマホ側のデバイス名の設定が利用されます。
スペースはハイフンになり日本語は削除されるので、「〇〇のGalaxy S20」みたいな端末名にしているとちょっと不格好な端末名になってしまうかもしれません(デバイス名は管理パネルから自由に変更できます)。

チュートリアルを進める

ひとつデバイスを追加してログインすると、[Next, add a second device.] と表示されます。さっきデバイスを追加したのと同じ要領で、ほかのデバイスを追加してみましょう。

私が Tailscale を最初に導入したときはこんな画面はなかったのですが、いつの間にか初心者でもかんたんに導入できるように丁寧なチュートリアルが設けられていて、親切さと UX の高さに感動……。

2つのデバイスを Tailscale に接続すると、[Done! Your devices can now connect from anywhere.] (完了!デバイスはどこからでも接続できるようになりました。) と表示されます。

Tailscale ネットワーク内のすべてのデバイスには、どこにいてもアクセスできるプライベート 100.x.y.z IP アドレスがあります。また、SSH、RDP、HTTP、Minecraft などのすべてのプロトコルが機能し、Tailscale の実行中に必要なものを使用できます。

ping のチュートリアルが書いてありますが、やりたい人だけやれば OK です(必須ではありません)。
[Success, it works!] をクリックして、先に進みましょう。

この画面になればチュートリアルは完了です!
[Go to the admin console] をクリックして、管理パネルを見てみましょう。

3. Magic DNS を有効にする

MagicDNS
Find out how to automatically register DNS names for devices in your Tailscale network.

こちら の DNS 設定にアクセスし、[Enable MagicDNS] をクリックします。
こうすることで、Tailscale に接続されているデバイスに http://macbookair/ のように Tailscale に登録されているホスト名でアクセスすることが可能になります。

公式ドキュメント いわく、2022年10月20日以降に作成されたアカウントでは、デフォルトで MagicDNS が有効になっています。
すでに MagicDNS が有効になっている場合は、そのままにしておきましょう。

hello.ts.net

Tailscale の管理パネルには hello という謎のデバイスが追加されていますが、これは Tailscale 側が接続確認用に用意している、Tailscale 経由でしかアクセスできないサーバーです。
Tailscale に接続した状態で https://hello.ts.net もしくは http://100.101.102.103 にアクセスすると、「You’re connected over Tailscale!」という画面が表示されはずです!
また、Tailscale に接続した状態なら、ping 100.101.102.103 でレスポンスが返ってきます。

もしずっとぐるぐるして接続できない場合は、うまく Tailscale に接続できていないかもしれません。
接続できない場合は、一度 Tailscale クライアントを再起動してみると直ることがあります。

もしかすると、Tailscale アカウントを作成した時期によっては hello.ts.net のデバイスが追加されていないかもしれません。
その場合は https://login.tailscale.com/admin/invite/hello.ts.net から hello.ts.net を追加できます。
この共有画面は hello.ts.net に固有のものではなく、デバイスの共有機能(後述)を使うことで、どんなデバイスでもこの hello.ts.net と同じ要領で共有できます。

Tailnet name を変更する

Tailnet name
A tailnet name identifies your tailnet and is used in features such as MagicDNS, HTTPS certificates, and sharing.

Tailscale アカウントには、デフォルトで「Tailnet name」というアカウントごとに固有のドメインが割り当てられています。
Tailscale に接続したデバイスには、100.x.y.z の IP アドレス以外に、[machine-name].[tailnet-name].ts.net のドメインでもアクセスできます。

この Tailnet name はデフォルトでランダムな文字列になっていますが、[Rename tailnet] をクリックして、fun name (楽しい名前) に変更できます。
[Rename tailnet] をクリックするとこのように表示されるので、気に入ったドメイン名を選択してから [Rename tailnet] を再度クリックします。これで変更は完了です。

Tailnet name は直接選ぶことはできませんが、[Re-roll options] をクリックするとリストが更新されて新しいものになります。気に入ったワードが出てくるまで選ぶとよいでしょう。

ここに表示されている fun name は一期一会で、一度 [Re-roll options] をクリックすると、前に表示されていた fun name を選択することができなくなります。
変更したあとも再度 Tailnet name (fun name) は変更できますが、後述の HTTPS 証明書機能を有効にすると、fun name は二度と変更できなくなります(元のランダムな Tailnet name のみ選択できる)。慎重に選択してください。

4. 認証鍵の有効期限を無効にする

Key Expiry
See details about enabling or disabling key expiry, and how to renew keys for an expired device.

Tailscale に接続したデバイスは、デフォルトで6ヶ月おきに再認証が必要になります。
セキュリティのためこのような仕様になっているみたいですが、「信頼できるサーバー、リレーノード、到達が困難なリモートIoTデバイスなど、一部のデバイスでキーの有効期限を無効にすることができます」とあるように、認証鍵の有効期限を無効にすることもできます。

[Machines] の各端末の … ボタン → [Disable key expiry] をクリックすると、認証鍵の有効期限を無効化できます。こうしておけば、6ヶ月を過ぎても再認証なしでデバイスにアクセスできます。

認証鍵の有効期限を無効にしたデバイスは、デバイス名の下に小さく [Expiry disabled] と表示されます。
Tailscale を使いたいユースケースの大半は家の中のサーバーにアクセスしたいときだと思うので、忘れたときに突然接続できなくなって困らないように、すべてのデバイスで認証鍵の有効期限を無効にしておくことをおすすめします。

設定画面から、再認証までの期間を変更することもできます。
[Settings] → [Authentication] にある [Key Expiry] で設定できます。最大はデフォルトの180日です。


以上でインストールと設定は完了です!
これだけの簡単な手順で、クライアントをインストールして認証を済ませたすべてのデバイスが同じ仮想ネットワークに接続されているのですから、驚くほかありません。
試しに VPS にも Tailscale をインストールしてみましたが、問題なく接続できました。

5. その他の機能

今後仕様が変わることがあるかもしれませんが、用途次第ではかなり便利な機能が盛りだくさんなので、かんたんに紹介しておきます。

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

Sharing your nodes with other users
Learn how to give a Tailscale user on another tailnet access to a private device within your tailnet, without exposing t...

ここが Tailscale のもっとも優れている機能といっても過言ではないのですが、Tailscale に接続したデバイスは、ほかの Tailscale を使っているユーザーと共有できます。

…どういうことかというと、要は Google ドライブでファイルへの招待リンクを作って共同編集したい人に送るのと同じ要領で、家のローカル LAN 上のデバイスをほかの人に共有できる機能です。
もちろんルーターのポート開放は不要ですし、招待リンクなしで勝手にほかの人からアクセスされてしまうこともありません。インターネットに公開する必要がないため、セキュリティ上もとても安全です。

たとえば、離れた家族と PC 上のファイル(ネットワークドライブ)を共有したいときや、友達とマルチプレイするためにマイクラサーバーを共有したいときなどに使えます。
デバイスの共有はいつでも解除できるので、一時的に SSH やリモートデスクトップで繋ぐためにデバイスを共有する、といった使い方もできます。

ほかにも公式の 利用例ガイド に Tailscale のさまざまな活用法が載っています。興味があれば読んでみるといいでしょう。

デバイスを共有するには、[Machines] の各端末の … ボタン → [Share] をクリックします。

すると招待リンクをコピーする画面になるので、[Generate & copy invite link] をクリックして、招待リンクをコピーします。招待リンクは1回限りのみ有効で、有効期限はありません。
招待リンクをコピーできたら、ほかの Tailscale ユーザーに招待リンクを送りましょう!

招待リンクを受け取った側は、招待リンクをブラウザで開くとこのような画面になるので、[Accept invite] をクリックして、デバイスの共有を許可します。
デバイスの共有を許可すると、相手に自分のアバターとメールアドレスが共有されます。注意してください。

なお、共有されたデバイスは「External Device」という扱いになり、通常20台までの最大デバイス数にはカウントされません。ありがたい…。

「Tailscale をより広く共有していただいたことへの感謝として、お二人のデバイス数制限を2台分追加いたします!」と書いてある通り、デバイスをほかのユーザーと共有すると、Tailscale を広めてくれたお礼として、通常20台までに制限されている最大デバイス数が、共有した方と共有された方の両方に2台分追加(緩和)されるみたいです。

さらに、別のユーザーにも共有すると、もう2台ずつ制限が緩和されます。つまり、5人にデバイスを共有すれば、通常20台までのところ、30台までデバイスを Tailscale に接続できるようになります!
最大デバイス数は Billing ページから確認できます。
デバイスの共有を解除したあとも、最大デバイス数の緩和は引き続き有効みたいです。おそらく Tailscale アカウントを持っている人同士で一瞬デバイスを共有するだけでデバイス数上限が2ずつ緩和されるようなので、デバイス数の上限に悩んでいる方は試してみてもいいんじゃないでしょうか(そもそも20以上デバイスを持っている人自体ごく僅かだと思うけど…)。

デバイスを共有した側の Tailscale アカウントでは、[Share] からデバイスを共有中の Tailscale アカウントを確認できます。
各アカウントの … → [Revoke access] をクリックすれば、相手側に共有を解除してもらうことなく一方的にデバイスの共有を解除できるので、セキュリティ的にも安心です。

一方、デバイスを共有された側の Tailscale アカウントでも、… → [Remove…] をクリックすることで、簡単にデバイスの共有を解除できます。

[Remove…] をクリックすると「再度このデバイスにアクセスするには所有者からもう一度招待リンクを送ってもらう必要があるけど、それでもいい?」と訊かれるので、[Remove machine] をクリックすれば、デバイスの共有を解除できます。

通常、ほかの人とデバイスを共有するのはかなり煩雑な手順を踏む必要があります。一方、Tailscale のデバイス共有機能はクラウドのファイル共有機能と同じような感覚で、セキュアに使えるのが嬉しいですね。

Taildrop(ファイル送信)

Tailscale に接続しているデバイス同士で、ファイルを送信し合うことができる機能です。
Taildrop ってなんだよ…って感じですが、AirDrop 的なイメージからなのでしょうか。

使えるようにするには、あらかじめ [Settings] → [Feature Previews] から [Send Files] を有効にしておく必要があります。

そのあと、エクスプローラーで共有したいファイルを選択します。
[Send with Tailscale] という項目があるのでクリックすると、送信先を選択する画面が表示されます。

あとは右側から送信したいデバイスを選んでクリックすれば、選択したファイルを他のデバイスに送信することができます。複数同時に送ることも可能です。
これは Windows での手順ですが、他の OS でも基本は変わりません。スマホから送信することもできるみたいです。

Windows に送信されたファイルはデスクトップフォルダに保存されますが、Mac に送信されたファイルはダウンロードフォルダに保存される違いがあります。その点だけ注意が必要です。
詳細は Tailscale のヘルプ (英語) を確認してください。

さまざまなデバイスでファイル共有できるのはとても便利なので、一度使ってみるとよいと思います。

Service タブ

Tailscale に接続しているデバイスがリッスンしているサービスの一覧をリストで表示できます。

使えるようにするには、Taildrop と同様に、あらかじめ [Settings] → [Feature Previews] から [Services Collection] を有効にしておく必要があります。

たとえば Apache を使って Web サーバーを立てているならそのように表示されますし、検索ボックスからサービスを絞り込むこともできます。

意外にどの PC でどのサービスがどのポートで立ち上がっているかなんて正確に把握できていなかったりするものですが、そうした動作状況の管理に便利だと思います。

HTTPS の有効化(証明書の取得)

Enabling HTTPS
Learn how to configure HTTPS for devices in your Tailscale network.

Web 開発だと開発中に HTTPS が必要になり、しょうがないのでオレオレ証明書を作って使うことがままあると思うんですが、そんなときに使えるのが Tailscale の HTTPS の有効化機能です。
Let’s Encrypt から支給された本物の証明書が手に入るので、オレオレ証明書のように各デバイスにインストールする必要がありません

具体的には、Tailscale がマシンごとに https://[machine-name].[tailnet-name].ts.net のフォーマットのドメインを作成します。tailnet-name の部分はアカウント固有のユニークな文字列 (Tailnet name)、machine-name は Tailscale 上に登録されているデバイスの名前(マシン名)です。

たとえば、もし Tailscale 上の IP アドレスが 100.64.100.100、デバイス名が mypc 、アカウントの Tailnet name が hogefuga.ts.net だとしたら、 https://mypc.hogefuga.ts.net100.64.100.100 にアクセスできることになります。

証明書の発行時に Tailscale 側が Let’s Encrypt の DNS 認証を代行することで、オレオレ証明書ではない、本物の HTTPS 証明書が手に入る仕組みになっているようです。

Let’s Encrypt は、そのドメインを所有している事の確認さえできれば、名前解決先がプライベート IP かグローバル IP かに関わらず HTTPS 証明書を発行してくれます。
よく使われているのは Web サーバーの .well-known/ フォルダにトークンを配置する HTTP 認証ですが、それ以外にも DNS の変更権限がある事を確認する DNS 認証があります。

HTTP 認証は Let’s Encrypt のサーバーからアクセスできる必要があるため、インターネットに公開されていないサイトでは使えません。一方 DNS 認証なら、所有するドメインの DNS さえ変更できれば、名前解決先がプライベート IP でも有効な HTTPS 証明書を発行できます。

この機能を使うには、 [DNS] から [Enable HTTPS…] をクリックします。すると「証明書取るときにマシン名がインターネットに公開されちゃうけどOK?」って訊かれるので、[Enable] をクリックします。

Let’s Encrypt で取得した HTTPS 証明書(秘密鍵を除く)は、インターネット上の公開元帳に記録されています。
tailnet name (旧 domain-alias) は、Magic DNS の本来のドメイン ([machine-name].yourmailaddress.gmail.com.beta.tailscale.net のフォーマットで、メールアドレスが含まれる) をより短くして、メールアドレスを公開しないための機能です。
…だったのですが、最近になって [machine-name].[domain-alias].ts.net のフォーマットのドメインが 正式に Magic DNS のドメインになった みたいです。

なお、Tailscale 上で設定したデバイスの名前は公開元帳に記録されるため、万が一デバイスの名前に機密情報が入っているのであれば、HTTPS 証明書を取得しないほうが良いでしょう(公式にもそう書いてあります)。もっとも、公開元帳を漁って機密情報を取得するような輩がいるとは思えませんが…。

あとはコマンドラインで tailscale cert [machine-name].[tailnet-name].ts.net を実行するだけで、実行したフォルダに正規の HTTPS 証明書(公開鍵・秘密鍵)が生成されます。
これを Apache なりWeb サーバーに組み込めば、本物の HTTPS 証明書でホストされた、プライベート HTTPS サイトの完成です!

なお、Mac の場合は /Applications/Tailscale.app/Contents/MacOS/Tailscale cert [machine-name].[domain-alias].ts.net のように実行する必要があります。

使ってみた感想

今まで外出先から自宅のデバイスに接続するにはとても高いハードルがありましたが、そのハードルを大幅に下げてくれる、とても素晴らしいサービスだと思います。 様々な端末を持っていますが、1時間ちょっとで全て Tailscale に接続し同じローカルネットワーク下に入れることができました。
ただ、NordVPN のように「海外 IP からアクセスするプロキシ的なサービス」ではないので、そのあたり勘違いされて敬遠されやすいのかなとも。

私もどういった仕組みなのか詳細までは理解できていないのですが、これほどの簡易さなら、一般の方にも自信を持っておすすめできます。

私は祖父母の PC に Tailscale クライアントをインストールして、直接 RDP でリモートデスクトップできるようにしています。
Chrome リモートデスクトップは簡単ですが、毎回祖父母にリモート接続を許可してもらう必要があって、高齢者にとっては煩雑です(特に Google アカウントからログアウトされてたりすると、毎回教えないとログインできないので最悪…)。
その点で Tailscale は、「ポート開放することなく直接祖父母宅の PC にリモートデスクトップでつなぎたい」という今回のユースケースにぴったりでした。

Tailscale は WireGuard という OSS の VPN ソフトをベースに作られています。
WireGuard のデバイスの認証周りを Tailscale のアカウントごとに管理し、WireGuard を導入しやすいようにラップすることで、接続や導入をしやすくしているサービスです。
プライベートネットワークを超えて通信する NAT 超えには、WebRTC などでも用いられている UDP ホールパンチング という技術が用いられています。

…が、そんな技術的な詳細は大多数の人にはどうでもよくて、ただ VPN 接続ができればそれでいい。Tailscale はそのあたりを熟知した上で、技術的な詳細を隠蔽し、ライトユーザーが本当に必要としている機能を、簡単な手順で提供しているサービスです。

少なくとも私の環境では OpenVPN と共用できているので、ゆっくり移行していこうと思います。

注意点

プライベート IP アドレス

Tailscale のプライベート IP アドレスは 100.64.0.0/10 の範囲 (100.64.0.0 ~100.127.255.255) からランダムに割り当てられる ため、上の画像のように覚えにくいものになります。
また、自分でプライベート IP アドレスを変更することはできません(その代わり、管理パネルからデバイスを削除するまではずっと固定 IP になります)。

Tailscale のプライベート IP アドレスは、Tailscale 全体で重複のないユニークなアドレスが割り当てられるみたいです。おそらく、マシンを他のユーザー(=他の Tailscale ネットワーク)と共有する際に、IP アドレスが Tailscale 全体で重複していないほうが都合が良いからだと思われます。

また、割り当てられるプライベート IP アドレスには、通常ローカル LAN 向けに予約されている 192.168.x.x や 10.8.x.x ではなく、本来は ISP の内部で使われる キャリアグレード NAT 向けの IP アドレスが使われています[1]https://www.geekpage.jp/blog/?id=2012/4/21/1
ISP 以外では使われていない IP アドレスという特性を生かして、他のローカル LAN・イントラネット・VPN との競合を回避するために利用されています。

その代わり、Magic DNS 機能を有効にしておけば、http://macbookair/ のようにマシン名で名前解決ができるようになります。基本的にはこれでアクセスするとよさそうです。

また、HTTPS の有効化の手順で tailnet-name を割り当てていれば、[machine-name][tailnet-name].ts.net でもアクセスできます。少し長くはなりますが、取得した HTTPS 証明書が使えることと、マシン名だけのホストよりもドメイン感があることがメリットです。

設定はない

以前も説明した通り、基本的に設定はありません。

設定不要で使えるのは手軽に使いたい大多数のユーザーにとってはまったく問題にならないのですが、OpenVPN のように、とにかくゴリゴリ設定をカスタムして最適化したい上級ユーザーにとっては物足りないサービスだと思います。
そういう方は自前で WireGuard 環境を作ったほうが幸せになれそうです。

速度が OpenVPN と比べて遅い(?)

あまり本格的に調べているわけではないので本当かどうかはわからないのですが、自宅の Linux マシンと VPS 間の通信速度を iperf コマンドで計測したところ、意外にも OpenVPN の方が速いという結果になりました。

ただ、VPS 自体の帯域が 100Mbps なのですが、OpenVPN 経由の場合はそれを大幅に超える 180Mbps も出ていたりします( Tailscale 経由の方は 109Mbps 程度)。
OpenVPN の方は設定でデータの圧縮 (comp-lzo) を有効にしているので、もし Tailscale でデータの圧縮が有効になっていないのであれば、それが原因で OpenVPN の方が速くなっている可能性もありそうです。OpenVPN の圧縮を無効化した状態で試してみたいところですが、環境が壊れそうで無理…🥺

OpenVPN はサーバー型 VPN なので、物理的な通信距離が長くなる分、直接通信するのと比べてどうしても通信の遅延は大きくなります。そうした意味では、Tailscale の方が速いという見方もできます。

まとめ

「どうせ面倒くさいんでしょー」と敬遠していましたが、実際に使ってみたらとにかく導入が簡単だったので、気になる方はまずは試してみると良いと思います。無料だし。
家の PC 1,2 台にインストールするだけなら30分もかからずもできます。昔苦労してなんとか OpenVPN 環境を構築した身としては感動ものです…。

テレワーク諸々でこういうリモートで何か作業したいケースが増えつつあるように思いますが、Tailscale はそういったニーズにぴったりのサービスです。Google アカウントと基本的な PC 操作ができる人ならあっという間にセットアップできるので、あまり技術に精通していない方にもおすすめできます。

ソフトを公開する側としても、以前は VPN 環境の構築手順が複雑なこともあって、積極的に「VPN を使うなどしてください」と呼びかけにくい状態でした。また、自前で UDP ホールパンチングを実装するのはかなり難しいですし、直でインターネットに公開するとなればセキュリティリスクもあります。
その点でこれからは「Tailscale を使ってください」と言えるようになり、かなり楽になりました。

確かに細かなチューニング等はできず、上級ユーザーにとっては物足りないかもしれません。
しかし、(これは何かしら作っていても思うことですが)大多数のユーザーにとって細かい設定は不要で、とにかく目的を達成できればそれでいいのです。

そもそも「外出先から自宅の PC にアクセスしよう」という発想が出る時点である程度ネットワークやポート諸々の概念を理解している上級者でしょうし、家にある開発サーバーにつなぎたいといったエンジニアの利用が多そうです(私もその一人ですが…)。
それでも全ての開発者がネットワーク関係に精通している訳でもないですし、開発者だからといって難しい手順を踏まさせられる道理はありません。楽にできるなら楽にやりたいよね。

割り切ってすべてをシンプルにしているからこそ、ここまで簡単に VPN をセットアップできるようになっているのだと感じました。

コメント

  1. ちょうどリモートデスクトップ環境を構築したかったので参考になります。
    ところで、リモートデスクトップのあぷりとかって何使ってますかね?

    • 私は普通に Microsoft 純正の RDP を使ってます。Windows 版と Mac 版両方あります。
      他では Chrome リモートデスクトップが有名ですが、あちらはそもそも同じローカルネットワークになくてもいけてしまうので…

  2. https://tailscale.com/kb/1019/subnets/
    指定すればtailscaleをインストールできない機器ごとLAN内マシンにアクセス可能になったり

    https://tailscale.com/kb/1103/exit-nodes/
    tailscaleに参加している自機器からexit nodeを指定して
    いわゆる前者のVPNのようにexit nodeを介してインターネットに出るように設定することも可能になっています

    • そうなんですね…!!!知りませんでした……
      いつの間にかすごく高機能になっていて驚くばかりです。

  3. わかりやすい記事で、とても参考になります。
    質問をさせていただきたいのですが、Tailscaleを利用したときに、リレー接続を解消する方法はないのでしょうか。

    tailscale statusコマンドで確認したところ、他の機器との接続がリレー接続になってしまい、Pingや速度が異常に遅くなることを経験しています。具体的には、同一のLAN内の機器についても、WANからアクセスしようとすると、直接接続になる機器とリレー接続になる機器があります。
    どの機器もファイアーウォールの設定はインストール時から変更していませんし、LANも二重ルーターになってはいません。ルーターもUPnPを有効にしており、パケットフィルタ設定はデフォルトのままですが、他に何か要因はあるのでしょうか。
    ご返信いただけると幸いです。

    • 正直分からないですね…。Tailscale はほぼ設定レスで気軽に接続できることが特色のソフトですし、設定でなんとかできるものではないと思います。
      同一 LAN の機器なのにリレー接続になるのは不可解ですが、何かしらのリレー接続でないと接続できない理由があるのではないでしょうか。

      • 返信ありがとうございます。
        その後、試行錯誤をしまして、ルーターが原因だろうということが分かりました。
        当方の環境では、プロバイダから貸し出されたWH822Nというルーターを使用していましたが、これはLAN内のipsecサーバー1台のみにしかWANから接続できないようです。(https://www.aterm.jp/function/guide9/model/wh822n/n/guide/list/list_f.html)
        そのため、tailscaleが利用しているNATトラバーサルも、2台以上の機器とは接続できなかったのではと考えられます。

        新たにBUFFALO製のルーター(WSR-1800AX4S)に変更したことで、どの機器にも問題なく直接接続できるようになりました。
        tailscaleをLAN内の複数台で使うときには、ある程度は高機能なルーターを使う必要がありそうですね。

        • なるほどそういうことでしたか…。
          非常に興味深い検証結果を共有いただきありがとうございます。
          Tailscale は ipsec プロトコルは使っていない P2P 型の VPN (WireGuard) なので ipsec は関係していないように思いますが、たしかにルーターの更新は有効かもしれませんね。