TUI-приложение для управления блокировкой серверов Stalzone через nftables. Автоматически применяет правила при запуске игры и снимает при остановке.
- Интерактивный TUI для выбора серверов
- Пинг серверов с цветовой индикацией
- Автоматическое применение nft-правил при обнаружении
stalzone.exe - Автоматическая очистка правил при остановке игры
- Поиск по серверам
- systemd сервис для работы в фоне
- Linux (nftables)
- Go 1.21+
pgrep(обычно есть вprocps)jq(для скриптов)- Права на управление nftables (
CAP_NET_ADMIN)
git clone https://github.com/sh1zicus/Stalzone-Server-Blocker-linux.git
cd Stalzone-Server-Blocker-Linux
make buildБинарник нуждается в правах CAP_NET_ADMIN для управления nftables:
# Вариант 1: через setcap (рекомендуется)
sudo setcap cap_net_admin+ep ./stalzone-blocker
# Вариант 2: запуск через sudo
sudo ./stalzone-blocker./stalzone-blocker| Клавиша | Действие |
|---|---|
↑ ↓ |
Навигация |
← → |
Свернуть/развернуть пул |
␣ |
Включить/выключить сервер |
Enter |
Включить/выключить весь пул |
R |
Обновить пинг |
A |
Применить правила |
D |
Сбросить правила |
/ |
Поиск |
q |
Выход |
- 🟢 Зелёный: ≤30 ms
- 🟡 Жёлтый: ≤60 ms
- 🟠 Оранжевый: ≤90 ms
- 🔴 Красный: >90 ms
- ⚪ Серый: таймаут
Daemon следит за процессом stalzone.exe и автоматически управляет nft-правилами:
./stalzone-blocker --daemon- При обнаружении
stalzone.exe→ задержка 2 сек → применение правил - При остановке
stalzone.exe→ немедленная очистка правил
# Скопировать файл сервиса
cp stalzone-blocker.service ~/.config/systemd/user/
# Перезагрузить конфигурацию
systemctl --user daemon-reload
# Включить автозапуск
systemctl --user enable stalzone-blocker.service
# Запустить сейчас
systemctl --user start stalzone-blocker.service# Статус
systemctl --user status stalzone-blocker.service
# Остановить
systemctl --user stop stalzone-blocker.service
# Перезапустить
systemctl --user restart stalzone-blocker.service
# Логи
journalctl --user -u stalzone-blocker -f
# Логи за последний час
journalctl --user -u stalzone-blocker --since "1 hour ago"Отредактируйте stalzone-blocker.service:
[Service]
ExecStart=%h/Projects/stalzone-server-blocker/stalzone-blocker --daemonЗамените путь на ваш实际ный путь к бинарнику.
Конфигурация хранится в ~/.config/stalzone-blocker/config.json:
{
"selected": ["SERVER-1", "SERVER-2"],
"theme": "dark",
"sort": "ping",
"window": {
"width": 120,
"height": 35
}
}| Поле | Описание |
|---|---|
selected |
Список включённых серверов |
theme |
Тема оформления |
sort |
Сортировка серверов |
window |
Размер окна TUI |
stalzone-blocker/
├── cmd/
│ └── stalzone-blocker/
│ └── main.go # Точка входа
├── internal/
│ ├── app/
│ │ └── app.go # Инициализация TUI
│ ├── config/
│ │ ├── config.go # Загрузка/сохранение конфига
│ │ └── selection.go # Управление выбором серверов
│ ├── daemon/
│ │ └── daemon.go # Фоновый мониторинг
│ ├── logger/
│ │ └── logger.go # Логирование
│ ├── model/
│ │ ├── config.go # Модель конфигурации
│ │ ├── pool.go # Модель пула/туннеля
│ │ ├── servers_json.go # Структура Servers.json
│ │ └── state.go # Состояние TUI
│ ├── nft/
│ │ ├── apply.go # Применение правил
│ │ ├── check.go # Проверка прав
│ │ └── reset.go # Сброс правил
│ ├── ping/
│ │ └── worker.go # Пинг серверов
│ ├── servers/
│ │ └── loader.go # Загрузка Servers.json
│ ├── tui/
│ │ ├── model.go # Модель TUI
│ │ ├── style.go # Стили Lipgloss
│ │ ├── update.go # Обработка сообщений
│ │ └── view.go # Отрисовка
│ └── util/
│ ├── files.go # Поиск файлов
│ └── paths.go # Пути к файлам
├── data/
│ └── Servers.json # Список серверов
├── go.mod
├── go.sum
├── Makefile
└── stalzone-blocker.service # Systemd сервис
# Обычная сборка
make build
# Сборка + установка прав
make setcap
# Запуск
make run
# Очистка
make cleanСерверы хранятся в data/Servers.json:
{
"mode": "roxy",
"pools": [
{
"name": "GAME-EU",
"region": "EU",
"tunnels": [
{
"name": "GAME-EU-2",
"address": "79.127.241.67:29450"
}
]
}
]
}- Отредактируйте
data/Servers.json - Добавьте запись в соответствующий пул
- Перезапустите приложение или нажмите
Rдля обновления пинга
# Проверить текущие правила
sudo nft list table inet stalzone_blocker
# Ручное применение
./stalzone-blocker
# Нажмите A
# Ручной сброс
# Нажмите Dsudo setcap cap_net_admin+ep ./stalzone-blocker# Проверить логи
journalctl --user -u stalzone-blocker -n 50
# Проверить путь в сервисе
cat ~/.config/systemd/user/stalzone-blocker.serviceУбедитесь, что stalzone.exe запущен и процесс доступен через:
pgrep -f "stalzone.exe"MIT