Построение сети Meshwork

Настройка Meshwork сводится к тому, чтобы каждый узел знал своё имя и домен и имел хотя бы одного достижимого соседа. Дальше домен достраивает остальные связи сам. Все действия выполняются в веб-админке; изменение настроек Meshwork требует роли администратора. Точные поля и их расположение приведены в разделе Веб-интерфейс.

Требования и достижимость

  • Сетевая достижимость. Узел должен уметь установить TCP-соединение с административным веб-сервером соседа. Порт берётся из адреса соседа («хост:порт») либо из публичного порта, который сосед сообщает о себе (Идентичность узла), — это всегда тот порт, на котором настроен его веб-сервер, а при включённом у соседа HTTPS — его TLS-порт. Значения для свежей установки приведены в Начальные настройки; нужный порт соседа должен быть открыт со стороны других узлов.

  • HTTPS для автообнаружения через интернет. Если автообнаруженные узлы домена связываются по публичным (интернет-)адресам, им нужно установить между собой защищённое соединение (HTTPS), чтобы безопасно подтвердить подлинность друг друга по открытой сети. Поэтому включите HTTPS хотя бы на узлах, через которые идёт обнаружение. Включение HTTPS вступает в силу после перезапуска сервера. Если узлы доступны только по публичным адресам и ни один не поднят по HTTPS, прямые автообнаруженные связи не аутентифицируются: узел всё равно виден (через ретрансляцию от соседа), но его прямая связь помечается причиной (см. Карта сети и каталог ресурсов).

  • Локальная сеть — HTTPS не требуется. Если узлы домена общаются по частным адресам одной доверенной сети (10.x.x.x, 172.16–31.x.x, 192.168.x.x, а также 127.x.x.x и 169.254.x.x), защищённое соединение для автообнаружения не нужно — узлы подтверждают подлинность и по обычному HTTP. Узел распознаётся как локальный по IP-адресу, поэтому в локальной сети задавайте соседей именно по IP-адресам, а не по доменным именам. HTTPS при этом можно включить — он будет использован, если доступен.

  • Явная связь работает и по HTTP — на неё требование HTTPS не распространяется в любом случае.

  • Имя и секрет обязательны. Узел участвует в сети, только если у него заданы имя и секрет подписи. Без имени или без секрета узел в Meshwork не участвует.

  • Ограничения на имена. Имя узла — от 2 до 16 символов, имя домена — не длиннее 16 символов; разрешены латинские буквы, цифры и знаки _, -, .. Пробелы и другие символы недопустимы (например, домен «Alex Home» задать нельзя — используйте Alex_Home).

Идентичность узла

В настройках сервера задаётся, кем узел представляется в сети:

  • Имя узла — короткое уникальное имя, по которому узел узнают остальные. Пустое имя означает, что узел в сети не участвует.

  • Заметка — произвольная подпись узла (например, «Москва, стойка 3»), показывается в админке для удобства и на работу сети не влияет.

  • Домен — узлы с одинаковым доменом автоматически находят друг друга, делят общий каталог ресурсов и разносят оповещения. Пустое значение отключает автообнаружение (узел может работать только по явному списку соседей).

  • Публичные порты (HTTP и HTTPS) — порты, которые узел сообщает соседям для обратной достижимости при трансляции адресов (NAT). Если не заданы, узел сообщает собственные порты веб-сервера.

  • Дополнительные домены (режим super-node) — узел входит в автообнаружение каждого перечисленного домена наравне с основным. Ресурсы остаются изолированными по доменам — узел их не смешивает.

Соседи и секреты

Здесь задаётся, с какими соседями узел поддерживает прямую связь и как стороны проверяют друг друга. Запросы между узлами подписываются общим секретом, поэтому без совпадающих секретов связь не установится. Длина каждого секрета — от 16 до 128 символов.

Список соседей — это записи вида «адрес — имя — секрет»:

  • Адрес соседа — «хост:порт» его админки. Запись может быть без адреса: такой сосед никогда не вызывается этим узлом (он только сам дозванивается) и опознаётся по имени и секрету — это применяют для узла за NAT, который умеет только инициировать соединение.

  • Имя соседа должно в точности совпадать с именем, заданным у самого соседа.

  • Общий секрет связи с этим соседом должен быть одинаковым на обоих концах.

