tailscaleで実現するかんたん・安全・便利なクラウド型VPN接続のカタチ

# クラウド型VPNツール「tailscale」の紹介

tailscaleは現時点でもっとも洗練されたP2P型のVPNツールです。
認証や接続機器の管理はクラウド上のWEB画面で行い、実際の機器同士の接続はVPNプロトコル「Wireguard」を使用して、Skypeでも使用されている「UDPホールパンチング」でP2P接続を実現しています。
細かいことはともかく、これがとにかく便利なのでみなさんに紹介していきたい。

tailscaleの概要についてはImpress Watchの清水理史さんの「イニシャルB」が詳しいのでこちらをご覧ください。

https://internet.watch.impress.co.jp/docs/column/shimizu/1303751.html

## tailscaleのメリット

私が実際にtailscaleを使ってみて便利な点を以下にあげます。（一部未検証）

### 【メリット1】認証方式が簡単！
tailscaleはVPNツールでもありSaasとしての機能もあります。
そのため最初にアカウントを作成する必要があり、GoogleかMicrosoftアカウントを使用できます。
私は試しにGoogleアカウントを選択しました。
PCやAndroidにツールをインストールした時にGoogleアカウントでログインできるためセットアップが簡単に完了します。
tailscaleにログインした機器はブラウザから一覧の取得や削除、機器の共有(後述)などの管理が可能です。

**【tailscaleのAdmin Console > Machinesの画面】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138956/27724fc1-c5af-f5a8-22ea-f24685ed53e6.png)

### 【メリット2】VPN用のポートを外部に公開する必要がない
VPNツールによっては複数の機器を繋ぐ場合、外部から接続を行うための機器にVPN接続用のポートを開ける必要がありました。
tailscaleはP2P型のVPNツールのため、上記のポート開放が必要ありません！そのため安全にVPNネットワークが組めるので個人用途ではオススメです。
ただし、会社使用のPCでは管理者の想定しないネットワークが構築されることにより、セキュリティリスクを高めることになるのでご注意ください。
また前述の清水理史さんの記事にある通り、アカウントは個人のGoogleアカウントに紐づいてしまうため現時点では組織利用は難しいかな、という感想です。

### 【メリット3】tailscaleに接続可能な機器が豊富
tailscaleは様々なプラットフォームに対応しています。
とりあえず手元にある機器にぜんぶにtailscaleをインストールしてみました。
- Windows10 PC
- MacBook Pro
- iOS端末（iPad)
- Android端末（Pixel3 XL）
- raspberry Pi
- クラウドサービス(SakuraのVPS）

特に問題なくツールのインストールもできて、予想以上にあっけなくすべての機器がつながりました。
（※なおWindows10のWSL2のUbuntuのみ繋がらず）
(追記)通常のコマンドでは立ち上がりませんが、他の方法で対応できました。

```
# 以下コマンドはWSL2 Ubuntuではエラーで起動せず
tailscale up

# こちらは起動しました
sudo tailscaled &
```


各機器との接続は「100.」から始まるプライベートIPアドレスを指定します。
ネットワーク内にDNSサーバーを立てて、MagicDNSという機能を使えば名前解決もできるみたいですが、
私の場合、すべてのDNSリクエストが内部DNSサーバーに向いてしまったため止めました。
ネットワークに強い人は解決できそうが、プライベートIPも基本変わることがないようなのでとりあえずIPアドレスで運用しています。

実際に検証した例としては以下のような接続を想定したユースケースが簡単に実現できました。

|接続元機器|接続元アプリ|____|接続先機器|用途|
|---|---|---|---|---|
|iPad|Microsoft Remote Desktop | ->| Windows10 PC|リモートデスクトップ接続|
|Android|Termux| ->| Raspberry Pi |ssh接続|
|iPad|Prompt2 |-> |Raspberry Pi |ssh接続|
|Windows10 PC|Visual Studio Code| -> |クラウドサービス|リモートデバッグ(ssh接続経由)|

tailscaleのAdmin Console画面では各機器で動いているサービスへのリンクやコマンドも自動で作ってくれるので便利です。

**【Admin Console > Servicesの画面】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138956/9e74459d-b94d-d4cd-365e-81b0eddf1f54.png)



外出先でタブレットやPCからメモリが潤沢に載っている自宅PCを使う、なんて使い方をしたい人に向いていますね。

### 【メリット4】自分の管理する機器の接続を共有できる（未検証）
クラウドのファイルサービスで共有リンクを送るように機器の共有権限もかんたんに送付できるようです。
ブラウザからtailscaleのAdmin Console > Machinesの画面を開いて機器の一覧から「Share this machine...」をクリックするだけ。
あとは共有を許可するメールアドレスを入力すればよいみたい。

**【機器の共有リンクを作成する画面】**
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/138956/275721b6-e2c7-65e3-24cb-578142c951d6.png)

一時的にサーバーを共用する場合とかにいいかもしれませんね。

### 今後の試してみたいこと
tailscaleを使用することにより、理想的なネットワーク環境で自分のもっている機器がVPN接続できるようになりました。
今回はVPNを通じて能動的にネットワーク間を接続することを目的に検証しましたが、常時VPNで接続されていることを考えると他にもいろいろな用途に使えそうですね。

テストスクリプトの結果を常時立ち上げているクラウドサーバのMySQLに流して管理するとか、すべての機器のログをElastic Searchに流して観測してみる、とかクローズドな環境での検証に役立ちそうです。


## 参考
**tailscale本家**

https://tailscale.com/


**WireGuardの説明はjanogの以下の資料が詳しい**


https://www.janog.gr.jp/meeting/janog46/wp-content/uploads/2020/06/janog46-wireguard-tanioka.pdf

**UDPでP2P接続を実現する「UDPホールパンチング」の説明**

https://www.atmarkit.co.jp/fwin2k/experiments/skype02/skype02_03.html