チュートリアル
VPSでBitcoinのフルノードを稼働させる方法
フルノードは、何が正しいかを他人に尋ねずにBitcoinを使う唯一の方法です。それ以外の選択肢 — ブロックエクスプローラー、公開サーバーと通信するライトウォレット、取引所の残高 — は、履歴を第三者に信頼するということであり、その過程でプライバシーも明け渡すことになります。Bitcoin Core自体のインストールは10分ほどで終わります。ノードが実際に役立つかどうかを決めるのは、その土台となるマシンです — どれだけのディスクを与えたか、アップロードが従量制かどうか、そしてホストに何が見えているか。
フルノードがすること、しないこと
フルノードはすべてのブロックをダウンロードし、すべての署名とすべてのコンセンサスルールを自分自身で検証し、現在使用可能なコインの集合を自ら保持します。フルノードは検証者です。マイナーではありませんし、それ単体ではウォレットでもありません。
- 独立して検証する — エクスプローラーも、取引所も、ライトウォレットのサーバーも、何が正しいか、残高がいくらかをあなたに指図することはできません。
- ウォレットを同期するたびに見知らぬサーバーへアドレスが漏れるのを防ぐ — これはほとんどのBitcoinユーザーにとって最大のプライバシー漏洩です。
- ブロックとトランザクションを他へ中継する — これはあなただけでなくネットワーク全体を助ける部分です。
- 何も稼がず、何にも投票しません。そして鍵の管理がすでにずさんであれば、コインを安全にするわけでもありません。
アーカイブ、pruned、インデックス付き — 3つの大きく異なるディスク使用量
この一つの決定が、必要なプランを左右します。何かを注文する前に決めておきましょう。3つのモードはいずれもチェーンを全く同じ方法で検証します — 違うのは、検証が終わった後にどれだけをディスクに残すかだけです。
- Pruned — Coreはすべてをダウンロードして検証した後、古いブロックファイルを破棄し、直近のものだけを残します。prune=5000であればブロックデータはおよそ5 GBに収まり、UTXOセットとOSを加えても合計は25 GB前後です。
- Archival — すべてのブロックを永久に保持します。ブロックデータだけで現在750 GBを超えており、月におよそ7 GBずつ増加し、これにUTXOセットが上乗せされます。他のピアに過去のブロックを提供したい場合や、後でチェーンを再ダウンロードせずに再インデックスしたい場合に必要です。
- Indexed — archivalに加えてtxindex=1を有効にしたもので、任意のトランザクションをIDで検索できるようになり、ブロックエクスプローラーや一部のサーバーソフトウェアが前提とする形式です。さらに数十ギガバイトが加わり、pruningとの併用はできません。
Bitcoinノード用にVPSを選ぶ — ディスク、RAM、そして無制限ポート
Bitcoin CoreはCPUに関しては寛容ですが、ディスクには気難しい性格です。UTXOデータベースに対するランダムな読み書きこそが同期を速くも悲惨にもする要因であり、だからこそコア数よりもNVMeの方がはるかに重要になります。オフショアVPSシリーズのどのプランもGen4 NVMeをRAID-10で搭載し、帯域も無制限なので、実質的な選択肢は容量だけです。
- prunedノード: VPS-4($7.49/mo) — 2 vCPU EPYC、4 GB DDR5 ECC、60 GB NVMeで、prune=5000とログ分の余裕を十分に確保できます。もっと厳しくprunする場合は$3.99のVPS-2でも十分です。
- 速く同期させたいprunedノード: VPS-8($13.99/mo) — 4 vCPUと8 GBがあれば、Coreに数ギガバイトのdbcacheを割り当てられます。これが同期時間を左右する最大のレバーです。
- archivalノード: VPS-64($89.99/mo)は、800 GBのNVMeでpruneしないチェーンがかろうじて収まる唯一のVPSティアです — しかも現在のサイズでは、伸びしろは1年ほどしか残っていません。
archivalノードやindexedノードを考えているなら、反射的に一番大きなVPSを買う前に、正直に計算してみてください。専用サーバーは$64/moから64 GBのメモリと2 × 1 TB NVMeを搭載しており、最大のVPSティアよりも安く、はるかに余裕があります。チェーンを何年も保持するつもりなら、あるいはElectrumサーバーやKYCなしでホストするサイトを隣に積み重ねるつもりなら、2度アップグレードするより最初からそちらを選びましょう。
ステップバイステップ: 暗号資産のチャージから同期済みノードまで
- 01使い捨てメールでアカウントを作成する必要なのはメールアドレスとパスワードだけ。氏名も電話番号もIDも不要なので、当社側にはノードとあなたを結びつける情報は何も残りません。
- 02暗号資産で残高をチャージするBitcoin、Monero、その他8種のコインのいずれかでプリペイド残高にチャージできます。有効期限も凍結もありません。
- 03VPSをデプロイするプラン、リージョン、DebianまたはUbuntuのイメージを選びます。中央値でおよそ1分でrootアクセスが使えるようになります。
- 04Bitcoin Coreをインストールし、ダウンロードを検証するBitcoin Coreプロジェクトからリリースを取得し、展開する前に署名を確認しましょう。この手順を省略すると、気づかないうちに他人のバイナリを実行することになりかねません。
- 05専用ユーザーを作り、systemd配下で稼働させる専用のbitcoinユーザーと、それが所有するデータディレクトリ、そして再起動後も自動的にノードが復帰するユニットファイルを用意します。
- 06bitcoin.confを記述し、起動してログを確認するpruneレベル、dbcache、ネットワークオプションを設定してサービスを起動し、検証の進捗が1に達するまでログを追いましょう。
本当に重要なbitcoin.confの設定項目
Coreは適切なデフォルト値を備えており、良い設定ファイルは通常6〜7行程度で済みます。以下は、フォーラムの投稿をそのままコピーするのではなく、理解しておく価値がある項目です。
- dbcache — UTXOデータベース用のメモリで、デフォルトは450 MBです。初回同期時に数千まで引き上げるのが最も手軽な高速化策で、その後また下げて構いません。
- prune — ブロックストレージの上限をMB単位で指定する値で、最小は550です。後でprunedからarchivalに切り替えるにはチェーンを再ダウンロードする必要があるため、初回起動前に決めておきましょう。
- txindex=1 — 完全なトランザクションインデックスを構築します。実際に使うツールが必要とする場合にのみ設定してください。後から追加すると再インデックスが強制されます。
- listen=1とポート8333の開放 — 他のピアから到達可能なリスニングノードになります。これが、ネットワークを使うだけの立場と貢献する立場の違いです。
- maxuploadtarget — 送信トラフィックの緩やかな日次上限です。転送量が従量制のホストであれば設定しておく価値があります。
- blocksonly=1 — 未承認トランザクションの中継を止めます。帯域を大きく削減できますが、有用なmempoolを持つことと伝播への貢献を犠牲にします。
初回ブロックダウンロード: 実際に遅くしている原因
初回同期だけが、この作業の中で本当に重い部分です。Coreはチェーン全体を再生し、デフォルトではハードコードされた最近のブロックより前のスクリプト検証をスキップしますが、それでもUTXOセット全体をゼロから再構築します — そのため作業を支配するのは回線速度ではなく、ランダムなディスクI/Oとハッシュ計算です。潤沢なdbcacheを与えたGen4 NVMeであれば、フル同期は通常1日足らずで終わりますが、回転式ディスクでは同じ作業に1週間かかることもあります。コア数よりもメモリを増やしてやり、焦って再起動しないようにしましょう — 進捗は定期的に書き出されますが、フラッシュの途中で再起動すると、せっかく費やしたキャッシュが無駄になります。
ノードをTor経由で稼働させる
リスニングノードは自分の存在をピアに告知します。クリアネットのアドレスの場合、その告知は公開情報となり、あなたのサーバーを指し示します。Coreは第一級のTorサポートを備えています — ローカルのTor SOCKSプロキシと、Torのコントロールポートへのアクセスを与えれば、独自のオニオンサービスを公開し、そこで着信接続を受け付けるようになります。onlynet=onionを追加すれば、クリアネットとは一切通信しなくなります。
これはTorリレーを運用することとは別の仕事です — リレーは他人のトラフィックを運び、意図的に公開されます。ここでのTorは、単に自分のノードがピアに到達するための手段であり、トレードオフもささやかなものです。オニオン限定のノードは同期がやや遅く、利用できるピアの母数も小さくなりますが、常時稼働させておくマシンにとってはほとんど問題になりません。
帯域: 誰も予算に入れていないコスト
リスニングノードは、ダウンロードよりもはるかに多くをアップロードします。初回同期を行う各ピアはあなたから数百ギガバイトを引き出すことができ、接続の良いarchivalノードなら放っておいても月に数テラバイトを平気で提供します。従量制のホストではそれが超過料金の請求書になります — まさに「unlimited」を謳うホスティングプランが規約で除外しようとしているトラフィックそのものです。当社のラインナップでは無制限転送が標準であり、他者のためにチェーンを積極的にシードしたいなら、10 Gbps Unmetered回線($34.99/moから)に専用ポートが用意されています。小規模にとどめたいなら、成り行き任せにせずmaxuploadtargetで意図的に上限を設けましょう。
ウォレット、Electrumサーバー、BTCPayとの接続
ノード単体では、セットアップの半分にすぎません — 肝心なのは、見知らぬ相手のノードではなく自分のノードに、自分のソフトウェアを話しかけさせることです。SparrowやSpecterのようなウォレットは、トンネル経由でCoreのRPCに直接接続します。Electrumプロトコルのウォレットには間に立つサーバーが必要です — electrsやFulcrumは生のブロックファイルから独自のインデックスを構築します。これがチェーンをpruneせずに保持しておく具体的な理由の一つです。そして自分で決済を受け付けたいなら、自分のノードに対して稼働させるBTCPay Serverが決済代行業者を完全に不要にします — KYCなしでウェブサイトを公開するのと同じセルフホスティングの発想です。
どんな構成であっても一つのルールは変わりません — ノードは検証するだけで、鍵は別の場所に置くということです。ハードウェアウォレットかオフライン署名デバイスを使い、レンタルしたマシンには検証以外の役割を持たせないようにしましょう。物理的に所有していない機材は、まとまった資金を置いておく場所ではありません。
自分で所有しないノードの、正直なプライバシー面のトレードオフ
VPS上のノードは、自宅の机の下にあるノードと同一ではありません。その理由を正確に把握しておく価値があります。VPS上のノードは、最大かつ最も一般的な漏洩 — 公開エクスプローラーやサードパーティのElectrumサーバーに問い合わせ、どのアドレスを尋ねたかを正確にログされること — を取り除きます。取り除けないのはホストの存在です。マシンへの物理アクセスを持つ者は、原理上そのディスクとメモリを読み取ることができ、リモートサーバーのフルディスク暗号化が守ってくれるのは盗まれたドライブに対してであって、稼働中のドライブに対してではありません。
したがって本当に問うべきなのは「ホストに見えるか」ではなく「ホストが自分が誰かを知っているか」です。No-KYCホスティングはその問いに答えます — メールアドレスとパスワードだけ、本人確認なし、漏洩したり召喚状で開示されたりする記録も一切ありません。暗号資産の残高から支払うことで、銀行という存在を排除できます。支払い面でどこまで対策するかは脅威モデル次第の選択です — Bitcoinは仮名性であって匿名ではありません。本人確認済みの取引所まで辿れるコインは結局どこかへ行き着きますが、Moneroでチャージすることはそのギャップをプロトコルレベルで埋めます。同じ理屈はMoneroノードの運用にも当てはまり、そこで守っているのはウォレットとノードの間のつながりです。
ノードを止まらせ、放置させ、あるいは無防備にする典型的なミス
- 同期の途中でディスクが満杯になる — pruningを後から決めたのが原因。途中でではなく、初回起動前に決めておきましょう。
- ファイアウォールでポート8333が閉じたままになっていて、ノードが発信接続しか行わず、一つのピアにもサービスを提供できていない。
- 「テストのためだけ」のつもりでRPCを0.0.0.0にバインドしてしまう — パブリックIP上では数時間で発見されます。
- 小さなディスクで反射的にtxindexを有効にしてしまい、後になって削除には完全な再インデックスが必要だと判明する。
- systemdのユニットもなく、ホームディレクトリからrootとしてノードを実行してしまい、再起動一つで実験が静かに終わる。
どれも特殊な失敗ではありません。マシンを価格だけで選び、細部を後回しにしたときに起きることです。実際に使いたいモードに合わせてディスクを選び、ピア用ポートは開け、RPCは閉じておけば、Bitcoinノードは何年も動かし続けられる、最も手のかからないものの一つになります。