Установка и регистрация узла AeroNyx

AeroNyx12 мин чтения

Установите узел AeroNyx с открытым исходным кодом на сервер Linux командой quickstart из репозитория, зарегистрируйте его одноразовым кодом Nodeboard и проверьте допуск в сеть. Также рассмотрены роли ретрансляции, подключение без разрешения, развёртывание в TEE и установка с помощью ИИ.

В этом руководстве описано, как установить программное обеспечение узла AeroNyx с открытым исходным кодом на сервер Linux, зарегистрировать узел в вашей учётной записи оператора Nodeboard с помощью одноразового кода и проверить, что сеть приняла его. Поддерживаемый способ — скрипт из репозитория deploy/node/aeronyx-node.sh quickstart; это та же команда, которую генерирует для вас Nodeboard.

Прежде чем эксплуатировать узел, ознакомьтесь с Политикой для операторов узлов.

Перед началом

ПараметрТребование
Операционная системаLinux с systemd. Установщик устанавливает пакеты с помощью apt-get (Debian, Ubuntu), dnf или yum.
ДоступОболочка root. Все команды в этом руководстве предполагают, что сначала выполнена sudo -i.
Устройство TUNДля плоскости данных VPN должно существовать устройство /dev/net/tun.
ПамятьЕсли памяти меньше 2 ГБ, установщик выдаёт предупреждение и продолжает работу. Узел компилируется из исходного кода прямо на сервере, поэтому надёжнее иметь 4 ГБ или больше.
ДискЕсли свободного места меньше 4 ГБ, установщик выдаёт предупреждение и продолжает работу. Заложите 20 ГБ или больше под кэш сборки и резервные копии релизов, которые сохраняет процедура обновления.
Входящие порты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 выполняет четыре шага и до вашего подтверждения не вносит никаких изменений в систему:

  1. Выводит итоговый план установки (только чтение).
  2. Ждёт, пока вы введёте INSTALL. Нажатие Enter безопасно прерывает работу.
  3. Выполняет предварительные проверки, устанавливает пакеты и закреплённый в репозитории набор инструментов Rust, создаёт /etc/aeronyx/server.toml, если его нет (существующий файл сохраняется), настраивает пересылку IP и NAT, собирает узел, устанавливает модуль systemd aeronyx-server, регистрирует идентичность узла с вашим кодом, запускает службу и до 120 секунд ожидает допуска в сеть.
  4. Выводит status и сводку health --json.

Ожидание допуска проверяет, что локальная проверка состояния сообщает ok, что бэкенд вернул свежую политику (цикл обмена heartbeat работает), что у обнаружения есть хотя бы один проверенный подписанный пир и завершён раунд gossip, а для публичных узлов — что узел числится в публичном пуле.

Шаг 1: создайте регистрационный код

  1. Войдите в Nodeboard и откройте Registration Codes.
  2. Выберите Generate Code.
  3. Никому не сообщайте код. Он истекает через 15 минут, действует один раз и привязывает новый узел к учётной записи, которая его создала.

После этого Nodeboard показывает команду quickstart, команды пошагового просмотра плана и установки, команду проверки статуса и подсказку для ИИ-ассистента. Столбец Install Progress отслеживает работу установщика по этапам not_started → planning → running → completed | failed.

Бэкенд проверяет код, когда установщик доходит до шага регистрации, а этот шаг идёт после сборки. Первая сборка на небольшом сервере может занять больше 15 минут. Если регистрация после этого не удалась из-за истечения кода, создайте новый код и снова запустите quickstart; повторный запуск использует кэш сборки.

Шаг 2: получите или обновите репозиторий

aeronyx-node.sh — не системная команда. Он поставляется в репозитории. Вот строка клонирования или обновления, которую использует Nodeboard:

bash
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, не указывая код в командной строке. При запуске в терминале скрипт запрашивает код через скрытое приглашение, поэтому код не отображается на экране, не сохраняется в истории оболочки и не передаётся как аргумент процесса:

bash
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

Команда quickstart из Nodeboard содержит код прямо в строке, например AERONYX_REGISTRATION_CODE='<code>' ./deploy/node/aeronyx-node.sh quickstart --repo-dir "$PWD" --branch main --quick. Это работает, но код сохраняется в истории оболочки. Если вы используете эту команду:

  • Проверьте echo "$HISTCONTROL". Если значение содержит ignorespace или ignoreboth, начните команду с пробела, и Bash не запишет её.
  • В противном случае удалите запись после выполнения с помощью history -d <number>.

