リレー/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/tcpsudo ufw reloadBPのインバウンド通信を許可する必要がない理由
Dynamic P2Pでは、**Duplex Connection(双方向接続)**により、BPからRelayへ確立した1本のアウトバウンド接続を双方向のノード間通信に利用できます。 そのため、BPのノードポートへの新規インバウンド接続をFirewallで許可しなくても、BPとRelay間の通信を維持できます。 これによりBPを外部から直接接続できない状態に置くことができ、攻撃対象となる範囲(Attack Surface)を縮小できます。
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 | 常に維持したいピアのグループ(グループ間で同じピアを重ねない) |
| accessPoints | IP または DNS とポート |
| advertise | Peer Sharing でその接続先を他ノードへ知らせてよいか。BP や内部用リレーなど、公開したくない接続先は falseに設定 |
| trustable | この手順では、BP用の自リレーグループは true、リレー用のグループは false に設定します。 |
| hotValency | そのグループの Hot 接続数(旧 valency と同義) |
| diffusionMode | UFW 等で通信元を制限している場合、InitiatorOnly は不要です。diffusionMode を省略すると InitiatorAndResponder になります。 |
| peerSnapshotFile | Genesis Modeの初期同期に使用するBig Ledger Peerのスナップショットファイル。 |
| useLedgerAfterSlot | リレーは手順例の値、BP は -1 |
手順
5. ノード起動スクリプトの作成 で決めたノード用ポートに合わせること。
以下のフォームで、接続先に合わせたファイル作成コマンドを生成できます。
リレー用の Peer Snapshot パスは、初期値 $NODE_HOME/${NODE_CONFIG}-peer-snapshot.json の環境変数をそのまま使用できます。BP用では Peer Snapshot を使用しません。
トポロジーファイル作成コマンドを生成
接続先の情報を入力してください。入力内容はSJGサーバーには送信・保存されず、再読み込みでリセットされます。
作成対象を切り替えると、自リレーの入力欄をリセットします。
リレー1用のトポロジーを作成します。BP・自分が管理する他のリレー・外部リレーを分けて入力してください。不要なリレー欄は削除できます。
自リレー localRoots
リレー2の IP・ポートを入力してください。それ以外にも接続する自リレーがある場合は「+ 自リレーを追加」で登録してください。リレー1自身は登録しないでください。
外部リレー publicRoots
外部リレー(publicRoots)は、通常は追加しなくても問題ありません。必要な場合のみ登録してください。
通常はこのままで問題ありません。独自のパスを採用している場合は変更してください。環境変数はコマンド実行時に対象ノードの値へ展開されます。
リレー1用 ファイル作成コマンド
以下のコマンドをコピーしてサーバーで実行してください
入力内容を確認してください。すべての入力が有効になるとコマンドが表示されます。
生成したファイル作成コマンドを対象ノードで実行してください。環境変数が展開され、${NODE_HOME}/${NODE_CONFIG}-topology.json に保存されます。
構文チェックと再起動
jq . $NODE_HOME/${NODE_CONFIG}-topology.jsonJSON がそのまま表示されれば問題ありません。
parse error のときは {} [] , を確認してください。
ノードを再起動します。
sudo systemctl reload-or-restart cardano-nodeLast updated on