Skip to main content
На свежей установке ничего здесь не смотрит в интернет. Пак уходит на хост Hermes от Nexo, и игроки скачивают его оттуда, так что собственный порт NexoHub несёт только трафик ваших бэкендов к прокси и может оставаться за вашим файрволом. Эта страница о том, что меняется, когда вы устанавливаете packs.host: proxy и раздаёте пак с прокси самостоятельно. Тогда порт должен быть открыт, потому что именно оттуда игроки скачивают пак, и трафик ваших бэкендов по умолчанию идёт через тот же открытый порт.

Два вида маршрутов

Загрузку пака нельзя защитить секретом, потому что клиенту Minecraft просто вручают ссылку. Пак — не секрет, так что это вам ничего не стоит. /hub/v1/health возвращает слово nexohub и ничего больше. /nexohub doctor использует его, чтобы проверить, действительно ли адрес, который вы раздали игрокам, достигает вашего прокси — единственное, что нельзя проверить изнутри собственной сети. Всё остальное требует секрет, а запрос без него отклоняется и логируется вместе с адресом, с которого он пришёл:

Секрет

NexoHub генерирует 40-символьный секрет при первом запуске, записывает его в config.yml и печатает один раз. Каждый бэкенд получает один и тот же. Относитесь к нему как к паролю. Его хранит каждый бэкенд, так что любой, кто проникнет на один из ваших бэкендов, может читать и писать что угодно на хабе. Именно поэтому /nexohub adopt требует большего, чем секрет: команда работает только в пятиминутном окне, которое вы открываете её запуском, так что бэкенд не может самостоятельно перезаписать файлы всей вашей сети. Смена секрета означает смену на прокси и на каждом бэкенде, а затем /nexohub reload.

Разделение портов

При host: proxy ваши бэкенды разговаривают с прокси на том же порту, с которого скачивают игроки. Это работает, но означает, что эти маршруты тоже достижимы из интернета. (При делегированном хостинге по умолчанию разделять нечего: ни один порт здесь изначально не открыт для игроков, и /nexohub doctor так и говорит вместо того, чтобы предлагать это.) Дайте бэкендам собственный порт:
Затем направьте каждый бэкенд на этот слушатель:
public_address по-прежнему описывает публичный порт, потому что именно он попадает в ссылку на ресурс-пак.
Голый порт означает loopback, так что достучаться до него могут только бэкенды на той же машине, что и прокси. Если ваши находятся в другом месте, укажите адрес, который они могут достичь: api_address: "10.0.0.1:8086", а остальное пусть сделает ваш файрвол.Игроки по-прежнему могут скачивать пак на любом из двух портов, так что для них ничего не ломается.
/nexohub doctor сообщает, какой из двух вариантов у вас работает:
Это note, а не bad. Общий порт — значение по умолчанию, и для небольшой сети это нормальный выбор, но вы должны знать, что у вас именно он.

TLS

NexoHub говорит на простом HTTP и не имеет настроек сертификатов. Это означает, что секрет передаётся в открытом виде каждый раз, когда бэкенд общается с прокси. Если они на одной машине или в одной приватной сети, этот трафик никуда не уходит, и это не имеет значения. Если они на разных машинах через интернет, поставьте перед ними обратный прокси. nginx, Caddy или Cloudflare стоит иметь в любом случае:
  • он добавляет TLS, так что загрузка пака и трафик ваших бэкендов перестают быть открытым текстом
  • он не даёт адресу вашего прокси попасть в ссылку на ресурс-пак, потому что public_address указывает на обратный прокси
  • он может ограничивать частоту скачиваний, чего NexoHub не делает
Cloudflare проксирует только определённые порты: 8080, 8443, 2052, 2053, 2082, 2083, 2086, 2087, 2095, 2096 и 8880. Порт по умолчанию 8085 в их число не входит, так что измените http.port, если пойдёте этим путём. См. хостинг.
Если вы предпочитаете вообще не раздавать адрес своего прокси, оставьте хостинг делегированным внешнему хосту — так делает свежая установка. Тогда ни один игрок никогда его не резолвит, а public_address перестаёт иметь значение. Хаб всё равно слушает, так что порт всё равно стоит закрыть для всех, кроме ваших бэкендов. См. хостинг.