Главная Lin2Web EN EN
Lin2Guard V1

Инструкция по установке
Lin2Guard

Система HWID-защиты для приватных серверов Lineage 2 на базе L2J

01

Клиент (l2.exe)

Собирает HWID компьютера и отправляет на сервер защиты по TCP:46500

02

lin2guard

Проверяет HWID в базе данных MySQL и решает — разрешить или заблокировать

03

guard.so (хук)

Загружается в JVM через LD_PRELOAD и связывается с lin2guard по UDP:46540

Структура файлов

Lin2Guard-V1/
Lin2Guard-V1/
├── clientside/
│   └── system/
│       └── l2.exe                  ← раздать игрокам
└── serverside/
    ├── guard/
    │   ├── lin2guard_linux_amd64   ← бинарник сервера защиты (Linux x86_64)
    │   ├── config.xml              ← конфигурация
    │   ├── start.sh                ← запуск с авторестартом
    │   ├── startscreen.sh          ← запуск в фоне через screen
    │   └── getscreen.sh            ← подключиться к логам
    └── gameserver/
        ├── guard.so                ← LD_PRELOAD хук для L2J Java-сервера
        └── run.sh                  ← пример запуска gameserver с хуком

Установка

1

Клиентская часть — файлы для игроков

В папке клиента у игрока лежит оригинальный файл system/l2.exe. Нужно заменить его нашим.

1 Переименуй родной system/l2.exe игрока → system/l2.bin
Оригинальный запускатор должен остаться рядом
2 Скопируй наш clientside/system/l2.exe в папку system/ клиента
Итог: в system/ будет l2.bin (оригинал) и l2.exe (наш)
3 Раздай обновлённый l2.exe игрокам — защита работает автоматически при запуске игры
2

Сервер защиты — Linux хостинг

1 Залей папку serverside/guard/ на Linux хостинг целиком
2 Создай базу данных в MySQL:
CREATE DATABASE lin2guard;
3 Отредактируй config.xml — укажи адрес, порты и доступ к БД (подробнее — в разделе «Настройка» ниже)
4 Подключись по SSH и запусти сервер защиты:
SSH — запуск в фоне (рекомендуется для прода)
cd /путь/до/папки/guard/
chmod +x lin2guard_linux_amd64 start.sh startscreen.sh
./startscreen.sh
Посмотреть логи: ./getscreen.sh    Выйти без остановки: Ctrl+A, затем D
3

Хук для игрового сервера — guard.so

1 Залей serverside/gameserver/guard.so в папку твоего игрового сервера
2 Найди скрипт запуска сервера (обычно GameServer_loop.sh или похожий)
3 Добавь переменные окружения и LD_PRELOAD — смотри пример ниже:
serverside/gameserver/run.sh — пример
# Хроника сервера (salvation, interlude и т.д.)
export CHRONICLE=salvation

# UDP-порт хука (должен совпадать с hook_addr в config.xml)
export INTPTR=46540

# ID игрового сервера
export GSID=2

# IP сервера защиты (127.0.0.1 если guard на той же машине)
export INTIPADDR=127.0.0.1

# Логи: 0 = минимум (прод), 1 = подробные (дев)
export L2G_DEBUG=0

# Для теста: раскомментируй, чтобы временно отключить проверку авторизации
#export NOCHECK=1

HOOK_SO="guard.so"

# Запуск Java с хуком (остальные параметры оставь из своего скрипта):
LD_PRELOAD="$HOOK_SO" java ... -cp config:./../libs/* l2e.gameserver.GameServer
Важно: строка запуска java должна начинаться с LD_PRELOAD="guard.so". Все остальные параметры java оставь как есть в твоём скрипте.

Настройка config.xml

serverside/guard/config.xml
<config>
  <!-- Порт для подключения клиентов (l2.exe). Открыть в файрволе. -->
  <listen_addr>0.0.0.0:46500</listen_addr>

  <!-- Порт для связи с guard.so. Оставь 127.0.0.1 если на одной машине. -->
  <!-- Чтобы отключить хук — удали эту строку или оставь пустой. -->
  <hook_addr>127.0.0.1:46540</hook_addr>

  <!-- Максимальное количество окон игры с одного HWID -->
  <max_windows>2</max_windows>

  <!-- Таймаут переподключения клиента в мс (45000 = 45 сек) -->
  <ping_timeout_ms>45000</ping_timeout_ms>

  <!-- false = только важные события (прод), true = подробные логи (дев) -->
  <debug>false</debug>

  <!-- Данные для подключения к базе данных lin2guard -->
  <db>
    <host>127.0.0.1</host>
    <port>3306</port>
    <user>root</user>
    <pass>ТВОЙ_ПАРОЛЬ</pass>
    <name>lin2guard</name>
  </db>

  <!-- Опционально: синхронизация HWID с игровой БД (поле characters.hwid) -->
  <!-- Раскомментируй блок <gamedb> и укажи данные игровой БД. -->
  <!-- <gamedb> ... </gamedb> -->
</config>

Открытые порты

Порт Назначение Доступ снаружи Примечание
46500 / TCP Подключения клиентов (l2.exe) ✓ Открыть Открыть в файрволе для внешних подключений
46540 / UDP Хук guard.so ↔ lin2guard ✗ Закрыть Только localhost — снаружи не нужен
3306 / TCP MySQL ✗ Закрыть Только localhost, наружу не открывать

Частые проблемы

guard.so не найден

guard.so должен лежать рядом с run.sh в папке gameserver/. Путь в скрипте указывается относительно директории запуска.

Клиент не подключается

Проверь, что порт 46500/TCP открыт в файрволе. Убедись что lin2guard запущен:

ps aux | grep lin2guard
Игроки не авторизуются

Проверь связность guard.so с lin2guard — порт 46540/UDP должен быть доступен. Для теста временно раскомментируй NOCHECK=1 в run.sh.

База данных недоступна

Проверь данные подключения в config.xml → блок <db>. База lin2guard должна существовать до запуска guard:

CREATE DATABASE lin2guard;