diff --git a/.env.example b/.env.example index 6f195dc..e842260 100644 --- a/.env.example +++ b/.env.example @@ -2,6 +2,9 @@ # Обязательные POOL_DOMAIN=app.example.com +# Цели: любые IP (частные или публичные) и имена (внутрикорпоративные или глобальные FQDN), через запятую. +# Пример смешанного списка: +# CHECK_TARGETS=10.0.0.1,192.168.1.5,node.dc.internal,api.public.example.com,203.0.113.1 CHECK_TARGETS=10.0.0.1,10.0.0.2,backend.example.org CLOUDFLARE_API_TOKEN= diff --git a/README.md b/README.md index 001acbd..0405207 100644 --- a/README.md +++ b/README.md @@ -37,6 +37,22 @@ - **Проверка бэкендов** (`CHECK_MODE=curl`) — запросы к URL из целей / шаблону `CURL_URL_TEMPLATE`. - **Порт `STATUS_HTTP_PORT`** — только встроенная страница статуса внутри контейнера, не health-check. +### CHECK_TARGETS: не только «локальные» адреса + +В инструкции в примерах часто встречаются частные IP — это лишь **пример**. Формат **тот же** для любых целей, которые контейнер реально может проверить: + +| Тип | Примеры | +|-----|---------| +| Частные IP | `10.0.0.1`, `192.168.1.10`, `172.16.0.5` | +| Публичные (глобальные) IP | `203.0.113.50`, адреса VPS/анонсеров | +| Внутренние FQDN | `backend.prod.local`, `node1.dc.company.internal` | +| Публичные домены | `api.example.com`, `origin.example.org` | +| URL (режим `curl`) | `https://api.example.com/health`, `http://203.0.113.1:8080/ping` | + +Имя резолвится через **DNS из контейнера** (`dig`); для сопоставления с пулом Cloudflare используется полученный **A/AAAA**. Проверка — обычный **ping** к IP или **curl** к URL. + +Единственное условие: **из сети контейнера** до цели должен доходить трафик (маршрутизация, файрвол, `docker network`, VPN и т.д.). Публичные хосты в интернете обычно доступны из стандартного bridge; частные адреса за NAT без проброса/маршрута — нет, пока не настроите сеть. + --- ## Требования @@ -87,7 +103,7 @@ docker run --rm \ | Переменная | Обязательно | По умолчанию | Описание | |------------|-------------|--------------|----------| | `POOL_DOMAIN` | да | — | DNS-имя пула (все **A/AAAA** с этим именем управляются скриптом). | -| `CHECK_TARGETS` | да | — | Список целей через **запятую**: IP, hostname или `http(s)://...`. | +| `CHECK_TARGETS` | да | — | Список через **запятую**: любые **достижимые** цели — частные/публичные **IP**, внутренние или **глобальные** имена, либо `http(s)://...` (подробнее — подраздел **«CHECK_TARGETS: не только „локальные“ адреса»** выше). | | `CLOUDFLARE_API_TOKEN` | да* | — | Bearer-токен Cloudflare. | | `CLOUDFLARE_API_KEY` | нет | — | Алиас для токена (если не задан `CLOUDFLARE_API_TOKEN`). | | `CLOUDFLARE_ZONE_ID` | нет | — | ID зоны; если пусто — поиск по имени зоны. | @@ -162,6 +178,18 @@ docker run --rm --cap-add=NET_RAW \ cloudflare-balancer:latest ``` +### Смешанные цели: частные IP, публичный домен, глобальный IP + +```bash +docker run --rm --cap-add=NET_RAW \ + -e POOL_DOMAIN=app.example.com \ + -e CHECK_TARGETS='10.0.0.1,origin.example.com,203.0.113.10' \ + -e CLOUDFLARE_API_TOKEN="$CLOUDFLARE_API_TOKEN" \ + cloudflare-balancer:latest +``` + +*(Замените `203.0.113.10` на реальный публичный IP бэкенда; `origin.example.com` — на любой FQDN, который резолвится и отвечает на ping из контейнера.)* + ### Веб-статус + проброс порта + whitelist При доступе **с хоста Docker** клиентский IP в контейнере часто совпадает с адресом **шлюза bridge** (часто `172.17.0.1` или подсеть `172.17.0.0/16`). Добавьте её или конкретный IP в whitelist.