SPO JAPAN GUILD
ステークプール構築

リレー/BP接続設定

リレーとBPの役割

  • リレー … BP とネットワークの橋渡し。ブロック同期・伝播を行う。
  • BP … ブロック生成専用。node.cert / kes.skey / vrf.skey で起動し、自リレーのみに接続する。

1. P2P接続とトポロジーの理解

P2P では接続先の多くはノードが自動で選びます。
必ずつなぎたい相手(自BP・自リレーなど)だけ localRoots に書きます。

接続状態(Hot / Warm / Cold)

ノードは接続先を次の3種類で管理します。

状態説明
Hotブロック同期・伝播に使っているアクティブな接続
Warm接続は維持し、必要時に Hot に昇格する待機接続
Cold候補として保持しているが、まだ接続していないピア

覚えておくとよいこと

  • advertiseはPeer Sharingでその接続先を他ノードへ知らせてよいかを表します。
  • BPや内部用リレーなど、外部へ公開したくない接続先は falseに設定。

リレーノードポートのFW許可

VPS側のFWを使用している場合

ufw は使わず、VPSの管理画面でリレー用ポート(例: 6000)のインバウンドを許可してください。

sudo ufw allow 6000/tcp
sudo ufw reload

BPのインバウンド通信を許可する必要がない理由

Dynamic P2Pでは、**Duplex Connection(双方向接続)**により、BPからRelayへ確立した1本のアウトバウンド接続を双方向のノード間通信に利用できます。 そのため、BPのノードポートへの新規インバウンド接続をFirewallで許可しなくても、BPとRelay間の通信を維持できます。 これによりBPを外部から直接接続できない状態に置くことができ、攻撃対象となる範囲(Attack Surface)を縮小できます。

Engineering dive into Cardano's Dynamic P2P design


2. トポロジーファイルの変更

この手順では、GenesisMode を使用する構成を前提としています。
Genesis Modeでは bootstrapPeers を使用せず、リレーは peerSnapshotFile を使用してGenesis同期を行います。
BPは自リレーのみに接続し、peerSnapshotFile は使用しません。

${NODE_CONFIG}-topology.json

  • リレー … 自BP・他リレーなど、固定したい相手を localRoots に記載。
  • BP … 自リレーだけ。useLedgerAfterSlot は -1(台帳ピアを使わない)。
  • IP … サーバーのパブリック(固定)アドレス。ポートはノード用(SSH と混同しない)。

同期が 100% になってから以降の手順を実施してください。

cardano-cli latest query tip ${NODE_NETWORK} | grep syncProgress
期待される表示例:
"syncProgress": "100.00"

主な項目

項目説明
localRoots常に維持したいピアのグループ(グループ間で同じピアを重ねない)
accessPointsIP または DNS とポート
advertisePeer Sharing でその接続先を他ノードへ知らせてよいか。BP や内部用リレーなど、公開したくない接続先は falseに設定
trustableこの手順では、BP用の自リレーグループは true、リレー用のグループは false に設定します。
hotValencyそのグループの Hot 接続数(旧 valency と同義)
diffusionModeUFW 等で通信元を制限している場合、InitiatorOnly は不要です。diffusionMode を省略すると InitiatorAndResponder になります。
peerSnapshotFileGenesis Modeの初期同期に使用するBig Ledger Peerのスナップショットファイル。
useLedgerAfterSlotリレーは手順例の値、BP は -1

手順

5. ノード起動スクリプトの作成 で決めたノード用ポートに合わせること。

以下のフォームで、接続先に合わせたファイル作成コマンドを生成できます。 リレー用の Peer Snapshot パスは、初期値 $NODE_HOME/${NODE_CONFIG}-peer-snapshot.json の環境変数をそのまま使用できます。BP用では Peer Snapshot を使用しません。

トポロジーファイル作成コマンドを生成

接続先の情報を入力してください。入力内容はSJGサーバーには送信・保存されず、再読み込みでリセットされます。

作成対象を切り替えると、自リレーの入力欄をリセットします。

リレー1用のトポロジーを作成します。BP・自分が管理する他のリレー・外部リレーを分けて入力してください。不要なリレー欄は削除できます。

BP(localRoots)

有効な IP アドレスを入力してください。

ポートは 1〜65535 の整数で入力してください。

BP ノードで次のコマンドを実行し、表示された PORT= の値をポート欄に入力してください。

grep -E '^[[:space:]]*PORT=' "$NODE_HOME/startBlockProducingNode.sh"

advertise: false(固定)

自リレー localRoots

リレー2の IP・ポートを入力してください。それ以外にも接続する自リレーがある場合は「+ 自リレーを追加」で登録してください。リレー1自身は登録しないでください。

リレー2

有効な IP アドレスまたは DNS 名を入力してください。

この接続先を他のノードに知らせるか。デフォルトは true

外部リレー publicRoots

外部リレー(publicRoots)は、通常は追加しなくても問題ありません。必要な場合のみ登録してください。

通常はこのままで問題ありません。独自のパスを採用している場合は変更してください。環境変数はコマンド実行時に対象ノードの値へ展開されます。

リレー1用 ファイル作成コマンド

以下のコマンドをコピーしてサーバーで実行してください

入力内容を確認してください。すべての入力が有効になるとコマンドが表示されます。

生成したファイル作成コマンドを対象ノードで実行してください。環境変数が展開され、${NODE_HOME}/${NODE_CONFIG}-topology.json に保存されます。

構文チェックと再起動

jq . $NODE_HOME/${NODE_CONFIG}-topology.json

JSON がそのまま表示されれば問題ありません。
parse error のときは {} [] , を確認してください。

ノードを再起動します。

sudo systemctl reload-or-restart cardano-node

Last updated on

Cookieの使用について

当サイトでは、ドキュメントの効果測定と利用状況の把握のため、Google Analytics を使用しています。

同意すると、分析用 Cookie が有効になります。