Код одноразовый и истекает через 15 минут, что ограничивает риск, но не вставляйте его в заявки, снимки экрана или чаты.

Неинтерактивная установка

Для автоматизации сначала просмотрите план, затем передайте код через стандартный ввод. read -rs не выводит его на экран и не сохраняет в истории:

bash
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: проверьте узел

bash
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
  • установщик вывел [OK] Node admission accepted с health=ok, management=fresh и discovery=ready (и public_pool=online для публичного узла)
  • status выводит operator_status=ok и следующий шаг
  • последняя строка JSON в выводе health --json содержит "success":true; предупреждения отображаются в checks

В Nodeboard код получает статус completed, а узел появляется в разделе Nodes со своим именем, регионом, видимостью и свежим heartbeat. На странице сведений об узле отображается Capacity Decision со значением ready, watch, blocked или waiting.

О ежедневных проверках, журналах, обновлениях и откате см. Эксплуатация и проверка узла AeroNyx.

Необязательно: подключение к зашифрованной ретрансляции

Узел VPN и узел зашифрованной ретрансляции — это отдельные варианты. Участие в ретрансляции состоит из трёх частей: доступного публичного API пиров, «слепой» роли ChatRelay с промежуточным хранением и пересылкой и роли OnionMiddle без выхода в интернет. В конфигурации по умолчанию обе роли отключены.

  1. Убедитесь, что порт 8422/TCP доступен из интернета.

  2. Отредактируйте /etc/aeronyx/server.toml (например, nano /etc/aeronyx/server.toml) и задайте в разделе [discovery] следующие ключи, указав свой публичный адрес:

    toml
    public_endpoint = "http://203.0.113.10:8422"
    public_discovery = true
    region = "DE"
    
  3. Проверьте файл:

    bash
    cd /root/open/AeroNyx
    ./target/release/aeronyx-server validate -c /etc/aeronyx/server.toml
    
  4. Включите ChatRelay без перезапуска. Вспомогательная команда создаёт резервную копию конфигурации, просит ввести ENABLE CHATRELAY, проверяет конфигурацию и восстанавливает резервную копию, если проверка не пройдена:

    bash
    ./deploy/node/aeronyx-node.sh chat-relay --repo-dir "$PWD" --enable-chat-relay
    
  5. Включите OnionMiddle и перезапустите узел одним защищённым шагом. Команда просит ввести ENABLE ONIONMIDDLE и отказывается выполнять перезапуск, если у узла есть активные сеансы или он не может сообщить количество сеансов:

    bash
    ./deploy/node/aeronyx-node.sh onion-middle --repo-dir "$PWD" --enable-onion-middle --restart
    

    Если команда отказывается, включите для узла Maintenance Mode в разделе Settings в Nodeboard, дождитесь, пока число активных сеансов станет нулевым, и запустите её снова. Не добавляйте --yes: этот флаг пропускает подтверждение и защиту от активных сеансов.

  6. Проверьте готовность к ретрансляции:

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

Включение роли не означает, что узел будет использоваться в маршрутах. Узел становится кандидатом для маршрутов только после того, как пиры видят его доступным и появляются свежие доказательства проверки пути. См. Обнаружение узлов и зашифрованная ретрансляция.

Подключение без Nodeboard

join устанавливает узел и отправляет его подписанный дескриптор на seed-узел для допуска Stage-A без регистрационного кода и без учётной записи Nodeboard:

