Vellum — проект на базе Half-Life Dedicated Server

qproto аналог dproto протокола поддерживает только новые не брошенные эмуляторы, работает на metamod уже месяц - противопоказаний к применению - нет. ReHLDS не поддерживает https://github.com/darwin128k/raspad-qproto. В чем смысл работает пока как тестовый (это не приговор) - раскрутка берется люди заходят - логи проверяются. Единственное что тестирование в начале шло а вот 13 только хостинг помешал идеальному логу. На 10211 проверка была только под WSL - завтра переобуюсь на него - мне ничего не мешает. Тестирование проходило только на Linux на Windows пока нет.
 

Вложения

  • 1792423478060.png
    1792423478060.png
    124,8 КБ · Просмотры: 28
  • qproto.zip
    qproto.zip
    165,5 КБ · Просмотры: 0
Работаем над GateKeeper для загрузчика Authum
 

Вложения

  • 1792500703176.png
    1792500703176.png
    126,2 КБ · Просмотры: 30
;) Ждем - это будет то, что мы создаем вместе.
 

Вложения

  • 1792505247380.png
    1792505247380.png
    210,7 КБ · Просмотры: 38
Gatekeeper — модуль Authum для классического HLDS: гео/прокси через IPHub + кэш в SQL + фильтр стран + steam_guard (ASN по SteamID). Работает рядом с qproto.

Как выглядит отказ

Клиент из US (IPHub: code=US, block=0, ISP SOLID) при allow-list СНГ/Прибалтика:

Server refused connection because: country US is not allowed

Не голое «Access denied», а явная причина. Для прокси будет: proxy/VPN is not allowed (block N).

В логе (authum.log / gatekeeper) примерно так:


iphub ok ip=… code=US asn=… block=0 isp=SOLID
filter DENY country ip=… code=US …
reject connect (filter) … reason=country US is not allowed
Настройка фильтра


filter_enabled = 1
filter_allow_countries = 1
filter_countries = RU BY UA KZ … LT EE …
filter_block_max = 0 # >0 у IPHub → kick (VPN/proxy)
Свой IP/ASN — в whitelist.ini. Логи модулей лучше в один файл: logging_mode = 4 → только authum.log.

SQL

SQLite из коробки или MySQL/MariaDB (sql_driver = mysql). Если HLDS и mysqld стартуют вместе:


sql_connect_delay_ms = 3000
sql_connect_retries = 10
sql_connect_retry_ms = 1000
Таблицы user / client / session создаются сами при успешном open.

Стек

authum_mm.so + modules/qproto + modules/gatekeeper, список в modules.list. Секреты (IPHub, sql_pass) — в gatekeeper.local.cfg.

Репо: gatekeeper / Authum / qproto на GitHub (darwin128k).


---- log opened Wed Oct 21 10:07:41 2026
[10:07:41] sql open FAILED (mysql): Can't connect to server on '127.0.0.1' (115) — need libmariadb/libmysqlclient on host, check sql_host/user/pass/db/port
[10:07:41] sql open FAILED

---- log opened Wed Oct 21 10:22:27 2026
[10:22:27] sql: waiting 3000 ms before first connect
[10:22:30] sql open (authum mysql): gatekeeper@127.0.0.1:3306/gatekeper
[10:22:30] ready (sql + iphub + filter + steam_guard)
[10:26:22] iphub ok ip=130.12.171.102 code=US asn=399275 block=0 isp=SOLID

---- log opened Wed Oct 21 10:39:46 2026
[10:39:46] sql: waiting 3000 ms before first connect
[10:39:49] sql open (authum mysql): gatekeeper@127.0.0.1:3306/gatekeeper
[10:39:49] ready (sql + iphub + filter + steam_guard)
[10:40:09] filter DENY country ip=130.12.171.102 code=US asn=399275 block=0 isp=SOLID
[10:40:09] reject connect (filter) userid=1 auth=STEAM_0:0:985102832 ip=130.12.171.102 reason=Access denied
[10:40:11] iphub ok ip=81.88.217.154 code=RU asn=39709 block=0 isp=EXTREME-AS
 

Вложения

  • 1792568639079.png
    1792568639079.png
    219,4 КБ · Просмотры: 20
  • 1792569228312.png
    1792569228312.png
    416,2 КБ · Просмотры: 19
