サーバー間通信の暗号化を Tailscale に丸投げする
まとめ
- Erlang/OTP の分散機能利用時のサーバー間通信はデフォルトでは暗号化されていない
- Erlang/OTP が提供する分散機能の暗号化は TLS を利用する
- Tailscale で P2P VPN をサーバー間で張って Erlang/OTP の分散機能オススメ
Erlang 分散機能
時雨堂で開発しているミドルウェアソフトウェアは Erlang/OTP (以下 Erlang) を利用しています。
Erlang は分散機能が入っています。分散機能を簡単に説明すると、他のサーバーにある Erlang とやりとりができる仕組みです。
このときにサーバ間を利用する際に、暗号化が必要になりますが、Erlang が標準で提供為てる機能はサーバー間通信を TLS にする方法がありますが、Erlang に TLS 処理させるのは CPU も食べるしお勧めはできません。
Erlang -- Using TLS for Erlang Distribution
Tailscale を利用する
そこで、時雨堂では Tailscale を利用してサーバー間を WireGuard (P2P VPN) で繋いで、その上で Erlang の分散機能を利用するようにしています。これで Erlang の暗号化機能を利用せずに、安心して Erlang の分散機能が利用できます。
実際に Tailscale で繋いだサーバー間の ping の値を雑にのせておきますので参考にしてみてください。とても速いです。
IP アドレスは出てますが、これは Tailscale が利用するキャリアグレード NAT 用の予約アドレスなので気にしなくで大丈夫です。
DataPacket (Tokyo) -> Vultr (Tokyo)
パブリックネットワーク。
64 bytes from 100.71.97.122: icmp_seq=3 ttl=64 time=0.857 ms
64 bytes from 100.71.97.122: icmp_seq=4 ttl=64 time=0.756 ms
64 bytes from 100.71.97.122: icmp_seq=5 ttl=64 time=1.41 ms
64 bytes from 100.71.97.122: icmp_seq=6 ttl=64 time=0.888 ms
64 bytes from 100.71.97.122: icmp_seq=7 ttl=64 time=0.892 ms
DataPacket (Tokyo) -> Linode (Tokyo)
パブリックネットワーク。
64 bytes from 100.120.18.29: icmp_seq=3 ttl=64 time=0.894 ms
64 bytes from 100.120.18.29: icmp_seq=4 ttl=64 time=0.777 ms
64 bytes from 100.120.18.29: icmp_seq=5 ttl=64 time=1.00 ms
64 bytes from 100.120.18.29: icmp_seq=6 ttl=64 time=0.962 ms
64 bytes from 100.120.18.29: icmp_seq=7 ttl=64 time=1.67 ms
DataPacket -> DataPacket
プライベートネットワーク。
64 bytes from 100.87.92.1: icmp_seq=3 ttl=64 time=0.698 ms
64 bytes from 100.87.92.1: icmp_seq=4 ttl=64 time=0.731 ms
64 bytes from 100.87.92.1: icmp_seq=5 ttl=64 time=0.633 ms
64 bytes from 100.87.92.1: icmp_seq=6 ttl=64 time=0.724 ms
64 bytes from 100.87.92.1: icmp_seq=7 ttl=64 time=0.598 ms
Tailscale のお値段
Tailscale はTeam プランを利用しています。
1 ユーザ、年間 $60 で、5 デバイス利用できます。
10 デバイスを月 $4.20 で追加できます。
蛇足
ちなみに時雨堂で管理しているサーバーは全て Tailsacle がインストールされています。
Tailscale を利用する事でマルチクラウドを利用しても、特に気にすることなくサーバー間通信ができますし、VictoriaMetrics を利用した監視も、全て Tailscale 経由です。HTTPS とかは利用していません。
また、Grafana へのアクセスも Tailscale 経由で利用しており、Tailscale にがっつり依存しています。
気軽にマルチクラウドででクラスターが組めるのも良いです。実際 Sora Labo では 3 種類のクラウド間を Tailscale で繋いで 12 ノードでクラスターを組んでいますが、今まで一度も問題は出ていません。
Discussion