GCP無料枠でZerotierVPNを立てる
この記事はWORDIANアドベントカレンダー2019の14日目の記事になります。
今日は自分を編集部員だと思いこんでいるので……。
TL;DR;
Google Cloud Platformには「金を払うと無料」、もといクレカ登録すると使える「無料枠」という概念があります。
この無料枠内で使える構成でVMのインスタンスを立てることができ、ここにVPNサーバを立ててみようという話です。
OpenVPNなどについては先例があり、
のように構築しています。
今回は一般に馴染みが薄いであろう、「ZeroTierVPN」をここに立ててみましょう。
ZeroTierVPN
ZeroTier VPNは独自のアドレス空間によって管理する、様々なプラットフォームに対応したVPNソフトウェアとサーバです。 アカウントを作成したら無料で100個までアカウントにマシンを割り当てられ、簡単にVPNを構築できるのが特徴です。ただし、自前サーバでアカウント管理部分(controller)までやろうとするとその限りでない。
手順(GCP)
上のリンク先などに既にある通りなので、要約すると
- アカウント登録
- カード登録
- マシンを
f1-micro
- ディスクを30GBに拡張
- CentOS8で作成
で、作ったらIPの固定をしてssh鍵の登録をしたら完了です。
Zerotier-One
本来なら「myzerotier.comにアカウントを登録して〜」で終了しますが、 controllerを自分の手で管理したいとなるとそうはいきません。 自分で管理する気がなければそもそもGCP使う必要もないです。ローカルとリモートにzerotier-oneを入れてドキュメントをなぞりましょう。
建てたVMに入り、gitを入れ、
をgit clone
して、Ubuntuでいうところの build-essential
などを入れます。
ところで、f1-microのメモリは600MBそこらです。ちょっと大きくなったC++プログラムなんかはビルドがメモリ不足で失敗します。
令和の時代にswapファイル作るのが有効な案件に出会うとは思ってもみませんでした。 なお、後程「ローカルの仮想環境でビルドして持ち込めばよかったのでは」と突っこまれるなど。
controllerのビルドにはそれ以外に、postgresとそのdev、RabbitMQ用にErlangとRabbitMQを入れる必要があります。sqlite3で代用できる?ようですが、更に複雑化しそうだったのでスルー。
ビルドが終わったら./zerotier-one -d
で起動すると、controllerにアクセスできるようになります。CurlでGETとPOSTをすると簡単に値の確認ができますが、
通常/var/lib/zerotier-one
以下に生えるはずのauthtoken.secretの値をクエリに?auth=
で入れる必要があるので確認しておきましょう。
このとき、
curl -X GET "ZT-Auth" http://localhost:9993/controller?auth=xxxxxxxxxxx
のように叩きます。
この辺りは追記予定。
クライアント(local machine)
実はsnap
で入るよzerotier-one
。サーバ(controller)側のサポートはCentOS7なんで
(サポートするとはいっていない)、VM上で態々ビルドしたワケですが。
注意点としては、snapで入れると、ZEROTIER_HOME
のパスが通常のビルドと違う場所になるので、snapのvar
内の該当箇所にexport
してやる必要があります。
Ubuntu18.04だと /var/snap/zerotier-one/common
ですね。
さあ、zerotier-one.zerotier-one -d
で起動を、しないんだなこれが。
/snap/zerotier-one/current/command-zerotier-one.wrapper
にある PATH
の場所にzerotier-one
の実行ファイルが無かったのでln -s
して/snap/zerotier-one/current/usr/zerotier-one`に繋ぎます。
挫折
あの、サーバの zerotier-oneをローカルホスト以外に割り当てて起動する方法が分からないのですが!
年明けなど、落ち着いた時期に更新したい。