VPSのLNDと自宅のBitcoin Coreを接続してみる
2台目ノードとして使っていたラズパイが壊れてしまったので、新しくノードを建てる環境として、初めてVPSサービスを利用してみました。
Bitcoin Coreも一緒に動かそうと思ったのですが、自宅に1台目のノードがあるので、せっかくなのでそちらからブロックデータ等を取得したいと思います。
この構成にどういった需要があるか謎ですが、ラズパイの供給が安定するまでの一時的な措置としてはアリかもしれません。
※海外のVPSにbitcoinを置くことになるので、少額での利用をおすすめします。
環境
- Bitcoin Core version 23.0.0
- LND version 0.14.3-beta
- Tailscale version 1.24.2
1. Time4VPSの契約
今回はTime4VPSを利用してみました。理由は単純で、ダントツで安かったからです。
一番安いプラン(メモリ2GB・ストレージ20GB・帯域幅2TB)でも、現在は1.99ユーロ/月で契約できます。国内のVPS業者と比較すると破格の値段です。
LNDを動かすだけならC2かC4プランで十分かと思いますが、リバランスツール等を入れてガシガシ動かしたいという方はC8プランがいいと思います。
Bitcoin払いにも対応してたので、Bitcoinで支払いました(Lightningは未対応)。
1承認でインスタンスがアクティブになります。
契約できたら、「Install OS」から、OSをインストールします(今回はUbuntu 20.04)。
「Login Details」からrootのパスワードが確認できるので、SSHでログインし、諸々の設定(一般ユーザーの追加、公開鍵認証、ファイアウォール等)を行います。
2. Tailscaleのインストール
今回はBitcoin CoreとLNDを接続するために、Tailscaleを使ってみました。UmbrelのApp Storeからもインストール可能で、ポートやファイアフォールを意識せずに、簡単にVPN環境を構築できるのでめちゃくちゃ便利でした。
まずは、こちらを参考に、VPSとBitcoin Coreを動かしてる環境にTailscaleをインストールします。tailscale up
の後に出力されるURLにアクセスし、アカウント認証すれば簡単にTailscaleネットワークに参加できます。
3. Bitcoin Coreの構成
リモートのLNDと接続できるように、Bitcoin CoreのRPCとZMQの設定を以下のようにします。
rpcbind=0.0.0.0
rpcallowip=100.64.0.0/10
zmqpubrawtx=tcp://0.0.0.0:28332
zmqpubrawtx=tcp://0.0.0.0:28333
設定を変えた後、Bitcoin Coreを再起動します。
Umbrelの場合、Bitcoin CoreはDockerで動いているので、コンテナのポートをいくつか公開する必要があります。
$ nano ~/umbrel/docker-compose.yml
以下の部分を追加します。
...
bitcoin:
...
ports:
- "$BITCOIN_P2P_PORT:$BITCOIN_P2P_PORT"
- "$BITCOIN_RPC_PORT:$BITCOIN_RPC_PORT" # 追加
- "$BITCOIN_ZMQ_RAWBLOCK_PORT:$BITCOIN_ZMQ_RAWBLOCK_PORT" # 追加
- "$BITCOIN_ZMQ_RAWTX_PORT:$BITCOIN_ZMQ_RAWTX_PORT" # 追加
コンテナを再起動します。
$ sudo ~/umbrel/scripts/stop
$ sudo ~/umbrel/scripts/start
4. LNDの構成
LNDをダウンロードし、VPSにインストールします。
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.14.3-beta/lnd-linux-amd64-v0.14.3-beta.tar.gz
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.14.3-beta/manifest-roasbeef-v0.14.3-beta.sig
$ wget https://github.com/lightningnetwork/lnd/releases/download/v0.14.3-beta/manifest-v0.14.3-beta.txt
$ gpg --verify manifest-roasbeef-v0.14.3-beta.sig manifest-v0.14.3-beta.txt
gpg: Signature made Tue 19 Apr 2022 05:26:47 AM JST
gpg: using RSA key 60A1FA7DA5BFF08BDCBBE7903BBD59E99B280306
gpg: Good signature from "Olaoluwa Osuntokun <laolu32@gmail.com>" [unknown]
...
$ grep lnd-linux-amd64-v0.14.3-beta.tar.gz manifest-v0.14.3-beta.txt | sha256sum -c -
lnd-linux-amd64-v0.14.3-beta.tar.gz: OK
$ tar -xvf lnd-linux-amd64-v0.14.3-beta.tar.gz
lnd-linux-arm64-v0.14.3-beta/lnd
lnd-linux-arm64-v0.14.3-beta/lncli
lnd-linux-arm64-v0.14.3-beta/
$ sudo install -m 0755 -o root -g root -t /usr/local/bin lnd-linux-amd64-v0.14.3-beta/*
次にbitcoinノードでTailscale IPアドレスを確認します。
$ tailscale ip -4
100.x.y.z
確認出来たらLNDに設定してきます。~/.lnd/lnd.confを作成し、以下のようにします。
[Bitcoin]
bitcoin.active=1
bitcoin.mainnet=1
bitcoin.node=bitcoind
[Bitcoind]
bitcoind.rpcuser=xxx
bitcoind.rpcpass=xxx
bitcoind.rpchost=100.x.y.z
bitcoind.zmqpubrawblock=tcp://100.x.y.z:28332
bitcoind.zmqpubrawtx=tcp://100.x.y.z:28333
100.x.y.z
は確認したTailscaleのIPアドレスにします。bitcoind.rpcuser
とbitcoind.rpcpass
は適宜変更してください。
Umbrelの場合、bitcoind.rpcuser
とbitcoind.rpcpass
は~/umbrel/lnd/lnd.conf、もしくは~/umbrel/.envで確認できます。
あとはLNDを起動し、問題なく動けば完了です。
$ lnd
なかなかgraphの同期が終わらなかったので、大丈夫かな~と思ってたのですが、だいたい1日半ほどで終わりました。