執行與檢查 AeroNyx 節點

AeroNyx12 分鐘閱讀

已註冊 AeroNyx 節點的操作手冊:狀態、健康檢查 JSON、日誌、relay-probe、relay-smoke 與 mailbox-probe、具備自動復原的安全升級、手動復原、重新啟動後的檢查,以及各項訊號在 Nodeboard 中如何呈現。

本操作手冊涵蓋已註冊 AeroNyx 節點的日常指令:狀態、健康檢查、日誌、中繼與信箱證明、安全升級、復原,以及重新啟動後應檢查的項目。所有指令都位於節點儲存庫中(deploy/node/aeronyx-node.sh 與 aeronyx-server 二進位檔),並以程式碼接受的選項呈現。

如果您尚未安裝節點,請先閱讀安裝並註冊 AeroNyx 節點。

開始之前

所有操作都請在 root shell(sudo -i)中執行。設定目錄 /etc/aeronyx 與狀態目錄 /var/lib/aeronyx 的模式為 700,因此以其他使用者身分執行時,狀態、健康檢查、驗證與中繼指令都無法讀取它們。

請切換到服務實際執行所在的儲存庫,並在每個指令碼指令中以 --repo-dir 傳入。若未傳入 --repo-dir,指令碼會假設為 /opt/aeronyx/AeroNyx。

bash
cd "$(systemctl show aeronyx-server -p WorkingDirectory --value)"
pwd

在以 Nodeboard 指令安裝的節點上,這會列印 /root/open/AeroNyx。

指令一覽

指令會變更主機嗎?用途
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"否初步查看:服務狀態、本機健康狀態、探索、升級狀態與建議的下一步
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json否完整診斷;最後一行為 JSON
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --lines 200否近期服務日誌(使用 --follow 持續追蹤)
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json不變更主機;向對等節點傳送一個合成的加密信封中繼路徑是否可用?
./target/release/aeronyx-server relay-smoke --confirm-live-relay-smoke --json建立兩個短期測試工作階段經驗證中繼投遞的端對端證明
./target/release/aeronyx-server mailbox-probe … --confirm-live-mailbox-probe --json在目標節點上建立一個短期信箱經由洋蔥路由的匿名信箱端對端證明
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" …是建置、驗證並切換到新版本,具備復原機制

狀態

bash
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"

