mirror of
https://github.com/mrvasil/ctf-ad-mirror-tool-rust.git
synced 2026-10-23 15:31:01 +00:00
75 lines
5.1 KiB
Markdown
75 lines
5.1 KiB
Markdown
# Конфигурация и ForcAD
|
||
|
||
## Где хранится
|
||
|
||
Обычный запуск: `./target/release/mirror-tool --config mirror.toml`.
|
||
Шаблон — `mirror.example.toml`; файл выбирается флагом `--config`.
|
||
|
||
Локальное демо этого проекта использует `data/demo/mirror.toml`, а изменения
|
||
из панели — `data/demo/state.json`. Оба файла исключены из Git. Это тестовая
|
||
конфигурация loopback с публичным тестовым паролем, не конфигурация для игры.
|
||
|
||
В `[web]` задаётся `state_file`. Относительный путь считается от каталога TOML.
|
||
После первого сохранения из UI список команд/сервисов загружается из state-файла,
|
||
а сеть, мониторинг, web и scoreboard — по-прежнему из TOML. Изменение `[[teams]]`
|
||
или `[[services]]` в TOML не заменяет существующее сохранённое состояние.
|
||
Чтобы заново импортировать стартовую топологию, остановите процесс, переместите
|
||
state-файл в резервную копию и запустите процесс снова. Не удаляйте рабочее
|
||
состояние во время работы.
|
||
|
||
## ForcAD
|
||
|
||
1. В начало TOML, **перед секциями**, добавьте адрес своей команды:
|
||
|
||
```toml
|
||
main_team_ip = "192.0.2.10"
|
||
```
|
||
|
||
2. Добавьте секцию с адресом scoreboard вашей авторизованной игры:
|
||
|
||
```toml
|
||
[scoreboard]
|
||
kind = "forcad"
|
||
url = "http://scoreboard.example:8080"
|
||
poll_interval_ms = 3000
|
||
stale_after_ms = 15000
|
||
```
|
||
|
||
Это примеры адресов, их нужно заменить. Используется Engine.IO 4 / Socket.IO
|
||
namespace `/game_events`; URL задаётся корневой, без `/socket.io`, query и токенов.
|
||
ForcAD-соединение постоянное; `poll_interval_ms` не означает новый handshake
|
||
каждые 3 секунды. После изменения TOML нужен перезапуск процесса.
|
||
|
||
3. Через «Команды» добавьте IP каждой команды и **точное имя из scoreboard**.
|
||
Название сервиса тоже должно совпадать с именем задания в scoreboard.
|
||
IP существующей команды менять нельзя: добавьте новую и выберите её в маршруте.
|
||
Для прямого IP у custom-прокси отдельная команда не нужна.
|
||
|
||
4. В настройках сервиса (клик по названию) задайте адрес/порт слушателя и
|
||
реальный upstream-порт. Например, прокси `0.0.0.0:18080`, сервис команд `8080`.
|
||
Кружок выбирает primary; строка — реплику. Затем включите прокси.
|
||
|
||
5. Робот включает автоматический выбор **из назначенных реплик**. Статус TCP,
|
||
свежесть scoreboard и cooldown влияют на решение. Открытые TCP-сессии сохраняют
|
||
прежний upstream, новые используют выбранный. Системные маршруты не меняются.
|
||
|
||
Кнопка ⓘ показывает состояние scoreboard и краткую инструкцию. Верхняя полоска
|
||
сервиса относится к своей команде (`main_team_ip`), а не к выбранному upstream.
|
||
Серый статус означает отсутствие свежих данных, а не успех checker.
|
||
|
||
Пароль обычного процесса задаётся в `MIRROR_PASSWORD` (минимум 12 символов),
|
||
не в TOML. Тестовый fixture для настоящей игры не используйте; запускайте бинарник
|
||
напрямую с собственным конфигом и паролем. Реальная игра этой проверкой не затрагивалась.
|
||
|
||
## Повторяемое локальное демо
|
||
|
||
```sh
|
||
python3 scripts/ui_fixture.py target/release/mirror-tool --data-dir data/demo
|
||
```
|
||
|
||
Утилита сохраняет существующий TOML/state и не перезаписывает их. Без `--data-dir`
|
||
всё состояние временное. Для отдельной проверки используйте `--port-offset 100`:
|
||
панель 16800, proxy 18181, echo upstream 18182. Не запускайте второй fixture на
|
||
тех же портах или с той же папкой состояния. Смещение применяется к новому шаблону;
|
||
у существующего TOML порты остаются как записано в файле.
|