AeroNyx ノードのインストールと登録
リポジトリの quickstart コマンドでオープンソースの AeroNyx ノードを Linux サーバーにインストールし、Nodeboard のワンタイムコードで登録して、ネットワークへの受け入れを確認します。リレーの役割、パーミッションレスな参加、TEE デプロイ、AI を使ったインストールについても説明します。
このガイドでは、オープンソースの AeroNyx ノードソフトウェアを Linux サーバーにインストールし、ワンタイムコードを使って Nodeboard のオペレーターアカウントに登録し、ネットワークがそのノードを受け入れたことを確認します。サポートされている手順はリポジトリのスクリプト deploy/node/aeronyx-node.sh quickstart で、これは Nodeboard が生成するコマンドと同じです。
- オペレーターコンソール:app.aeronyx.network
- ソースコード(AGPL-3.0):github.com/AeroNyxNetwork/AeroNyx
ノードを運用する前に、ノードオペレーターポリシーをお読みください。
始める前に
| 項目 | 要件 |
|---|---|
| オペレーティングシステム | systemd を備えた Linux。インストーラーは apt-get(Debian、Ubuntu)、dnf または yum でパッケージをインストールします。 |
| アクセス | root シェル。このガイドのすべてのコマンドは、先に sudo -i を実行していることを前提としています。 |
| TUN デバイス | VPN データプレーンには /dev/net/tun が存在している必要があります。 |
| メモリ | 2 GB 未満の場合、インストーラーは警告を出したうえで続行します。ノードはサーバー上でソースからコンパイルされるため、4 GB 以上のほうが安全です。 |
| ディスク | 空き容量が 4 GB 未満の場合、インストーラーは警告を出したうえで続行します。ビルドキャッシュと、アップグレードワークフローが保持するリリースバックアップのために 20 GB 以上を確保してください。 |
| 受信ポート | 51820/UDP(VPN リスナー)と 8422/TCP(署名付きディスカバリーとピア API)。クラウドのファイアウォールでこれらを開放してください。インストーラーは受信方向のファイアウォールルールを変更しません。 |
| ローカルのみ | 127.0.0.1:8421 はローカルのヘルスチェック・管理 API です。外部に公開しないでください。 |
root が必要な理由:リポジトリは /root/open/AeroNyx に置かれ、インストーラーは /etc/aeronyx と /var/lib/aeronyx をモード 700 で、server.toml をモード 600 で書き込みます。これらのパスを読み取るコマンドは他のユーザーでは失敗し、Git は root が所有するチェックアウトを別のアカウントから読み取ることを拒否します(「dubious ownership」)。
quickstart の動作
quickstart は 4 つのステップを実行し、ホストに変更を加える前に、あなたが承認するまで停止します。
- 解決されたインストール計画を表示します(読み取り専用)。
INSTALLと入力されるのを待ちます。Enter キーを押すと安全に停止します。- 事前チェックを実行し、パッケージとリポジトリで固定された Rust ツールチェーンをインストールし、
/etc/aeronyx/server.tomlが存在しない場合は書き込み(既存のファイルは保持されます)、IP フォワーディングと NAT を設定し、ノードをビルドし、aeronyx-serversystemd ユニットをインストールし、コードを使ってノードのアイデンティティを登録し、サービスを起動して、ネットワークへの受け入れを最大 120 秒待ちます。 statusとhealth --jsonの要約を表示します。
受け入れ待機では、次の点を確認します。ローカルのヘルスが ok を報告していること、バックエンドが最新のポリシーを返したこと(ハートビートの往復が機能していること)、ディスカバリーに検証済みの署名付きピアが少なくとも 1 つあり、ゴシップラウンドを 1 回完了していること、そしてパブリックノードの場合はノードがパブリックプールに掲載されていることです。
ステップ 1:登録コードを作成する
- Nodeboard にサインインし、Registration Codes を開きます。
- Generate Code を選択します。
- コードは非公開にしてください。コードは 15 分で失効し、1 回だけ使用でき、新しいノードをコードを作成したアカウントに紐付けます。
続いて Nodeboard には、quickstart コマンド、ステップごとのプレビューコマンドとインストールコマンド、ステータスコマンド、AI アシスタント用プロンプトが表示されます。Install Progress 列では、インストーラーの進行状況を not_started → planning → running → completed | failed で追跡できます。
バックエンドがコードを確認するのは、インストーラーが登録ステップに到達したときで、これはビルドの後です。小規模なサーバーでの初回ビルドは 15 分を超えることがあります。その結果、コードの失効によって登録が失敗した場合は、新しいコードを生成して quickstart を再実行してください。2 回目の実行ではビルドキャッシュが再利用されます。
ステップ 2:リポジトリを取得または更新する
aeronyx-node.sh はシステムコマンドではありません。リポジトリに同梱されています。以下は Nodeboard が使用する、クローンまたは更新を行うコマンドです。
mkdir -p /root/open && cd /root/open
if [ -d AeroNyx/.git ]; then cd AeroNyx && git fetch origin main && git checkout main && git pull --ff-only origin main; else git clone https://github.com/AeroNyxNetwork/AeroNyx.git AeroNyx && cd AeroNyx; fi
git rev-parse HEAD
スクリプトには必ず --repo-dir "$PWD"(または --repo-dir /root/open/AeroNyx)を渡してください。指定しない場合、install、upgrade、health、status は /opt/aeronyx/AeroNyx をデフォルトとして使用します。
ステップ 3:quickstart を実行する
コマンドラインにコードを含めずに quickstart を実行します。ターミナルで実行すると、非表示のプロンプトでコードの入力を求めるため、コードは画面に表示されず、シェル履歴に保存されず、プロセス引数としても渡されません。
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick \
--node-name "Example1" --region DE --public-vpn
--node-nameは、Nodeboard と VPN ノード一覧に表示される名前です。--regionは ISO 3166-1 alpha-2 の国コードです。--public-vpnはノードをパブリック VPN プールに公開します。ノードを非公開にしておく場合は省略してください。
Nodeboard registration code: でコードを貼り付けて Enter キーを押します。計画を確認してから INSTALL と入力します。
Nodeboard が生成するコマンドについて
Nodeboard の quickstart コマンドは、コードをインラインで含めます。例:AERONYX_REGISTRATION_CODE='<code>' ./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick。この方法でも動作しますが、コードはシェル履歴に保存されます。これを使用する場合は、次のようにしてください。
echo "$HISTCONTROL"を確認します。ignorespaceまたはignorebothが含まれている場合は、コマンドの先頭にスペースを入れると Bash はそれを記録しません。- それ以外の場合は、実行後に
history -d <number>でその項目を削除します。
コードは 1 回限りで 15 分後に失効するため露出は限定されますが、チケット、スクリーンショット、チャットには貼り付けないでください。
非対話型インストール
自動化する場合は、まずプレビューし、その後コードを標準入力で渡します。read -rs を使うと、コードは画面にも履歴にも残りません。
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh plan --repo-dir "$PWD" --branch main
read -rs AERONYX_CODE
printf '%s\n' "$AERONYX_CODE" | ./deploy/node/aeronyx-node.sh install \
--repo-dir "$PWD" --branch main --quick --registration-code-stdin \
--node-name "Example1" --region DE --public-vpn
unset AERONYX_CODE
install --quick は INSTALL の入力を求めません。計画を確認した後にのみ使用してください。
ステップ 4:ノードを検証する
cd /root/open/AeroNyx
systemctl is-active aeronyx-server
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json
正常な新しいノードでは、次のように表示されます。
aeronyx-serverがactiveで、healthがfail=0を報告している- インストーラーが
health=ok、management=fresh、discovery=ready(パブリックノードの場合はpublic_pool=onlineも)とともに[OK] Node admission acceptedを表示した statusがoperator_status=okと次のステップを表示するhealth --jsonの最後の JSON 行に"success":trueが含まれる。警告はchecksの下に表示される
Nodeboard では、コードが completed と表示され、ノードが名前、リージョン、公開設定、最新のハートビートとともに Nodes の下に表示されます。ノード詳細ページには、ready、watch、blocked、waiting のいずれかの Capacity Decision が表示されます。
日常的な確認、ログ、アップグレード、ロールバックについては、AeroNyx ノードの運用と確認を参照してください。
オプション:暗号化リレーに参加する
VPN ノードと暗号化リレーノードは、それぞれ別の選択です。リレーへの参加は 3 つの要素で構成されます。到達可能なパブリックピア API、ブラインドな ChatRelay ストアアンドフォワードの役割、出口を持たない OnionMiddle の役割です。どちらの役割もデフォルト設定では無効です。
-
8422/TCPにインターネットから到達できることを確認します。 -
/etc/aeronyx/server.tomlを編集し(例:nano /etc/aeronyx/server.toml)、[discovery]セクションに次のキーを、あなたのパブリックアドレスを使って設定します。tomlpublic_endpoint = "http://203.0.113.10:8422" public_discovery = true region = "DE" -
ファイルを検証します。
bashcd /root/open/AeroNyx ./target/release/aeronyx-server validate -c /etc/aeronyx/server.toml -
再起動せずに ChatRelay を有効にします。このヘルパーは設定をバックアップし、
ENABLE CHATRELAYの入力を求め、検証を行い、検証に失敗した場合はバックアップを復元します。bash./deploy/node/aeronyx-node.sh chat-relay --repo-dir "$PWD" --enable-chat-relay -
OnionMiddle を有効にし、保護された 1 つのステップで再起動します。
ENABLE ONIONMIDDLEの入力を求め、ノードにアクティブなセッションがある場合や、セッション数を報告できない場合は再起動を拒否します。bash./deploy/node/aeronyx-node.sh onion-middle --repo-dir "$PWD" --enable-onion-middle --restart拒否された場合は、Nodeboard の Settings でノードの Maintenance Mode をオンにし、アクティブなセッションが 0 になるまで待ってから再実行してください。
--yesは付けないでください。確認とアクティブセッションのガードがスキップされます。 -
リレーの準備状況を確認します。
bash./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json
役割を有効にすることは、経路に使用されることと同じではありません。ノードが経路の候補になるのは、ピアから到達可能と認識され、かつ最新のパス証明のエビデンスが存在するようになってからです。ノードディスカバリーと暗号化リレーを参照してください。
Nodeboard を使わずに参加する
join はノードをインストールし、その署名付きディスクリプターをシードノードに送信して Stage-A の受け入れを申請します。登録コードも Nodeboard アカウントも必要ありません。
cd /root/open/AeroNyx
./deploy/node/aeronyx-node.sh join --repo-dir "$PWD" \
--seed http://SEED_PUBLIC_IP:8422 \
--public-endpoint http://YOUR_PUBLIC_IP:8422 --json
--seedには 1〜8 個のパブリックシードノードを指定します。リクエストは最初のノードに送られます。--public-endpointは、あなたのノードの到達可能なピア API です。どちらも、ホスト名ではなくパブリック IP アドレスを含むhttpまたはhttpsの URL でなければなりません。- systemd を備えた Linux 上で root として実行され、Python 3.11 以降、または
tomliパッケージを導入したpython3が必要です。 - 6 つの
[discovery]値(enabled、advertise_self、public_discovery、gossip_enabled、public_endpoint、seed_endpoints)を設定し、ファイルの残りの部分には手を加えません。 - サービスが異なる設定ですでに実行中の場合は、何も変更せずに停止します。
--commit <40-hex SHA>は正確なソースコミットを固定します。--dry-runは変更を加えずに予定される結果を表示します。--check-onlyは何も送信せずに、参加済みのノードを検証します。
成功時の結果は "admission_stage":"stage_a_candidate" で、"route_authority":false と "route_ready":false を伴います。Stage-A の受け入れとは、シードがあなたのディスクリプターを受理したことを意味します。それによってノードがルーティング可能になることも、Nodeboard や VPN プールに掲載されることも、支払いの対象になることもありません。シードの応答は、シードが HTTPS を使用していない限り平文の HTTP で送られるため、暗号学的な受領証ではありません。
Docker による TEE デプロイ
リポジトリには、dstack を実行する機密 VM(Phala Cloud またはセルフホストの Intel TDX)向けのコンテナデプロイも含まれています:deploy/node/Dockerfile、deploy/node/compose.tee.yaml、deploy/node/server.tee.toml、deploy/node/tee-entrypoint.sh。
この役割は VPN ノードではありません。
vpn.enabled = false:TUN デバイス、DNS プロキシ、MemChain はありません。コンテナはすべての Linux ケーパビリティを削除し、no-new-privilegesを指定して実行されます。- オニオンリレー(
advertise_onion_middle = true)、ChatRelay、匿名メールボックスを実行し、8422のみを公開します。 - ノードのアイデンティティは dstack の鍵管理サービスから取得されます(
[server_key] source = "dstack")。鍵ファイルはありません。 - 固定シード。
server.tee.tomlはdiscovery.pinned_seedsで 4 つのシードノードを固定しています。運用者のスナップショットを持たないノードには、ほかに信頼の起点がなく、各固定項目はノード ID に結び付いた TLS 経由でのみ接続されます。固定項目はそのまま使うか、置き換えてください。詳しくは ノードディスカバリーと暗号化マルチホップリレー を参照してください。
デプロイ手順:
ghcr.io/aeronyxnetwork/aeronyx-nodeからリリースイメージを選びます。CI はnode-v*タグからlinux/amd64イメージをビルドし、ビルド来歴のアテステーションを添付します。ダイジェストは、例えばdocker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>で確認できます。compose.tee.yamlで、IMAGE_DIGESTをそのダイジェストに置き換えます。タグではなく、必ずダイジェストで固定してください。dstack VM では、compose ファイルは測定対象のデプロイメントの一部です。AERONYX_PUBLIC_ENDPOINTを、dstack ゲートウェイがポート 8422 に割り当てるhttps://オリジンに設定します。エントリポイントはそれ以外のスキームを拒否します。- 必要に応じて
AERONYX_REGIONを設定します(デフォルトはtee)。 - 初回起動時のみ、
AERONYX_REGISTRATION_CODEを暗号化されたシークレットとして指定します。エントリポイントはこれをaeronyx-server register --code-stdinにパイプで渡します。/var/lib/aeronyxボリュームにnode_info.jsonが作成された後は、コードは不要になります。
コンテナには aeronyx-node.sh は含まれていません。TEE ノードは、Nodeboard と、そのノードのパブリックディスカバリー API を通じて監視してください。
AI コーディングアシスタントを使ったインストール
Claude Code、Codex、OpenClaw、Hermes などのターミナルアシスタントでこの手順を実行できます。Nodeboard では、各コードの横にすぐに使える AI assistant prompt が用意されています。以下のルールは、どのアシスタントを使う場合にも適用されます。
人間のオペレーターは:
- サーバーを用意し、ホストへのすべての変更を承認する
- 計画を読んだうえで、自ら
INSTALLと入力する - 登録コードを非公開に保つ。Nodeboard の AI プロンプトにはコードが含まれているため、それを貼り付けるとアシスタントの提供元とコードを共有することになります。これを避けるには、アシスタントにリポジトリの更新と、コードを必要としない
planの実行を任せ、その後quickstartを自分で実行して、非表示のプロンプトでコードを入力します。検証はアシスタントに引き継ぎます。
アシスタントは次を守る必要があります:
github.com/AeroNyxNetwork/AeroNyxのdeploy/node/aeronyx-node.shのみを使用し、--repo-dirを渡す- スクリプトが文書化しているオプション(
./deploy/node/aeronyx-node.sh help)のみを使用する。不明なオプションは失敗します。例えば、--api-baseを指定するとインストーラーはUnknown optionで停止します。 - ホストに変更を加える前に計画を表示または要約し、承認を待つ
- インストールまたはアップグレードの後に
statusを実行し、operator_status、operator_title、operator_detail、operator_next_stepを報告する。さらに詳細が必要な場合はhealth --jsonを実行する - 警告は警告として報告し、プロセスが実行中であることだけを根拠に成功と宣言しない
- メンテナンスウィンドウでの再起動をあなたが承認しない限り、
upgrade --no-restartを優先する - あなたの明示的な承認なしに、
--forceや--yesを使用したり、アクティブなセッションがあるノードを再起動したりしない - 登録コード、秘密鍵、API シークレット、クライアントのパブリック IP、宛先、DNS の内容、パケットペイロード、チャットの平文を決して出力しない
完了の条件:
- リポジトリが
main上にあり、コミットが報告されている - quickstart または install が
Node admission acceptedで完了している statusがoperator_status=okを報告している、または各警告が説明されているhealth --jsonが"success":trueを報告している- Nodeboard に、最新のハートビートと Capacity Decision を伴ってノードが表示されている
- Alerts / Events → Incident Closure に、そのノードの未確認の
open項目がない - Nodeboard でのそのノードの詳細ページを把握している
登録済みノードが報告する内容
ローカルの診断(status、health、relay-probe)は集計値のみを出力します:サービスの状態、容量、パケットカウンター、ディスカバリーの準備状況、証明の結果です。
登録済みの VPN ノードは、各 VPN セッションについても AeroNyx バックエンドに報告します:セッション ID、クライアントの鍵(client_wallet)、トンネルの仮想 IP、バイト数、時刻情報、リンク品質です。クライアントのパブリック IP、宛先、DNS の内容、パケットペイロードは報告しません。オペレーターは、自分のノードのこれらのセッション記録を Nodeboard で確認できます。Nodeboard オペレーターコンソールガイドを参照してください。他の VPN サーバーと同様に、ノード自体は出口でクライアントのトラフィックを平文で扱うため、オペレーターはノードオペレーターポリシーに従う必要があります。
関連ページ
<!-- faq:start -->よくある質問
aeronyx-node.sh はどこから入手できますか?
これはシステムコマンドではなく、AeroNyx ノードリポジトリ内の deploy/node/aeronyx-node.sh にあるファイルです。https://github.com/AeroNyxNetwork/AeroNyx を /root/open/AeroNyx にクローンまたは更新し、そこから --repo-dir "$PWD" を付けて実行してください。
登録コードをシェル履歴に残さないにはどうすればよいですか?
コードを指定せずに quickstart を実行し、非表示の Nodeboard registration code: プロンプトでコードを入力してください。スクリプトの場合は、read -rs でコードを読み取り、install --quick --registration-code-stdin にパイプで渡します。
スクリプトが /opt/aeronyx/AeroNyx を参照するのはなぜですか?
これはスクリプトに組み込まれた --repo-dir のデフォルト値ですが、Nodeboard は /root/open/AeroNyx にクローンします。すべてのコマンドで --repo-dir を渡し、install、health、status、upgrade のすべてが、サービスの実行元であるチェックアウトを使用するようにしてください。
インストール中にコードが失効した場合はどうなりますか?
登録ステップが失敗し、インストーラーはサービスを起動する前に停止します。コードはビルドの後に確認されるため、新しいコードを生成して quickstart を再実行してください。2 回目の実行ではビルドキャッシュが再利用されます。
ノードを運用するには Nodeboard が必要ですか?
いいえ。join は登録コードなしでノードをインストールし、Stage-A の受け入れを申請します。join で参加したノードはルーティング可能ではなく、Nodeboard や VPN プールにも掲載されず、支払いの対象にもなりません。
機密 VM でノードを実行できますか?
はい。リポジトリには、オニオンリレー、ChatRelay、匿名メールボックスを実行する、dstack 機密 VM 向けの Docker デプロイが含まれています。VPN サービスは提供せず、アイデンティティは dstack の鍵管理サービスから取得します。
<!-- faq:end -->