status 會依序列印:

  1. systemctl status aeronyx-server(最後 20 行)
  2. 本機健康 API(http://127.0.0.1:8421/api/vpn/health)與營運者狀態 API(http://127.0.0.1:8421/api/operator/status)的摘要
  3. 來自 http://127.0.0.1:8422/api/discovery/status 的本機探索就緒狀態:ChatRelay 公告與對等節點法定數量
  4. 來自 /var/lib/aeronyx/upgrade-status.json 的上一次升級流程狀態
  5. 營運者建議:operator_status、operator_title、operator_detail 與 operator_next_step

建議來自健康檢查。其狀態為下列之一:

operator_status優先順序意義
criticalfix_failed_healthcheck 或 fix_failed_upgrade有檢查失敗,或上一次升級失敗
warningservice_not_active、privacy_protocol_degraded 或 review_warnings服務已停止、本機健康狀態不是 ok,或有警告
infoupgrade_staged已暫存一個建置,正在等待重新啟動
okmonitor沒有失敗的檢查

健康檢查

bash
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json

健康檢查會讀取檔案、systemd 與本機端點;它絕不會變更主機。每項檢查會列印 [PASS]、[WARN] 或 [FAIL],接著是一行 [SUMMARY] pass=… warn=… fail=…,然後是一行 JSON。使用 --json-only 可只列印 JSON。若有任何檢查失敗,指令會以非零狀態結束。

檢查項目:儲存庫、受追蹤的 Cargo.lock 與發行版二進位檔;以 aeronyx-server validate 進行設定驗證;註冊與金鑰檔案;systemd 單元、重新啟動政策與強化設定;記憶體、磁碟以及連接埠 51820 與 8421;IP 轉送與 NAT;本機健康端點;探索;以及版本備份。

主要 JSON 欄位:

欄位意義
success沒有檢查失敗時為 true
summarypass、warn 與 fail 的計數
operator_actionstatus 顯示的建議(status、priority、title、detail、next_step)
local_vpn_healthstatus(健康時為 ok)、active_sessions、placement_readiness、encrypted_message_forwarding
capacity節點回報的容量計數器與風險
discovery_readinessChatRelay 功能(已設定、端點就緒、執行階段就緒、已公告、阻礙因素)、peer_quorum(quorum_ready、valid_peers、healthy_peers、routeable_chat_relays、routeable_onion_middle_hops、next_action)、network_story(單跳與兩跳就緒狀態)以及 recovery_anchor
runtime工作目錄的 Git 提交與分支、受追蹤檔案是否有修改、二進位檔與設定的時間、service_active、service_enabled、systemd 重新啟動政策、單元是否指向此二進位檔與設定、VPN 子網路、版本備份
upgrade_status上一次升級的步驟、狀態與訊息
checks每項檢查及其狀態與訊息

您可以直接讀取原始的本機端點:

bash
curl -s http://127.0.0.1:8421/api/vpn/health
curl -s http://127.0.0.1:8422/api/discovery/status

日誌

bash
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --lines 200
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --follow

這些指令包裝了 journalctl -u aeronyx-server -n <lines> --no-pager(預設 160 行)與 journalctl -u aeronyx-server -f。若要指定時間範圍,請直接使用 journalctl,例如 journalctl -u aeronyx-server --since "1 hour ago"。

中繼與信箱證明

這些指令回答的是不同的問題。請勿將通過的合成探測視為真實投遞的證明。

relay-probe(合成)

bash
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --json
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json

從此節點向一個已探索到的 ChatRelay 對等節點傳送一個合成、隨機且不透明的 BlindRelay 信封,並只回報計數器的變化。--two-hop 會經由一個中間跳點將其傳送到終端節點。結果的 status 為 ok、attention、blocked 或 error;當無法建立兩跳路徑時,two_hop_readiness 會說明缺少什麼。它會讀取對等節點快取與節點金鑰,因此需要 root。它不是使用者流量,也不能證明信箱投遞。fleet-smoke 會對您以 --endpoints 列出的多個公開節點執行類似的合成檢查。

relay-smoke(經驗證、端對端)

bash
./target/release/aeronyx-server relay-smoke --confirm-live-relay-smoke --json

relay-smoke 會以真實用戶端的身分,對本主機上的節點進行操作。它以拋棄式身分開啟兩個短期工作階段,並完成正式環境握手,且固定使用此節點的金鑰。它會透過經驗證的多跳中繼路徑,傳送一則 48 位元組、經端對端加密的隨機訊息。接著,它會驗證該確切請求的已簽署終端回執,從此節點的信箱提取該訊息、解密、確認接收,並檢查信箱已清空、工作階段已關閉。

除非每一道關卡都通過,否則它會拒絕啟動:

關卡失敗時的訊息
本機健康狀態為 ok,且沒有健康檢查失敗node health is not ready / node health has failed checks
節點的作用中工作階段為零relay smoke requires zero active sessions for evidence attribution
對等節點法定數量、路由池與兩跳洋蔥路由均已就緒peer quorum is not ready / route pool is not ready / two-hop onion route is not ready
存在一條經驗證的投遞路徑,且至少有兩個支援投遞回執的對等節點authenticated delivery path is not ready: <reason>,其中原因為 no_receipt_capable_terminal、no_receipt_capable_middle 或 no_network_diverse_receipt_path
設定中已啟用 ChatRelay,且其執行階段已就緒chat relay is disabled in node configuration / chat relay runtime is not ready
中繼保管儲存已驗證具備完整提交持久性(SQLite FULL 或更強)encrypted custody durability is unavailable; restart the node with the current binary / … is not FULL-or-stronger
執行中的二進位檔回報經驗證的洋蔥中繼健康狀態authenticated onion relay health is unavailable; restart the node with the current binary

注意事項:

  • 它必須以 root 身分在節點本身上執行。它會讀取 /etc/aeronyx/server.toml 與節點金鑰,且只接受迴路位址(--server,預設為 127.0.0.1:51820;--health-url,預設為 http://127.0.0.1:8421/api/vpn/health)。
  • --timeout-seconds 設定證明時間窗:5 到 120 秒,預設 30。
  • 作用中工作階段為零,代表服務 VPN 使用者的節點必須先完成排空。請在 Nodeboard 中開啟 Maintenance Mode,並等待工作階段降為零。
  • 兩個測試工作階段是真實的協定工作階段,因此可能會短暫出現在 Nodeboard 的 Sessions 中。
  • 通過時,"status": "passed",terminal_receipt_observed、entry_mailbox_round_trip_verified、entry_mailbox_ack_verified 與 e2e_ciphertext_verified 全部為 true,且 session_cleanup 為 explicit_authenticated_close。terminal_replica_cleanup 為 node_ttl_managed:在入口節點上確認接收,並不會刪除終端節點保存的副本,該副本會自行到期。
  • 任何失敗的關卡、錯誤或缺少的欄位,都是證明失敗,而不是部分成功。

mailbox-probe(以用戶端為來源)

bash
./target/release/aeronyx-server mailbox-probe \
  --seed http://SEED_PUBLIC_IP:8422 \
  --target <64-hex node ID of the mailbox node> \
  --entry <64-hex node ID of a different entry node> \
  --confirm-live-mailbox-probe --json

mailbox-probe 的行為就像應用程式:它使用拋棄式金鑰,從 --seed 節點收集的已簽署描述元建立自己的洋蔥路由,並以純 HTTP 傳送到入口節點的公開對等節點 API,不使用 VPN 工作階段。它會在目標節點上執行完整的匿名信箱生命週期:ticket_issue、lease_create、put、pull_one、ack,以及最後一次 pull_one。它會檢查提取的位元組是否相符,以及信箱之後是否已清空。通過時會回報 "status": "verified" 以及跳點數量。

  • --seed 可以重複指定。若未指定 --entry,路由只有一個跳點。
  • 節點 ID 是節點 64 個字元的十六進位公開金鑰。在您營運的節點上,./target/release/aeronyx-server pubkey -c /etc/aeronyx/server.toml 會列印它。
  • 目標節點必須已啟用匿名信箱([memchain.chat_relay.anonymous_mailbox] enabled = true);此功能預設關閉。
  • --work-bits(預設 12)必須至少等於目標節點的票證工作量設定。--timeout-seconds 以每個請求計(預設 20)。
  • 它不會讀取本機節點檔案,因此可在任何擁有該二進位檔的機器上執行。它證明的是對一個不透明項目的保管,而不是收件者能夠解密它。

安全升級

請使用升級流程,而不是先執行 git pull 再執行 systemctl restart:

bash
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --build-priority live --build-jobs auto

它會執行以下操作:

  1. 取得部署鎖;若工作目錄中受追蹤的檔案有修改,則拒絕執行(--allow-dirty 可覆寫)。
  2. 拉取 main(或以 --commit <40-hex SHA> 在隔離的工作目錄中建置確切的提交)。
  3. 使用儲存庫固定版本的 Rust 工具鏈建置。live 優先順序(預設)與 --build-jobs auto 只使用約一半的 CPU,讓執行中的節點持續提供服務。
  4. 以新的二進位檔驗證 /etc/aeronyx/server.toml。設定檔絕不會被覆寫。
  5. 將實際執行中的二進位檔備份到 /var/lib/aeronyx/releases/。
  6. 在建置完成後、以及即將重新啟動之前,再次檢查作用中工作階段。若有任何作用中工作階段,或服務執行期間無法讀取工作階段數量,它會停止且不切換版本。
  7. 更新 systemd 單元、換入新的二進位檔,並重新啟動服務。
  8. 最多等待 180 秒(90 次檢查,每次間隔 2 秒),直到本機健康狀態從剛建置的提交回報 ok。若重新啟動、服務狀態或健康檢查失敗,它會自動還原先前的二進位檔與單元。
  9. 每種類型保留最近的 10 份備份,並將結果記錄在 /var/lib/aeronyx/upgrade-status.json 中。

若節點有作用中工作階段,建置仍會執行,接著升級會以 Active sessions appeared during compilation. Enter maintenance mode, drain sessions, and run the upgrade again. 停止。請在 Nodeboard 的 Settings 中開啟 Maintenance Mode,等待作用中工作階段降為零,再次執行相同指令。重新建置會重複使用快取。

現在暫存,稍後重新啟動

bash
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --no-restart

--no-restart 會建置、驗證並備份,然後將新的二進位檔安裝到磁碟上而不重新啟動。之後 status 會回報 upgrade_staged。執行中的處理程序仍保留舊版本。之後任何一次重新啟動,包括重新開機或當機後的自動重新啟動,都會啟動新的二進位檔。

若要在維護時段內切換,請排空節點並在不拉取的情況下再次執行升級,讓它以工作階段檢查、健康等待與復原機制,切換到您所暫存的確切版本:

bash
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --skip-pull

請勿使用 --force。即使有作用中工作階段或工作階段數量未知,它也會重新啟動,並中斷使用者的連線。

手動復原

當新版本無法啟動或無法回報健康時,升級會自動復原。若之後要回到較早的版本,請升格其中一個已儲存的二進位檔:

bash
ls -lt /var/lib/aeronyx/releases/
./deploy/node/aeronyx-node.sh promote-binary --repo-dir "$PWD" \
  --binary /var/lib/aeronyx/releases/<aeronyx-server.binary.YYYYMMDD_HHMMSS.xxxxxx>

promote-binary 會以所選的二進位檔驗證設定,且除非作用中工作階段恰好為零,否則拒絕執行。它會要求您輸入 PROMOTE BINARY,將目前的二進位檔備份在其旁邊,換入二進位檔並重新啟動。若服務未在 180 秒內恢復健康,它會還原先前的二進位檔。它只替換二進位檔,不替換 systemd 單元。

任何重新啟動之後

請依序檢查以下項目:

  1. systemctl is-active aeronyx-server 傳回 active。該單元為 Type=notify,因此 active 表示處理程序已回報就緒;在 systemd 放棄之前,啟動最多可能需要 300 秒。
  2. ./deploy/node/aeronyx-node.sh status --repo-dir "$PWD" 顯示 operator_status=ok,或是您理解的警告。
  3. ./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json 以 "success":true 結尾,且 local_vpn_health.status 為 ok。
  4. 執行中的提交是您預期的那一個:curl -s http://127.0.0.1:8421/api/vpn/health 會將其回報為 runtime.git_commit。(health --json 中的 runtime.git_commit 是工作目錄的提交。)
  5. 在最初幾輪 gossip 之後,discovery_readiness.peer_quorum.quorum_ready 為 true。
  6. 對於中繼節點:relay-probe --two-hop --json 回報 ok。
  7. 在 Nodeboard 中,心跳為最新,Rust Runtime 顯示新版本,且重新啟動事件出現在 Alerts / Events 之下。完成後請關閉 Maintenance Mode。
  8. journalctl -u aeronyx-server --since "15 min ago" 中沒有重複出現的錯誤。

在 Nodeboard 中如何呈現

Nodeboard 會接收節點經簽署的心跳與工作階段回報。它本身不會在主機上執行指令;您在其中選擇的動作會排入佇列,由節點在下一次心跳時執行。

在節點上在 Nodeboard 中
服務狀態與本機健康狀態Nodes 清單與節點詳細資料:AeroNyx Health、Rust Runtime、AeroNyx Service Readiness
容量計數器節點詳細資料:Node Capacity 與 Capacity Decision(ready、watch、blocked、waiting)
探索與中繼就緒狀態節點詳細資料:Node Discovery、Encrypted Chat Relay;整個節點群請見 Services
upgrade-status.json節點詳細資料:Rust Upgrade Workflow;Services → Fleet Restart Readiness
服務日誌中的警告節點詳細資料:Recent Operational Events(已去敏感化,最近 24 小時)
重新啟動與復原Alerts / Events → Incident Closure(open、watch、recovered)
Maintenance Mode、最大工作階段數、頻寬、等級Settings,當 Policy Sync 顯示 synced 時即已確認

節點詳細資料中也有一張 Operator Runbook 卡片,針對偵測到的儲存庫路徑提供可複製的 health、status、logs 與暫存升級指令。

輸出包含什麼

status、health、relay-probe、relay-smoke 與 mailbox-probe 只會列印彙總值:計數、狀態、時間資訊與原因代碼。它們不會列印私密金鑰、註冊代碼、用戶端公開 IP、目的地、DNS 內容、酬載或訊息明文。含有用戶端金鑰的工作階段記錄可在 Nodeboard 中查看,而不在這些輸出中;請參閱 Nodeboard 營運者主控台指南。為取得支援而分享輸出時,請分享 JSON 及其時間戳記,而不是主機位址或憑證。

<!-- faq:start -->

常見問題

發現異常時,應該先執行哪個指令?

以 root 身分執行 ./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"。它會顯示服務狀態、本機健康狀態、探索與建議的下一步,而且不會變更主機。

為何健康檢查會因「config missing」或 Git 警告而失敗?

您很可能不是 root,或指向了錯誤的儲存庫。/etc/aeronyx 與 /var/lib/aeronyx 僅限 root 存取,而且若未傳入 --repo-dir,指令碼會檢查 /opt/aeronyx/AeroNyx,而不是服務實際執行所在的工作目錄。

relay-probe 與 relay-smoke 有什麼差別?

relay-probe 會傳送一個合成的不透明信封,只能顯示中繼路徑會接受流量。relay-smoke 則以真實用戶端的身分運作:它會針對一則加密測試訊息,驗證已簽署的終端回執,以及完整的信箱提取與確認接收。

為何 relay-smoke 表示需要零個作用中工作階段?

它會將計數器的變化歸因於自己的測試工作階段,因此只會在閒置的節點上執行。請在 Nodeboard 中開啟 Maintenance Mode,等待作用中工作階段降為零,然後再執行它。

可以在不中斷使用者連線的情況下升級嗎?

您可以在使用者連線期間,以 --no-restart 建置並暫存升級。切換到新版本需要重新啟動,因此請先以 Maintenance Mode 排空節點,再執行 upgrade --skip-pull。

如何回到先前的版本?

升級失敗時會自動復原。若之後要復原,請對 /var/lib/aeronyx/releases/ 中的其中一份備份使用 promote-binary;它要求作用中工作階段為零,且若升格的版本不健康,會還原先前的二進位檔。

<!-- faq:end -->