Настройка гейм- и логин-сервера L2: порты, IP и HexID

Правильная конфигурация гейм- и логин-сервера сводится к трём портам, двум адресам и одному файлу регистрации. Всё остальное — рейты, дроп, расписание осад — тонкая настройка. Если это настроено неверно, сервер выглядит здоровым в консоли, пока все игроки висят на экране логина.
Здесь разобраны параметры, определяющие доступность и безопасность аккаунтов, с именами файлов для L2J, L2JMobius и aCis. Предполагается, что сервер уже устанавливается, запускается и пускает вас локально; если нет — начните с порядка установки.
Три порта и назначение каждого
Их постоянно путают, и из этого рождаются правила фаервола, открывающие не то:
| Порт | По умолчанию | Кто подключается | Параметр |
|---|---|---|---|
| Клиент → логин | 2106 | Все игроки, до выбора персонажа | LoginserverPort |
| Игра → логин | 9014 | Только ваш гейм-сервер | LoginPort |
| Клиент → игра | 7777 | Все игроки, уже в мире | GameserverPort |
В публичное правило фаервола должны попадать только 2106 и 7777. Порт 9014 — внутреннее рукопожатие между двумя процессами Java: открытие его в интернет приглашает фальшивые регистрации гейм-серверов, чем и управляет AcceptNewGameServer.

Где лежит конфигурация в каждой сборке
Логин и игра — отдельные процессы с отдельными файлами, и ни одна сборка не кладёт их в одно место:
- L2J Server: папка
configвнутри каждого развёрнутого сервера; у логина и игры свои, и в каждой свойdatabase.properties. - L2JMobius:
login/config/LoginServer.propertiesиgame/config/Server.properties. - aCis:
config/loginserver.propertiesиconfig/server.properties, оба внутри папки gameserver.
Правьте с остановленным сервером. Все три сборки читают свойства один раз при старте, поэтому изменение при работающем процессе игнорируется до перезапуска — классическое «я исправил, а ничего не изменилось».
Внешний и внутренний адрес: что ломает публичные серверы
С сервера уходят два разных адреса, и они не взаимозаменяемы. Логин отправляет один адрес игрокам из интернета и другой игрокам в вашей локальной сети, потому что публичный IP не маршрутизируется изнутри большинства домашних сетей.
aCis делает это явным в конфиге логина:
ExternalHostname = 203.0.113.10
InternalHostname = 192.168.1.50
LoginserverHostname = *
LoginserverPort = 2106
L2JMobius перенёс ту же идею в отдельный файл. Скопируйте default-ipconfig.xml в ipconfig.xml и укажите публичный адрес в элементе gameserver, оставив строки define для ваших локальных подсетей:
<gameserver address="203.0.113.10">
<define subnet="192.168.0.0/16" address="192.168.1.50" />
</gameserver>
Без ipconfig.xml сервер угадывает свой адрес: это работает на VPS с одним интерфейсом и ломается за NAT или при двух сетевых картах. Симптом конкретный: сервер виден в списке клиента, а затем клиент зависает при открытии игрового соединения.
Проверяйте снаружи своей сети, через мобильный интернет, прежде чем объявлять дату открытия. Тест в локальной сети никогда не проверяет путь внешнего адреса.

HexID, ID сервера и регистрация гейм-сервера
Гейм-сервер не является доверенным по умолчанию: он регистрируется один раз и получает идентичность. В L2JMobius эта идентичность — game/config/hexid.txt, создаваемый или запрашиваемый при первом старте. Если скопировать всю папку сервера на вторую машину, вы скопируете и идентичность: удалите hexid в копии и дайте ей зарегистрироваться как новому гейм-серверу.
RequestServerID запрашивает слот в списке серверов клиента (1 = Bartz по умолчанию), а AcceptAlternateID решает, может ли логин выдать другой, если запрошенный занят. Для одного сервера оставьте значения по умолчанию.
AcceptNewGameServer — переключатель, разрешающий регистрацию неизвестного гейм-сервера. В aCis он False, в L2JMobius — True для удобства. На живом сервере зарегистрируйте свой и поставьте False, чтобы больше никто не занял слот.
Настройки аккаунтов, которые меняют до первого игрока
Три значения по умолчанию хороши на тестовой машине и плохи в продакшене:
AutoCreateAccounts— при включении любой логин и пароль создаёт аккаунт при первом входе. Удобно для тестов, губительно в продакшене: обходит регистрацию, проверку почты и любой антибот, добавленный позже. Поставьте false и создавайте аккаунты через сайт.LoginTryBeforeBan/LoginBlockAfterBan— защита от брутфорса, в секундах и по IP. В L2JMobius по умолчанию 5 попыток и блок на 900 секунд, в aCis — 10 и 600. Не затягивайте так, чтобы блокировать дом с несколькими игроками.ShowLicence— оставьте включённым. aCis рекомендует значение по умолчанию; показывается окно лицензии при входе и стоит игроку одного клика.
На стороне игры MaximumOnlineUsers и лимиты подключений в конфиге flood protector (MaxConnectionPerIP, FastConnectionLimit) ограничивают, сколько злоупотреблений может создать один адрес. Считайте по реальной популяции, а не по теоретическому максимуму сборки.
Ревизии протокола клиента
L2JMobius принимает список ревизий протокола, например AllowedProtocolRevisions = 603;606;607;610. Клиент, чья ревизия не входит в список, отбрасывается при входе с ошибкой протокола или, в некоторых клиентах, с общей ошибкой, которую игроки читают как неверный пароль. Если жалуются на «неверный пароль» в аккаунте, который точно верен, проверьте эту строку и папку system клиента, прежде чем что-то сбрасывать.
Не добавляйте ревизии, которые не тестировали. Каждая меняет обработку пакетов, а частично поддерживаемая ревизия даёт сбои, которые трудно связать с этой настройкой.
Проверка доступности за пять минут
netstat -anпоказывает 2106 и 7777 в состоянии прослушивания на0.0.0.0, а не только на127.0.0.1.- Консоль логина сообщает о зарегистрированном гейм-сервере, без повторяющихся попыток переподключения.
- Машина вне вашей сети доходит до списка серверов и входит в мир.
- Лог гейм-сервера показывает внешний IP, который он передал клиенту.
Если шаг 3 не проходит, а шаг 2 проходит, проблема во внешнем адресе или фаерволе, а не в базе данных.
Перед тем как игроки увидят конфигурацию
Когда подключения работают, следующий сбой — сервер, который никто не находит. Правильный конфиг без geodata даёт игроков, проваливающихся сквозь рельеф в первый день, поэтому сначала закончите geodata. Затем поставьте сервер перед людьми: бесплатное размещение в L2Calendar занимает минуты и выводит сервер в страницы по хроникам и рейтам, которые люди смотрят — добавьте свой сервер. Платное размещение стоит выше бесплатного списка и быстрее даёт видимость: VIP-размещение.