Последнее редактирование:
И так подведем итоги (по прошлым сообщениям ничего не понятно).

Что уже есть свой загрузчик Authum который заменяет AMXX пока только на уровне серверных команд и некоторых событий.
  • Metamod подтягивает загрузчик, а далее тот транслирует события уже на свои модули.
  • Удалось избавиться от SDK, который при написании плагинов приходилось подтягивать: достаточно затянуть загрузчик — он сам предоставляет API.
  • Добавили cJSON, SQLite, MySQL, а также полноценную загрузку конфигураций для модулей.
  • Модули общаются через шину событий (forwards / queries): можно подписываться на коннект, дисконнект и свои каналы, без прямой связки .so друг с другом.
  • Консольные команды модулей идут через один вход authum … — без pfnAddServerCommand, без конфликтов с AMXX и без «висящих» команд после unload.
  • Модули можно load / unload / reload на горячую, без рестарта сервера; подписки и команды снимаются и возвращаются вместе с модулем.
  • У каждого модуля свой sandbox памяти: аллокации живут в дереве владения хоста и освобождаются после stop.
  • Логи модулей — единый logger (host / console / file), с режимами один файл или лог на каждый старт.
  • Пути и окружение модуль получает от хоста (game / addons / modules / свой каталог), без ручного гадания по HLDS layout.
  • Крипто и кусок engine API тоже через фасад хоста — модулю не нужен HLSDK и не нужна своя связка с libstdc++ под древний сервер.
  • Рядом уже живут отдельные модули в этой схеме: qproto (авторизация / RevEmu / Vellum) и gatekeeper (geo / proxy / steam_guard).
Что рассказать про Gatekeeper:
  • На каждом коннекте смотрит IP через IPHub (с кэшем в SQL) и режет по стране / proxy / VPN block score — либо пропускает по whitelist.
  • Whitelist гибкий: ASN, IP, SteamID, флаги block — свои и чужие сети можно развести без правки кода.
  • steam_guard помнит, с каких ASN (и опционально стран) уже заходил этот SteamID: сначала учится (enforce=0), потом можно включить жёсткий отказ на «прыжки» сессии.
  • База из коробки на SQLite; при желании — MySQL/MariaDB через Authum SQL, с delay/retry если MariaDB поднимается вместе с HLDS.
  • Секреты (ключ IPHub, пароль SQL) в gatekeeper.local.cfg, не в общем cfg (надо бы продумать хранение тут пока по старой схеме).
  • Кики с понятным текстом для игрока («страна …», «proxy/VPN …»), а не одной общей фразой.
  • Другим модулям отдаёт событие gatekeeper.client.resolved — можно строить логику поверх уже резолвнутого клиента.
Про Qproto думаю все уже и так поняли, но все же повторюсь:
  • Линия 2.0 — модуль Authum (pure C11): без HLSDK, без Metamod-плагина внутри; достаточно хоста Authum и своего .so + cfg.
  • Линия 1.0 остаётся отдельным Metamod-плагином (qproto_i386.so), если нужен классический plugins.ini без Authum.
  • Поддерживает семейство RevEmu / SC2009 / sXe / Setti / NoSteam 47 - 48 и билет Vellum; каждый тип включается и настраивается в qproto.cfg.
  • Хукает Steam_NotifyClientConnect, разбирает тикет/ключ и выставляет client id так, как задано (cid_*), либо режет с понятным rej_msg_*.
  • Vellum включён в поставке 2.0 (enable_vellum = 1); отказ движку не дублируется вторым SV_RejectConnection — без краша на «двойном reject» (выпущена 1.0.2 версия и там тот же фикс).
  • Крипто и вызовы engine — через фасад Authum; свой Rijndael/SHA и libstdc++ в модуль больше не тащатся.
  • Баны из протокола убрали: qproto только авторизует; баны / статистика — другие модули на шине событий.
  • Наружу: qproto.client.authorized и запрос qproto.client.query; в консоли — authum qproto info (все или один клиент по userid / слоту / нику).
Также отдельно разобрался с GitHub теперь в каждом репозитории есть релизы с архивами вместе с конфигами и модулем (прошу прощения у всех кто до этого мучался при скачивании - я исправился).
 

Кто просматривает тему

Назад
Верх