6.6 KiB
Cheburcheck Probe
Динамический сканер для Cheburcheck. Подключается к MQTT-брокеру Cheburcheck по WebSocket, получает задания на проверку доменов, выполняет сетевые пробы со своей точки подключения и отправляет результаты обратно на сайт.
Сканер нужен для проверки «изнутри» разных сетей: например, от разных операторов, регионов или хостингов. Он не принимает итоговое решение сам, а передает технические признаки, по которым Cheburcheck показывает результат пользователю.
Сборка
Готовые бинарные файлы и Debian-пакеты можно скачать на странице релизов.
На Debian-based дистрибутивах можно собрать пакет через cargo-deb:
cargo deb --package probe -- --bin cheburprobe
На прочих дистрибутивах и ОС можно запустить напрямую:
cargo run --package probe --bin cheburprobe -- \
--probe-id <ID_СКАНЕРА> \
--probe-token <ТОКЕН_СКАНЕРА>
Также доступен Docker-образ, который собирается из probe/Dockerfile.
Получение доступа
Для подключения сканера нужен PROBE_ID и PROBE_TOKEN.
Они должны соответствовать записи в таблице reporters на стороне Cheburcheck.
Чтобы получить доступ, напишите на support@cheburcheck.ru. В письме укажите:
- регион;
- интернет-провайдера или хостинг;
- ASN, если он известен;
- где будет запущен сканер: сервер, домашний роутер, микрокомпьютер и так далее.
Установка как systemd-демона
Самый простой способ установки на Debian-based систему — скачать .deb пакет cheburprobe со страницы релизов.
Debian-пакет устанавливает systemd unit cheburprobe.service и файл конфигурации /etc/default/cheburprobe.
Сервис не включается автоматически: сначала нужно указать данные сканера.
-
Установите пакет:
sudo apt install ./cheburprobe_*.deb -
Настройте
/etc/default/cheburprobe:sudo nano /etc/default/cheburprobeМинимальная конфигурация:
PROBE_ID=1 PROBE_TOKEN=ваш-токен MQTT_HOST=wss://cheburcheck.ru/mqtt MQTT_PORT=443 -
Запустите и включите сервис:
sudo systemctl enable --now cheburprobe.service -
Проверьте статус:
systemctl status cheburprobe.service -
Посмотрите логи:
journalctl -u cheburprobe.service -f
Сервис запускается с DynamicUser=yes, поэтому сканеру не нужен root-доступ.
Запуск без установки
Пример запуска из исходников:
PROBE_ID=1 \
PROBE_TOKEN=ваш-токен \
MQTT_HOST=wss://cheburcheck.ru/mqtt \
MQTT_PORT=443 \
cargo run --package probe --bin cheburprobe
Пример запуска через Docker:
docker run --rm \
-e PROBE_ID=1 \
-e PROBE_TOKEN=ваш-токен \
-e MQTT_HOST=wss://cheburcheck.ru/mqtt \
-e MQTT_PORT=443 \
ghcr.io/lowderplay/cheburcheck-probe:latest
Конфигурация
| Параметр | Описание | Значение по умолчанию |
|---|---|---|
--mqtt-host, MQTT_HOST |
Адрес MQTT-брокера по WebSocket. Поддерживаются ws:// и wss://. |
wss://cheburcheck.ru/mqtt |
--mqtt-port, MQTT_PORT |
Порт MQTT-брокера. | 443 |
--mqtt-connection-timeout-secs, MQTT_CONNECTION_TIMEOUT_SECS |
Таймаут подключения к MQTT-брокеру. | 30 |
--probe-id, PROBE_ID |
ID сканера. | обязательно |
--probe-token, PROBE_TOKEN |
Секретный токен сканера. | обязательно |
--max-concurrent-tasks, MAX_CONCURRENT_TASKS |
Максимальное количество одновременных заданий. | 8 |
RUST_LOG |
Уровень логирования. | info |
MAX_CONCURRENT_TASKS должен быть больше нуля.
Как работает проверка
После подключения сканер:
- публикует retained-статус
onlineв MQTT; - подписывается на конфигурацию динамического сканирования;
- получает задания на проверку доменов;
- параллельно проверяет домен на настроенных тестовых хостах;
- отправляет результат обратно в Cheburcheck.
Для каждого тестового хоста сканер открывает TCP-соединение, начинает TLS-handshake с проверяемым доменом в SNI, затем отправляет простой HTTP GET-запрос. Проверка намеренно отключает валидацию TLS-сертификата, потому что измеряется доступность соединения, а не доверие к сертификату.
Диагностика
Если сканер не подключается:
- проверьте
PROBE_IDиPROBE_TOKEN; - убедитесь, что
MQTT_HOSTначинается сws://илиwss://; - проверьте доступность
MQTT_HOST:MQTT_PORTс сервера; - посмотрите логи через
journalctl -u cheburprobe.service -f; - временно установите
RUST_LOG=debug.