Кроме списка соседей, у узла есть собственный секрет подписи: им узел подписывает свои исходящие запросы. Сосед проверяет подпись тем секретом, который хранит для этого узла, поэтому собственный секрет узла должен совпадать с секретом, записанным о нём у каждого соседа.

Примечание

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

Быстрый старт

Вариант A. Два узла напрямую (явная связь)

Самый простой Meshwork — два сервера, соединённых вручную.

  1. На каждом узле задайте уникальное короткое имя (например, node1 и node2).

  2. На каждом узле добавьте запись о соседе: адрес его админки, его имя и общий секрет.

  3. На каждом узле задайте собственный секрет подписи. Проще всего держать единый общий секрет на оба узла.

  4. Откройте карту сети в админке. В течение нескольких секунд оба узла увидят друг друга в состоянии «на связи».

Домен при этом можно не задавать, но без общего домена вы получите только взаимную видимость узлов. Общий каталог ресурсов и разнос оповещений работают лишь между узлами с одинаковым доменом — если они нужны, задайте узлам общий домен (вариант B).

Вариант B. Домен с автообнаружением

Когда узлов больше двух, удобнее задать им общий домен и не перечислять каждую связь вручную.

  1. На каждом узле задайте уникальное имя и общий домен площадки.

  2. Если узлы домена связываются через интернет (по публичным адресам), включите HTTPS хотя бы на одном-двух узлах домена и перезапустите их (см. Требования и достижимость). В локальной сети этот шаг можно пропустить.

  3. Свяжите узлы «точкой входа»: на каждом узле пропишите хотя бы одного уже работающего соседа (адрес, имя, общий секрет), как в варианте A. Остальные узлы домена узел найдёт сам.

  4. Откройте карту сети. Через несколько секунд в ней появятся все узлы домена: явно прописанные — как постоянные, найденные автоматически — как автообнаруженные.

Узлы за NAT

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

Сведения о NAT-узле распространяются по домену автоматически: сосед, который с ним на связи, ретранслирует его состояние остальным. У дальних соседей такой узел будет показан как полученный через ретрансляцию, но в состоянии «на связи».

Чтобы узел за NAT был достижим и для входа (например, служил точкой входа домена), настройте публикацию публичного порта (см. Идентичность узла) и пробросьте этот порт на маршрутизаторе/файрволе на административный веб-сервер узла. Со стороны соседей такой узел держат записью «имя + секрет без адреса»: сосед не будет тщетно дозваниваться до частного адреса, а опознает узел по имени и секрету, когда тот подключится сам.

Типичные проблемы

  • Узлы не видят друг друга. Проверьте: у обоих задано имя узла; у каждого есть секрет подписи и он совпадает с тем, что записан о нём у соседа; адрес соседа верен и его админ-порт открыт со стороны другого узла.

  • Сосед в состоянии «нет связи». Узел вышел за окно ожидания: проверьте сеть и работоспособность его веб-сервера. Для узла за NAT убедитесь, что он сам инициирует соединение к достижимому соседу либо что настроены публикация и проброс порта.

  • Автообнаруженный сосед помечен причиной, прямая связь не работает. В домене не удаётся подтвердить подлинность узлов. Если они связываются через интернет, включите HTTPS хотя бы на одном узле домена и перезапустите его; в локальной сети проверьте, что соседи заданы по IP-адресам, а не по доменным именам. По явной связи (постоянные узлы) связь работает и без HTTPS.

  • Ложный признак NAT. Если узлы заданы по доменным именам, а не по IP, признак NAT может не определяться по адресу — это не мешает работе. Для надёжной диагностики NAT используйте IP-адреса.

  • Смена домена «сбросила» карту. Изменение домена или набора дополнительных доменов пересобирает членство: автообнаруженные связи и общий каталог временно сбрасываются и собираются заново. Это нормально.