Skip to content

Как устроена Nexora ​

Nexora состоит из двух частей: одной панели, которая всё решает, и любого числа узлов, которые несут трафик ваших пользователей. Этот раздел объясняет, как они устроены внутри, на случай, если вы хотите понять, почему что-то ведёт себя так, а не иначе. Чтобы вести сервис, он не нужен; для этого есть раздел Работа с панелью.

Как части работают вместе
Приложения клиентов
v2rayNG, Hiddify, Streisand…
Узел
frankfurt-01
Узел
tokyo-01
Узел
toronto-01
Интернет
Панель
всё в одном месте
Вы, в браузере
Дополнения
магазин, уведомления, свои
трафик пользователейнастройки и статистика по взаимному TLSсобытия и APIзагрузка подписки

Уровень управления: панель ​

Панель — это одна программа с веб-интерфейсом. В ней четыре вещи:

  • База данных, единственный источник истины. Каждый администратор, пользователь, тариф, инбаунд, шаблон, узел, туннель, сертификат и настройка хранятся там, в SQLite или PostgreSQL. У узлов нет собственной копии; если они расходятся, права панель, и узел меняется под неё.
  • Планировщик. Периодическую работу панель делает сама, в фиксированном ритме (ниже).
  • API. Веб-интерфейс, ваши скрипты и дополнения пользуются одним и тем же API, каждый со своими правами.
  • Служба подписок. Приложения пользователей получают конфигурацию по адресу своей подписки. Она может работать на собственных доменах, отдельно от адреса, по которому вы управляете панелью.

Ритм панели ​

КаждыеПанель
10 секундобъединяет адреса, которые видел каждый узел, и отправляет таблицу адресов пользователей обратно туда, где она изменилась
15 секундпроверяет каждый узел (heartbeat) и заново отправляет конфигурацию узлу, который её не обслуживает
30 секундсобирает счётчики трафика со всех узлов
минутуприменяет квоты, даты окончания, циклы сброса и лимиты узлов; проверяет состояние дополнений
5 минутснимает показания диска, памяти и нагрузки каждого узла
10 минутсравнивает маршрутизацию, DNS и наборы правил на каждом узле с тем, что он должен запускать
часобновляет наборы правил, которым пора, удаляет старые записи, сжимает историю состояния, перечитывает манифесты дополнений
6 часовпродлевает сертификаты, которым пора

Уровень данных: узлы ​

Узел — это сервер, который несёт трафик. Он не хранит состояния:

  • У него нет базы данных. Инбаунды, аутбаунды, эндпоинты, маршрутизация, пользователи и лимиты приходят от панели и хранятся в памяти.
  • На диске он держит только собственную TLS-идентичность и кэш файлов, которые можно получить заново, например наборы правил, присланные панелью.
  • После перезапуска он ничего не обслуживает, пока панель снова не пришлёт конфигурацию, а следующий heartbeat делает это за секунды.
  • Он обслуживает, только пока до него доходит его панель. Отрезанный от панели примерно на три минуты, он перестаёт обслуживать. См. Узел и его панель.

Узел обслуживает свой шаблон: инбаунды, аутбаунды, эндпоинты, наборы правил и маршрутизацию из него, а также пользователей, которые входят в этот шаблон.

Как они общаются ​

Панель подключается к каждому узлу по HTTPS на управляющий порт узла (по умолчанию 62050), с взаимным TLS:

  • Узел принимает только клиентский сертификат панели, полученный при установке.
  • Панель запоминает собственный сертификат узла при первом подключении и потом принимает только его. Это доверие при первом использовании: другой сертификат на том же адресе отклоняется.

После установки узла соединение всегда открывает панель, никогда наоборот. По этому каналу панель отправляет конфигурацию и изменения и читает состояние, счётчики, предупреждения и показатели хоста. Изменение отправляется только как это изменение, без перезапуска узла; см. Изменения без перезапусков.

Пользователи обращаются только к узлам и адресу подписки ​

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

Дополнения работают рядом с панелью ​

Дополнение, например Nexora Shop или уведомитель, — это отдельная программа со своим процессом, базой данных и интерфейсом. С панелью оно работает только по сети: API-токен с одобренными вами правами и вебхук, который получает запрошенные им события. Панель никогда не запускает код дополнения. См. Платформа дополнений и Шина событий.

Страницы этого раздела ​

СтраницаЧто она объясняет
Путь пакетаодно соединение через узел, этап за этапом
Изменения без перезапусковкак изменение доходит до узлов без перезапусков
Узел и его панельдоверие, сессии, heartbeat и что делает узел без своей панели
Внутри туннеляретрансляторы, исходные узлы и пул сессий внутри туннеля
От шаблона до ссылкикак ссылки пользователя строятся из шаблонов, адресов и фронтов
Трафик, квоты и лимитыподсчёт трафика, квоты, лимиты и лимиты реселлеров
Шина событийшина событий и повтор доставок
Платформа дополненийрегистрация, согласие, выдача прав и обновления дополнений
Выпуск и продление сертификатовкто выпускает сертификаты и как они продлеваются и перезагружаются
Модель безопасностимодель безопасности, от взаимного TLS до ролей и аудита
Мониторинг и метрикиистория состояния, живые соединения и эндпоинт метрик

Текст и изображения — CC BY 4.0.