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

最近某所で話題になっていた 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台以上のデバイスを持っている逸般的な誤家庭はごく僅かであろう事を鑑みると、さほど問題にはならないと思います。

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

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

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

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

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

最初にアカウントを登録します。

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

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

Tailscale
Tailscale is a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.

こちらから 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 アカウントで認証すれば認証完了です。

macOS 版

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

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

Linux 版

Tailscale
Tailscale is a zero config VPN for building secure networks. Install on any device in minutes. Remote access from any network or physical location.

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

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

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

Android 版

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

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

3. Magic DNS を有効にする

Tailscale

こちらにアクセスし、[Nameservers] に 1.1.1.1 を追加します。
設定内容はよくわかっていませんが、とにかく Magic DNS を使うには追加しておく必要があるみたいです。

その後、[Enable Magic DNS] のグレーアウトが外れるので、有効にします。
こうすることで、Tailscale に接続されているデバイスに http://macbookair/ のように Tailscale に登録されているホスト名でアクセスすることが可能になります

hello.ipn.dev

Tailscale の管理パネルには hello-ipn-dev という謎の端末が追加されていますが、これは Tailscale 側が接続確認用に用意しているサーバーです。
Tailscale に接続した状態で hello.ipn.dev にアクセスすると、「You’re connected over Tailscale!」という画面が出ます。同じく接続した状態なら ping 100.101.102.103 でレスポンスが返ってきます。

接続できない場合はうまく Tailscale に接続できていないかもしれません。ただし、私の環境だと他の端末には接続できるのに hello.ipn.dev には接続できないってことがあったので、ちょっと不安定なのかも。接続できない場合は一度 Tailscale を再起動するとよいでしょう。

以上でインストールと設定は完了です。
これだけの簡単な手順でクライアントをインストールして認証を済ませた全ての端末が同じローカルネットワークに接続されているのですから、驚くほかありません。
VPS にもインストールしてみましたが、相互に通信できることを確認しました。

4. その他の機能

いずれも beta 版、あるいは alpha 版という扱いにつき今後仕様が変わるかもですが、用途によってはそれなりに便利なので、かんたんに紹介しておきます。

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

Sharing your nodes with other users
Learn how to give another Tailscale user access to a private device within your network, without exposing it publicly.

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

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

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

ほかにも公式の 利用例ガイド に 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].[domain-alias].ts.net のフォーマットのドメインを作成します。domain-alias の部分はアカウント固有のユニークな文字列、machine-name は Tailscale 上に登録されているデバイスの名前(マシン名)です。

たとえば、もし Tailscale 上の IP アドレスが 100.64.100.100、デバイス名が mypc 、アカウントの domain-alias が hogefuga だとしたら、 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 証明書を発行できます。

この機能を使うには、 [Settings] → [Feature Previews] から [Configure HTTPS…] をクリックします。すると「証明書取るときにマシン名がインターネットに公開されちゃうけどOK?」って訊かれるので、[I understand, let me choose a public domain alias] をクリックします。

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

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

その後、domain-alias を選択する画面になります。domain-alias は直接選ぶことはできませんが、[Re-roll Options] をクリックするとリストが更新されて新しいものになります。気に入ったワードが出てくるまで選ぶとよいでしょう。[Choose alias] で確定できます。

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

ただ、2021年12月時点では Linux 以外の OS (Windows・Mac) では残念ながらうまく証明書を取得できませんでした。beta 版とのことなので仕方ないかもしれません。今後の改善に期待。

2022年4月現在、Windows でも Mac でもちゃんと 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 の有効化の手順で domain-alias を割り当てていれば、[machine-name][domain-alias].ts.net でもアクセスできます。少し長くはなりますが、取得した HTTPS 証明書が使えることと、マシン名だけのホストよりもドメイン感があることがメリットです。

デフォルトでは6ヶ月で再認証が必要

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] をクリックすると、その端末の認証鍵の有効期限を無効にすることができます。私は忘れた頃に切れてもめんどくさそうだなーと思ったので、全ての端末で認証鍵の有効期限を無効にしました。

設定画面から、再認証までの期間を変更することもできます。
[Settings] → [Authentication] にある [Key Expiry] で設定できます。

設定はない

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

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

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

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

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

まとめ

「どうせ面倒くさいんでしょー」と敬遠していましたが、実際に使ってみたらとにかく導入が簡単だったので、気になる方はまずは試してみると良いと思います。無料だし。
家の 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を介してインターネットに出るように設定することも可能になっています

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