自己顕示欲の開放治療所

erg, programming and something.

別名:Laughing and Grief 雑記

Latin and Greekは習ったこともない

真面目な記事の他、特定の方には不快と思われる事柄に関して言及を行うことがあります。ちょっと頑張りますが、Blog内で解決できなかった場合要望があれば別ページに技術記事は書き直します

GCP無料枠でZerotierVPNを立てる

この記事はWORDIANアドベントカレンダー2019の14日目の記事になります。

adventar.org

今日は自分を編集部員だと思いこんでいるので……。

TL;DR;

Google Cloud Platformには「金を払うと無料」、もといクレカ登録すると使える「無料枠」という概念があります。

この無料枠内で使える構成でVMインスタンスを立てることができ、ここにVPNサーバを立ててみようという話です。

OpenVPNなどについては先例があり、

sorapoo.hatenablog.com

のように構築しています。

今回は一般に馴染みが薄いであろう、「ZeroTierVPN」をここに立ててみましょう。

ZeroTierVPN

www.zerotier.com

ZeroTier VPNは独自のアドレス空間によって管理する、様々なプラットフォームに対応したVPNソフトウェアとサーバです。 アカウントを作成したら無料で100個までアカウントにマシンを割り当てられ、簡単にVPNを構築できるのが特徴です。ただし、自前サーバでアカウント管理部分(controller)までやろうとするとその限りでない。

手順(GCP

上のリンク先などに既にある通りなので、要約すると

  1. アカウント登録
  2. カード登録
  3. マシンをf1-micro
  4. ディスクを30GBに拡張
  5. 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

のように叩きます。

github.com

この辺りは追記予定。

クライアント(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をローカルホスト以外に割り当てて起動する方法が分からないのですが!

年明けなど、落ち着いた時期に更新したい。