Ejecutar y comprobar un nodo de AeroNyx
Un manual de operaciones para nodos de AeroNyx registrados: status, JSON de health, registros, relay-probe, relay-smoke y mailbox-probe, actualizaciones seguras con reversión automática, reversión manual, comprobaciones tras un reinicio y cómo aparece cada señal en Nodeboard.
Este manual de operaciones cubre los comandos de uso diario para un nodo de AeroNyx registrado: estado, comprobación de salud, registros, pruebas de relé y de buzón, actualizaciones seguras, reversión y qué comprobar después de un reinicio. Todos los comandos están en el repositorio del nodo (deploy/node/aeronyx-node.sh y el binario aeronyx-server) y se muestran con las opciones que acepta el código.
Si todavía no ha instalado un nodo, empiece por Instalar y registrar un nodo de AeroNyx.
Antes de empezar
Ejecute todo desde un shell de root (sudo -i). El directorio de configuración /etc/aeronyx y el directorio de estado /var/lib/aeronyx tienen el modo 700, por lo que los comandos de estado, comprobación de salud, validación y relé no pueden leerlos como otro usuario.
Cámbiese al repositorio desde el que se ejecuta realmente el servicio y páselo con --repo-dir en cada comando del script. Sin --repo-dir, el script supone /opt/aeronyx/AeroNyx.
cd "$(systemctl show aeronyx-server -p WorkingDirectory --value)"
pwd
En los nodos instalados con el comando de Nodeboard, esto muestra /root/open/AeroNyx.
Comandos de un vistazo
| Comando | ¿Modifica el host? | Úselo para |
|---|---|---|
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD" | No | Primera revisión: estado del servicio, salud local, descubrimiento, estado de la actualización y el siguiente paso recomendado |
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json | No | Diagnóstico completo; la última línea es JSON |
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --lines 200 | No | Registro reciente del servicio (--follow para seguirlo en tiempo real) |
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json | No modifica el host; envía a los pares un sobre cifrado sintético | ¿Se puede usar la ruta de relé? |
./target/release/aeronyx-server relay-smoke --confirm-live-relay-smoke --json | Crea dos sesiones de prueba de corta duración | Prueba de extremo a extremo de la entrega autenticada por relé |
./target/release/aeronyx-server mailbox-probe … --confirm-live-mailbox-probe --json | Crea un buzón de corta duración en el nodo de destino | Prueba de extremo a extremo del buzón anónimo a través de la ruta cebolla |
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" … | Sí | Compilar, validar y cambiar a una nueva versión con reversión |
Estado
./deploy/node/aeronyx-node.sh status --repo-dir "$PWD"
status muestra, en este orden:
systemctl status aeronyx-server(últimas 20 líneas)- un resumen de la API local de salud (
http://127.0.0.1:8421/api/vpn/health) y de la API de estado del operador (http://127.0.0.1:8421/api/operator/status) - la preparación del descubrimiento local desde
http://127.0.0.1:8422/api/discovery/status: anuncio de ChatRelay y quórum de pares - el estado del último flujo de actualización desde
/var/lib/aeronyx/upgrade-status.json - una recomendación para el operador:
operator_status,operator_title,operator_detailyoperator_next_step
La recomendación procede de la comprobación de salud. Su estado es uno de los siguientes:
operator_status | Prioridad | Significado |
|---|---|---|
critical | fix_failed_healthcheck o fix_failed_upgrade | Falló una comprobación o falló la última actualización |
warning | service_not_active, privacy_protocol_degraded o review_warnings | El servicio está caído, la salud local no es ok o hay advertencias |
info | upgrade_staged | Hay una compilación preparada a la espera de un reinicio |
ok | monitor | Ninguna comprobación ha fallado |
Comprobación de salud
./deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --json
La comprobación de salud lee archivos, systemd y los endpoints locales; nunca modifica el host. Cada comprobación muestra [PASS], [WARN] o [FAIL], después una línea [SUMMARY] pass=… warn=… fail=… y luego una línea de JSON. Use --json-only para mostrar solo el JSON. El comando termina con un estado distinto de cero si alguna comprobación falla.
Qué comprueba: el repositorio, el Cargo.lock versionado y el binario de la versión; la validación de la configuración con aeronyx-server validate; los archivos de registro y de claves; la unidad systemd, la política de reinicio y el endurecimiento; la memoria, el disco y los puertos 51820 y 8421; el reenvío IP y la NAT; el endpoint local de salud; el descubrimiento; y las copias de seguridad de versiones.
Campos JSON principales:
| Campo | Significado |
|---|---|
success | true cuando ninguna comprobación ha fallado |
summary | Recuentos de pass, warn y fail |
operator_action | La recomendación que muestra status (status, priority, title, detail, next_step) |
local_vpn_health | status (ok cuando está en buen estado), active_sessions, placement_readiness, encrypted_message_forwarding |
capacity | Contadores de capacidad y riesgos que informa el nodo |
discovery_readiness | Capacidad de ChatRelay (configurada, endpoint listo, entorno de ejecución listo, anunciada, bloqueos), peer_quorum (quorum_ready, valid_peers, healthy_peers, routeable_chat_relays, routeable_onion_middle_hops, next_action), network_story (preparación de un salto y de dos saltos) y recovery_anchor |
runtime | Commit y rama de Git del checkout, si hay archivos versionados modificados, horas del binario y de la configuración, service_active, service_enabled, política de reinicio de systemd, si la unidad apunta a este binario y a esta configuración, subred de la VPN, copias de seguridad de versiones |
upgrade_status | El último paso, estado y mensaje de la actualización |
checks | Todas las comprobaciones con su estado y mensaje |
Puede leer directamente los endpoints locales sin procesar:
curl -s http://127.0.0.1:8421/api/vpn/health
curl -s http://127.0.0.1:8422/api/discovery/status
Registros
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --lines 200
./deploy/node/aeronyx-node.sh logs --repo-dir "$PWD" --follow
Estos comandos envuelven journalctl -u aeronyx-server -n <lines> --no-pager (160 líneas de forma predeterminada) y journalctl -u aeronyx-server -f. Use journalctl directamente para intervalos de tiempo, por ejemplo journalctl -u aeronyx-server --since "1 hour ago".
Pruebas de relé y de buzón
Estos comandos responden a preguntas distintas. No considere que una sonda sintética superada demuestra una entrega real.
relay-probe (sintética)
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --json
./deploy/node/aeronyx-node.sh relay-probe --repo-dir "$PWD" --two-hop --json
Envía un sobre BlindRelay sintético, aleatorio y opaco desde este nodo a un par ChatRelay descubierto e informa solo de los cambios en los contadores. --two-hop lo envía a través de un salto intermedio hasta un nodo terminal. El status del resultado es ok, attention, blocked o error, y two_hop_readiness explica qué falta cuando no es posible una ruta de dos saltos. Lee la caché de pares y la clave del nodo, por lo que necesita root. No es tráfico de usuarios y no demuestra la entrega en el buzón. fleet-smoke ejecuta una comprobación sintética similar en varios nodos públicos que usted indica con --endpoints.
relay-smoke (autenticada, de extremo a extremo)
./target/release/aeronyx-server relay-smoke --confirm-live-relay-smoke --json
relay-smoke actúa como un cliente real contra el nodo de este host. Abre dos sesiones de corta duración con identidades desechables y completa el protocolo de enlace de producción, fijado a la clave de este nodo. Envía un mensaje aleatorio de 48 bytes, cifrado de extremo a extremo, por la ruta de relé multisalto autenticada. Después verifica el acuse terminal firmado para esa solicitud concreta, recupera el mensaje del buzón de este nodo, lo descifra, lo confirma y comprueba que el buzón queda vacío y que las sesiones están cerradas.
Se niega a empezar salvo que se superen todos los controles:
| Control | Falla con |
|---|---|
La salud local es ok y ninguna comprobación de salud ha fallado | node health is not ready / node health has failed checks |
| El nodo tiene cero sesiones activas | relay smoke requires zero active sessions for evidence attribution |
| El quórum de pares, el grupo de rutas y la ruta cebolla de dos saltos están listos | peer quorum is not ready / route pool is not ready / two-hop onion route is not ready |
| Existe una ruta de entrega autenticada con al menos dos pares capaces de emitir acuses de entrega | authenticated delivery path is not ready: <reason>, donde el motivo es no_receipt_capable_terminal, no_receipt_capable_middle o no_network_diverse_receipt_path |
| ChatRelay está activado en la configuración y su entorno de ejecución está listo | chat relay is disabled in node configuration / chat relay runtime is not ready |
El almacenamiento de custodia del relé tiene verificada la durabilidad completa de los commits (SQLite FULL o superior) | encrypted custody durability is unavailable; restart the node with the current binary / … is not FULL-or-stronger |
| El binario en ejecución informa de la salud del relé cebolla autenticado | authenticated onion relay health is unavailable; restart the node with the current binary |
Notas:
- Debe ejecutarse como root en el propio nodo. Lee
/etc/aeronyx/server.tomly la clave del nodo, y solo acepta direcciones de bucle local (--server, valor predeterminado127.0.0.1:51820;--health-url, valor predeterminadohttp://127.0.0.1:8421/api/vpn/health). --timeout-secondsestablece la ventana de la prueba: de 5 a 120 segundos, 30 de forma predeterminada.- Cero sesiones activas significa que un nodo que da servicio a usuarios de la VPN debe vaciarse primero. Active el modo de mantenimiento en Nodeboard y espere a que las sesiones lleguen a cero.
- Las dos sesiones de prueba son sesiones reales del protocolo, por lo que pueden aparecer brevemente en Sessions de Nodeboard.
- Una prueba superada tiene
"status": "passed", conterminal_receipt_observed,entry_mailbox_round_trip_verified,entry_mailbox_ack_verifiedye2e_ciphertext_verifiedtodos entrue, ysession_cleanupesexplicit_authenticated_close.terminal_replica_cleanupesnode_ttl_managed: confirmar en el nodo de entrada no elimina la copia que conserva el nodo terminal, que caduca por sí sola. - Cualquier control fallido, error o campo ausente es una prueba fallida, no un éxito parcial.
mailbox-probe (desde el lado del cliente)
./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 se comporta como una aplicación: usa claves desechables, construye su propia ruta cebolla a partir de los descriptores firmados recopilados de los nodos --seed y envía HTTP sin cifrar a la API entre pares pública del nodo de entrada, sin sesión VPN. Ejecuta el ciclo de vida completo del buzón anónimo en el nodo de destino: ticket_issue, lease_create, put, pull_one, ack y un pull_one final. Comprueba que los bytes recuperados coinciden y que después el buzón queda vacío. Una prueba superada informa "status": "verified" y el número de saltos.
--seedse puede repetir. Sin--entry, la ruta tiene un salto.- Un ID de nodo es la clave pública del nodo en 64 caracteres hexadecimales. En un nodo que usted opera,
./target/release/aeronyx-server pubkey -c /etc/aeronyx/server.tomllo muestra. - El destino debe tener activado el buzón anónimo (
[memchain.chat_relay.anonymous_mailbox] enabled = true); está desactivado de forma predeterminada. --work-bits(12 de forma predeterminada) debe ser al menos el ajuste de trabajo de tickets del destino.--timeout-secondsse aplica a cada solicitud (20 de forma predeterminada).- No lee archivos locales del nodo, por lo que puede ejecutarse desde cualquier máquina que tenga el binario. Demuestra la custodia de un elemento opaco, no que un destinatario pueda descifrarlo.
Actualizar de forma segura
Use el flujo de actualización, no git pull seguido de systemctl restart:
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --build-priority live --build-jobs auto
Qué hace:
- Adquiere un bloqueo de despliegue y se niega a ejecutarse si hay archivos versionados modificados en el checkout (
--allow-dirtylo anula). - Obtiene
main(o compila un commit exacto en un checkout aislado con--commit <40-hex SHA>). - Compila con la cadena de herramientas de Rust fijada por el repositorio. La prioridad
live(la predeterminada) y--build-jobs autousan aproximadamente la mitad de las CPU para que el nodo en ejecución siga dando servicio. - Valida
/etc/aeronyx/server.tomlcon el nuevo binario. El archivo de configuración nunca se sobrescribe. - Hace una copia de seguridad del binario que realmente está en ejecución en
/var/lib/aeronyx/releases/. - Comprueba las sesiones activas después de la compilación y de nuevo justo antes del reinicio. Si hay alguna, o si no se puede leer el recuento mientras el servicio está en ejecución, se detiene sin cambiar de versión.
- Actualiza las unidades systemd, coloca el nuevo binario y reinicia el servicio.
- Espera hasta 180 segundos (90 comprobaciones, con 2 segundos de separación) a que la salud local informe
okdesde el commit que acaba de compilar. Si fallan el reinicio, el estado del servicio o la comprobación de salud, restaura automáticamente el binario y las unidades anteriores. - Conserva las 10 copias de seguridad más recientes de cada tipo y registra el resultado en
/var/lib/aeronyx/upgrade-status.json.
Si el nodo tiene sesiones activas, la compilación se ejecuta igualmente y después la actualización se detiene con Active sessions appeared during compilation. Enter maintenance mode, drain sessions, and run the upgrade again. Active Maintenance Mode en Settings de Nodeboard, espere a que las sesiones activas lleguen a cero y vuelva a ejecutar el mismo comando. La recompilación reutiliza la caché.
Preparar ahora, reiniciar más tarde
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --no-restart
--no-restart compila, valida y hace la copia de seguridad, y después instala el nuevo binario en disco sin reiniciar. A partir de entonces, status informa upgrade_staged. El proceso en ejecución mantiene la versión anterior. Cualquier reinicio posterior, incluido un reinicio del sistema o un reinicio automático tras un fallo, arranca el nuevo binario.
Para hacer el cambio en una ventana de mantenimiento, vacíe el nodo y vuelva a ejecutar la actualización sin obtener cambios, de modo que cambie exactamente a lo que preparó, con la comprobación de sesiones, la espera de salud y la reversión:
./deploy/node/aeronyx-node.sh upgrade --repo-dir "$PWD" --skip-pull
No use --force. Reinicia aunque haya sesiones activas o se desconozca el número de sesiones, y desconecta a los usuarios.
Revertir manualmente
La actualización se revierte automáticamente cuando la nueva versión no consigue arrancar o informar de un buen estado. Para volver más tarde a una versión anterior, promueva uno de los binarios guardados:
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 valida la configuración con el binario elegido y se niega a ejecutarse salvo que las sesiones activas sean exactamente cero. Le pide que escriba PROMOTE BINARY, hace una copia de seguridad del binario actual junto a él, sustituye el binario y reinicia. Si el servicio no está en buen estado en 180 segundos, restaura el binario anterior. Solo sustituye el binario, no las unidades systemd.
Después de cualquier reinicio
Compruebe lo siguiente en orden:
systemctl is-active aeronyx-serverdevuelveactive. La unidad esType=notify, por lo queactivesignifica que el proceso informó de que está listo; el arranque puede tardar hasta 300 segundos antes de que systemd desista../deploy/node/aeronyx-node.sh status --repo-dir "$PWD"muestraoperator_status=ok, o una advertencia que usted entiende../deploy/node/aeronyx-node.sh health --repo-dir "$PWD" --jsontermina con"success":trueylocal_vpn_health.statusesok.- El commit en ejecución es el que pretendía:
curl -s http://127.0.0.1:8421/api/vpn/healthlo indica comoruntime.git_commit. (Elruntime.git_commitdehealth --jsones el commit del checkout). discovery_readiness.peer_quorum.quorum_readyestruedespués de las primeras rondas de difusión.- En los nodos de relé:
relay-probe --two-hop --jsoninformaok. - En Nodeboard, el latido es reciente, Rust Runtime muestra la nueva versión y el reinicio aparece en Alerts / Events. Desactive el modo de mantenimiento cuando haya terminado.
journalctl -u aeronyx-server --since "15 min ago"no tiene errores repetidos.
Cómo aparece esto en Nodeboard
Nodeboard recibe el latido firmado y los informes de sesión del nodo. No ejecuta comandos en el host por sí mismo; las acciones que usted elige allí se ponen en cola y el nodo las ejecuta en su siguiente latido.
| En el nodo | En Nodeboard |
|---|---|
| Estado del servicio y salud local | Lista Nodes y detalle del nodo: AeroNyx Health, Rust Runtime, AeroNyx Service Readiness |
| Contadores de capacidad | Detalle del nodo: Node Capacity y Capacity Decision (ready, watch, blocked, waiting) |
| Preparación del descubrimiento y del relé | Detalle del nodo: Node Discovery, Encrypted Chat Relay; Services para toda la flota |
upgrade-status.json | Detalle del nodo: Rust Upgrade Workflow; Services → Fleet Restart Readiness |
| Advertencias en el registro del servicio | Detalle del nodo: Recent Operational Events (depurados, últimas 24 horas) |
| Reinicios y recuperaciones | Alerts / Events → Incident Closure (open, watch, recovered) |
| Modo de mantenimiento, máximo de sesiones, ancho de banda, nivel | Settings, confirmado cuando Policy Sync muestra synced |
El detalle del nodo también tiene una tarjeta Operator Runbook con comandos copiables de health, status, logs y de actualización preparada para la ruta del repositorio detectada.
Qué contienen las salidas
status, health, relay-probe, relay-smoke y mailbox-probe muestran solo valores agregados: recuentos, estados, tiempos y códigos de motivo. No muestran claves privadas, códigos de registro, IP públicas de clientes, destinos, contenido DNS, cargas útiles ni texto sin cifrar de mensajes. Los registros de sesión con claves de cliente son visibles en Nodeboard, no en estas salidas; consulte la Guía de la consola de operador Nodeboard. Cuando comparta una salida para obtener soporte, comparta el JSON y su marca de tiempo, no direcciones del host ni credenciales.
Preguntas frecuentes
¿Qué comando debo ejecutar primero cuando algo parece ir mal?
Ejecute ./deploy/node/aeronyx-node.sh status --repo-dir "$PWD" como root. Muestra el estado del servicio, la salud local, el descubrimiento y el siguiente paso recomendado, y no modifica el host.
¿Por qué la comprobación de salud falla con "config missing" o advertencias de Git?
Probablemente no es root o está apuntando al repositorio equivocado. /etc/aeronyx y /var/lib/aeronyx son solo para root y, sin --repo-dir, el script comprueba /opt/aeronyx/AeroNyx en lugar del checkout desde el que se ejecuta el servicio.
¿Cuál es la diferencia entre relay-probe y relay-smoke?
relay-probe envía un sobre opaco sintético y solo demuestra que una ruta de relé acepta tráfico. relay-smoke actúa como un cliente real: verifica un acuse terminal firmado y una recuperación y confirmación completas del buzón para un mensaje de prueba cifrado.
¿Por qué relay-smoke dice que necesita cero sesiones activas?
Atribuye los cambios en los contadores a sus propias sesiones de prueba, por lo que solo se ejecuta en un nodo inactivo. Active el modo de mantenimiento en Nodeboard, espere a que las sesiones activas lleguen a cero y después ejecútelo.
¿Puedo actualizar sin desconectar a los usuarios?
Puede compilar y preparar una actualización con --no-restart mientras hay usuarios conectados. Cambiar a la nueva versión requiere un reinicio, así que vacíe el nodo con el modo de mantenimiento y después ejecute upgrade --skip-pull.
¿Cómo vuelvo a la versión anterior?
Una actualización fallida se revierte automáticamente. Para revertir más tarde, use promote-binary con una de las copias de seguridad de /var/lib/aeronyx/releases/; requiere cero sesiones activas y restaura el binario anterior si el promovido no está en buen estado.