tailscale
https://gyazo.com/027868c44d5c55c55cf6030c2d050b32
tailscaleを紹介したい
WireGuardを使ったVPNネットワークサービス
こんな時に便利
飼っているサーバーに手軽にアクセスしたい
開発中のサーバーにスマホからアクセスしたい
開発中のサーバーを友達にアクセスさせたい
WireGuard
WireGuardとは、Linuxのカーネルモジュールとして動作するオープンソースのVPN実装です。
OpenVPNやIPSecなど、従来のVPNサーバーのセットアップは、多くの場合煩雑になりがちでした。対してWireGuardは、SSHサーバーと同程度に、簡単にセットアップが可能なことを目指して開発されています。実際、サーバーとクライアント間で公開鍵を交換し、IPアドレスを割り当てるだけで、VPN通信が可能になります(設定については後述)。
VPNプロトコル
割り切った設計で、4000行程度でシンプルに書かれている
インストール
iOS/Androidアプリ→Storeから入れるだけ
Windows/Macアプリ→適宜インストール
サーバーとか、VMとか
インストールスクリプトを発行してくれる
curl -fsSL https://tailscale.com/install.sh | sh && sudo tailscale up --auth-key=tskey-auth-****
auth-keyがあるので、これを使えば勝手に自分のtailnetに紐づく
使いやすくて簡単
https://gyazo.com/9f4e0d976e7aa8f3e2912349094ba24b
たぶんPCゲーする友達くらいなら全然使ってもらえると思う
ネットで見るとこんな感じ
https://gyazo.com/479530b6d256c419b8905ff2dfb71d21
使ってみる
mymac というデバイスでローカルにサーバーを立てていた
同じtailnetのスマホからアクセスしたいとき
↑ IPアドレスをいちいち調べるのはめんどくさい...
MagicDNS
便利!!!
SSHしたければ、 ssh user@mymac でよい
時間があればデモをする
最近使った例
https://gyazo.com/1c602c9efb4e7feaca1ea71ceae55cd1
最近アニメ製作者向けのストップウォッチを作った
モバイルで使うことを想定したWebツールなので、tailscaleでWebアプリを開いてテストしながら開発した
世の中の例
tailnetは他のユーザーを招けるので、Minecraftサーバーの共有をした
(こんなサークルがあるんだ・・・)
tailscale SSH
tailscaleで誰なのか分かっているので、それでSSH認証できたら良いのでは?
使い方
(サーバー)SSH有効モードでtailscaleを起動
tailscale up --ssh
(クライアント)
いつも通りSSHする
ssh gcp-compute
監査ログを残したりもできる
ACL
誰が何にアクセスできるかを設定できる
自分は使ったことないけれど、会社とかでは便利そう
さっきのマイクラサークルとか
デバイスや人にtagをつけて、管理する
そのほか便利グッズ
tailscale serve
tailscaleのネットワーク内で配信できる
tailscale serve --https:443 localhost:3000
URLを/home/alice/blog/index.html でファイルサーバー
text:"Hello world!"もできる。
tailscale funnel
tailscale serveのインターネット公開版
ngrokのようなものと考えるとわかりやすいかも?
tailscale funnel [port or dir]
Developer Tools
GitHub Actions
tailnetにアクセスできる
社内のデバイスをtailscaleで管理している場合は便利かも
VSCode Extension
VSCodeのターミナルでtailscale sshを使ってやり取りできたり・・・
データを配信できたり・・・
tailscaleの推しポイント
「これできるよね」が全部実装してある
https://gyazo.com/937a55e9c5a5435947fcf27c4c6574b1
技術記事が結構いい
SSO・ACLが無料プランからある
時間が余れば: どのように動いているのか
よくあるVPN
https://gyazo.com/8d9e087d33ffdcca20cba6f19f706a15
VPNゲートウェイを通して通信する
https://gyazo.com/67336e7f4810552c7b980c86b9f87fdf
クライアントがNYにいて、GatewayがLAにあって、サーバーがNYにあると遅延が最悪
サーバーの置き場(拠点)の分だけVPNゲートウェイを置くのもコストがかかる
メッシュVPN
https://gyazo.com/ba7b68206f33f43f2ec007fae048d3ac
WireGuardはサクッとトンネルを張れるので、苦労せずにマルチハブの通信ができる
しかし、課題がある。それぞれの通信先に以下の情報が必要
静的IP
空いているポート
WireGuardのキーの配布
例えば、新しいユーザーを追加したら、新しいキーをそれぞれの通信先に置かないといけない
メッシュVPNの難しい点(2)
https://gyazo.com/b744db23e49b50c8f729bb2ebb0e7b71
10ノードのネットワークなら、10 * 9で90の線(トンネル)を引く必要がある
しかも、パブリックネットワークなどにアクセスしているかもしれず、安全とは言えない状況かも
コンプラ要件などもあるはずなので、あるノード間のトラフィックをブロックする必要があるかも
そこでtailscaleですよ
https://gyazo.com/d25e48a35982754c9de336eab813b132
鍵を管理したり、通信経路の調整役としてtailscaleの調整サーバーがある
ここで情報をやり取りして、通信自体はノード間でやってね、というアプローチ
手順
ノードは、公開鍵・秘密鍵を作成し、公開鍵をIDと関連づける
ノードは、調整サーバーに接続し、どこに存在しているのか、どのドメインに属するかを伝える
ノードは、他のノードからの情報をと公開鍵を手元に落としておく
ノードは、公開鍵を使ってWireGuardインスタンスを構成する
セキュリティ
https://gyazo.com/f8fafc40f16def12225efac70fd1aa72
ACLを書いて、関係のない通信はブロックする
さらには、通信できる必要がないノードの公開鍵はインスタンスにそもそも渡さない
そうすると、暗号化されたパケットは展開できないので、接続を要求することすらできない
監査ログはどうするのか
接続元と接続先で2回ログを取っておく
改ざんするには同時に異なるノードで改ざんする必要があるので、検出が簡単
バッチ処理ではなくストリーミングなので、おかしいデータにはすぐ気づける