bash
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 публичных seed-узлов; запрос отправляется первому из них. --public-endpoint — доступный API пиров вашего узла. Оба значения должны быть URL-адресами http или https с публичным IP-адресом, а не именем хоста.
  • Команда выполняется от root в Linux с systemd и требует Python 3.11 или новее либо python3 с пакетом tomli.
  • Она задаёт шесть значений в [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 означает, что seed-узел принял ваш дескриптор. Он не делает узел пригодным для маршрутизации, не добавляет его в Nodeboard или пул VPN и не даёт права на оплату. Ответ seed-узла передаётся по обычному HTTP, если только seed-узел не использует HTTPS, поэтому он не является криптографическим подтверждением.

Развёртывание в TEE с помощью Docker

Репозиторий также содержит контейнерное развёртывание для конфиденциальных виртуальных машин под управлением dstack (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. Контейнер запускается со сброшенными возможностями (capabilities) Linux и с no-new-privileges.
  • Он выполняет луковую ретрансляцию (advertise_onion_middle = true), ChatRelay и анонимный почтовый ящик и открывает только порт 8422.
  • Идентичность узла берётся из службы управления ключами dstack ([server_key] source = "dstack"). Файла ключа нет.
  • Закреплённые начальные узлы. server.tee.toml закрепляет четыре начальных узла через discovery.pinned_seeds. У узла без снимка оператора нет других опор доверия, а к каждому закреплённому узлу обращаются только по TLS с привязкой к идентичности. Оставьте закрепления или замените их; см. Обнаружение узлов и зашифрованная многошаговая ретрансляция.

Порядок развёртывания:

  1. Выберите образ релиза из ghcr.io/aeronyxnetwork/aeronyx-node. CI собирает образы linux/amd64 из тегов node-v* и прикладывает аттестацию происхождения сборки. Найдите дайджест, например, с помощью docker buildx imagetools inspect ghcr.io/aeronyxnetwork/aeronyx-node:<tag>.
  2. В compose.tee.yaml замените IMAGE_DIGEST этим дайджестом. Всегда закрепляйте образ по дайджесту, а не по тегу; в виртуальной машине dstack файл compose входит в измеряемое развёртывание.
  3. Задайте в AERONYX_PUBLIC_ENDPOINT origin https://, который шлюз dstack назначает порту 8422. Точка входа отклоняет любую другую схему.
  4. При необходимости задайте AERONYX_REGION (по умолчанию tee).
  5. Только для первого запуска передайте AERONYX_REGISTRATION_CODE как зашифрованный секрет. Точка входа передаёт его по конвейеру в aeronyx-server register --code-stdin. После того как в томе /var/lib/aeronyx появится node_info.json, код больше не нужен.

Контейнер не содержит aeronyx-node.sh. Отслеживайте узел TEE в Nodeboard и через его публичный API обнаружения.

Установка с помощью ИИ-ассистента для программирования

Эту процедуру могут выполнять терминальные ассистенты, такие как Claude Code, Codex, OpenClaw или Hermes. Рядом с каждым кодом Nodeboard предлагает готовую подсказку AI assistant prompt. Следующие правила действуют независимо от того, какой ассистент вы используете.

Оператор-человек:

  • предоставляет сервер и подтверждает каждое изменение системы
  • лично вводит INSTALL после прочтения плана
  • хранит регистрационный код в тайне. Подсказка для ИИ из Nodeboard содержит код, поэтому, вставляя её, вы передаёте код поставщику ассистента. Чтобы этого избежать, позвольте ассистенту обновить репозиторий и выполнить plan без кода, затем запустите quickstart сами и введите код в скрытом приглашении. Для проверки снова передайте работу ассистенту.

Ассистент обязан:

  • использовать только deploy/node/aeronyx-node.sh из github.com/AeroNyxNetwork/AeroNyx и передавать --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 показывает узел со свежим heartbeat и Capacity Decision
  • в Alerts / Events → Incident Closure нет непросмотренных элементов open для этого узла
  • вы знаете, где в Nodeboard находится страница сведений об узле

Что сообщает зарегистрированный узел

Локальная диагностика (status, health, relay-probe) выводит только агрегированные значения: состояние службы, ёмкость, счётчики пакетов, готовность обнаружения и результаты проверок доказательств.

Зарегистрированный узел VPN также сообщает бэкенду AeroNyx о каждом сеансе VPN: идентификатор сеанса, ключ клиента (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; повторный запуск использует кэш сборки.

Нужен ли Nodeboard для работы узла?

Нет, join устанавливает узел и отправляет его на допуск Stage-A без регистрационного кода. Подключённый таким образом узел не пригоден для маршрутизации, не отображается в Nodeboard или пуле VPN и не имеет права на оплату.

Можно ли запустить узел в конфиденциальной виртуальной машине?

Да, репозиторий включает развёртывание Docker для конфиденциальных виртуальных машин dstack, которое выполняет луковую ретрансляцию, ChatRelay и анонимный почтовый ящик. Оно не предоставляет услугу VPN и получает идентичность из службы управления ключами dstack.

<!-- faq:end -->