rekryt/iplist

IP Address Collection and Management Service with multiple output formats: mikrotik, json, text, ipset, nfset, clashx, keenetic, switchy, amnezia

HTML

1,867

600 commits

updated Sep 16, 2026

See the code

README

IP Address Collection and Management Service with multiple formats

For english readme: README.en.md

Основной портал: https://iplist.opencck.org

Портал с прочими сервисами: https://beta.iplist.opencck.org

Портал с российскими сервисами: https://russia.iplist.opencck.org

iplist

Сервис сбора IP-адресов и CIDR зон

Данный сервис предназначен для сбора и обновления IP-адресов (IPv4 и IPv6), а также их CIDR зон для указанных доменов. Это асинхронный PHP веб-сервер на основе AMPHP и Linux-утилит whois и ipcalc. Сервис предоставляет интерфейсы для получения списков зон ip адресов указанных доменов (IPv4 адресов, IPv6 адресов, а также CIDRv4 и CIDRv6 зон) в различных форматах, включая текстовый, JSON, форматы скриптов для добавления в "Address List" на роутерах Mikrotik (RouterOS), Keenetic KVAS\BAT, SwitchyOmega, Amnezia и др.

Основные возможности

  • Сбор и автоматическое обновление IP-адресов и CIDR зон для доменов.
  • Поддержка вывода данных в различных форматах (JSON, lst, Mikrotik, OpenWRT, ipset и т.д).
  • Интеграция с внешними источниками данных (поддержка импорта начальных данных из внешних URL).
  • Легкое развертывание с помощью Docker Compose.
  • Настройка через JSON файлы для управления доменами.

Используемые технологии

  • PHP 8.1+ (amphp, revolt)
  • whois, ipcalc (linux)

Image

Форматы выгрузки

форматописание
jsonJSON формат
textРазделение новой строкой
commaРазделение запятыми
geoipv2rayGeoIPDat
geositev2rayGeoSiteDat
singboxsing-box rule-set (JSON)
srssing-box rule-set (бинарный)
mikrotikMikroTik Script
switchySwitchyOmega RuleList
nfsetDnsmasq nfset
ipsetDnsmasq ipset
clashxClashX
kvasKeenetic KVAS
batKeenetic Routes .bat
wildcardKeenetic DNS
amneziaAmnezia filter list
pacProxy Auto-Configuration file

Настройки

Конфигурационные файлы хранятся в config/<группа>/<портал>.json. Каждый JSON файл представляет собой конфигурацию для конкретного портала, задавая домены для мониторинга и источники начальных данных по IP и CIDR.

{
    "domains": [
        "youtube.com",
        "www.youtube.com",
        "m.youtube.com",
        "www.m.youtube.com",
        "googlevideo.com",
        "www.googlevideo.com",
        "ytimg.com",
        "i.ytimg.com"
    ],
    "dns": ["127.0.0.11:53", "77.88.8.88:53", "8.8.8.8:53"],
    "timeout": 43200,
    "ip4": [],
    "ip6": [],
    "cidr4": [],
    "cidr6": [],
    "external": {
        "domains": ["https://raw.githubusercontent.com/nickspaargaren/no-google/master/categories/youtubeparsed"],
        "ip4": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/ipv4_list.txt"],
        "ip6": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/ipv6_list.txt"],
        "cidr4": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/cidr4.txt"],
        "cidr6": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/cidr6.txt"]
    }
}
свойствотипописание
domainsstring[]Список доменов портала
dnsstring[]Список DNS серверов для обновления ip-адресов. По мимо локального и google dns, можно использовать публичные российские DNS, например Яндекс
timeoutintВремя между обновлением ip-адресов доменов (секунды)
ip4string[]Начальный список ipv4 адресов
ip6string[]Начальный список ipv6 адресов
cidr4string[]Начальный список CIDRv4 зон ipv4 адресов
cidr6string[]Начальный список CIDRv6 зон ipv6 адресов
externalobjectСписки URL для получения данных от сторонних источников
replaceobjectЗамена пересекающихся CIDR зон на более узкие (см. раздел ниже)
свойствотипописание
domainsstring[]Список URL для пополнения доменов портала
ip4string[]Список URL для пополнения ipv4 адресов
ip6string[]Список URL для пополнения ipv6 адресов
cidr4string[]Список URL для пополнения CIDRv4 зон ipv4 адресов
cidr6string[]Список URL для пополнения CIDRv6 зон ipv6 адресов

Замена пересекающихся CIDR зон (свойство replace)

Опциональное поле replace в конфиге портала позволяет заменить «широкие» CIDR-зоны, принадлежащие нескольким порталам (например, 172.217.0.0/16 у google и yandex), на более узкие CIDR-блоки, известные только этому порталу. При включённой опции SYS_REPLACE_AGGREGATE_SUBNETS блоки дополнительно агрегируются (supernet), а четыре порога SYS_REPLACE_COLLAPSE_THRESHOLD_* включают «пирамидальное» плотностное схлопывание.

Все подробности — в отдельном документе: docs/REPLACE.md.

Настройка и запуск под docker

git clone https://github.com/rekryt/iplist.git
cd iplist
cp .env.example .env

Если требуется отредактируйте .env файл

свойствозначение по умолчаниюописание
COMPOSE_PROJECT_NAMEiplistИмя compose проекта
STORAGE_SAVE_INTERVAL120Период сохранения кеша whois (секунды)
SYS_DNS_RESOLVE_IP4trueПолучать ipv4 адреса
SYS_DNS_RESOLVE_IP6trueПолучать ipv6 адреса
SYS_DNS_RESOLVE_CHUNK_SIZE10Размер чанка для получения dns записей
SYS_DNS_RESOLVE_DELAY100Задержка между получением dns записей (миллисекунды)
SYS_IP6_SUBNET_PREFIX_CAP64Максимально допустимая длина префикса IPv6-подсети
SYS_REPLACE_ESCALATE_IPStrueЭскалировать ip4/ip6 в replace на этапе reload
SYS_REPLACE_AGGREGATE_SUBNETSfalseАгрегировать (supernet) value-массивы replace на reload
SYS_REPLACE_COLLAPSE_THRESHOLD_IP4_240Порог /24-схлопывания (v4, узкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP4_160Порог /16-схлопывания (v4, широкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP6_640Порог /64-схлопывания (v6, узкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP6_320Порог /32-схлопывания (v6, широкий tier). 0 — выключено
SYS_MEMORY_LIMIT1024MПредельное кол-во памяти.
SYS_TIMEZONEEurope/MoscowСписок URL для получения начальных CIDRv4 зон ipv4 адресов
SYS_TMP_PATHstorage/tmpКаталог временных файлов генераторов (см. ниже)
SYS_TMP_TTL900Возраст, после которого осиротевший временный каталог удаляется (секунды)
SYS_TMP_SWEEP_INTERVAL600Период уборки осиротевших временных каталогов (секунды). 0 — выключено
SYS_ENCODE_WORKER_THRESHOLD20000Порог по числу записей, выше которого сборка .dat уходит в отдельный процесс. 0 — всегда в отдельный процесс
SYS_GEOIP_NATIVEtrueСобирать geoip.dat самим сервисом. false — путь через утилиту v2fly/geoip
HTTP_HOST0.0.0.0IP сетевого интерфейса (по умолчанию все интерфейсы)
HTTP_PORT8080Сетевой порт сервера (по умолчанию 8080)
GEOIP_PATH./geoip/Каталог с бинарником geoip. Нужен только при SYS_GEOIP_NATIVE=false
SINGBOX_PATH/usr/local/bin/sing-boxПуть к бинарнику sing-box. Нужен формату srs, без него формат отдаст ошибку
DEBUGtrueОпределяет уровень логирования
docker compose up -d

Открыть сервис можно в браузере по протоколу http, порт 8080

http://0.0.0.0:8080/
http://0.0.0.0:8080/?format=json
http://0.0.0.0:8080/?format=json&site=youtube.com&data=domains
http://0.0.0.0:8080/?format=text&site=youtube.com&data=ip4
http://0.0.0.0:8080/?format=mikrotik&data=cidr4
http://0.0.0.0:8080/?format=mikrotik&site=youtube.com&data=cidr4
http://0.0.0.0:8080/?format=comma&data=cidr4
get параметрописаниепример
formatФормат выгрузки данных?format=text
dataДанные для выгрузки?data=cidr4
siteПортал для выгрузки данных?site=youtube.com
groupГруппа для выгрузки данных?group=youtube
exclude[ip4]Исключить ipv4 адреса?exclude[ip4]=1.1.1.1&exclude[ip4]=2.2.2.2
exclude[ip6]Исключить ipv6 адреса?exclude[ip6]=2a06:98c1:3121::a
exclude[cidr4]Исключить CIDRv4 зоны?exclude[cidr4]=1.1.1.0/24
exclude[cidr6]Исключить CIDRv6 зоны?exclude[cidr6]=2a06:98c1::/32
exclude[group]Исключить группы?exclude[group]=youtube&exclude[group]=casino
exclude[site]Исключить порталы?exclude[site]=youtube.com
exclude[domain]Исключить домены?exclude[domain]=youtube.com
wildcardОставлять только wildcard домены?wildcard=1
filesaveСохранять как файл?filesave=1
nativeОтдавать исходные cidr4/cidr6 портала без применения replace (см. docs/REPLACE.md)?data=cidr4&native=1
domaintypeТип доменного правила: suffix (по умолчанию), full, keyword, regex — для geosite, singbox, srs?domaintype=full
versionВерсия формата rule-set 1…5 (по умолчанию 1) — для singbox, srs?version=3
templateШаблон выгрузки?format=custom&template=подробнее

Настройка SSL

Для настройки SSL сертификата вам понадобится домен настроенный на ваш сервер. Если у вас нет собственного домена - как вариант бесплатный домен можно получить например на https://noip.com. Актуальность такого домена придётся подтверждать раз в месяц.

  • Установите и настройте реверс-прокси, например NginxProxyManager
  • Создайте виртуальную сеть docker
docker network create web
  • Настройте её в docker-compose.yml файлах реверс-прокси и данного проекта
services:
    ...
    app:
        networks:
            - web
networks:
    web:
        external: true
        name: web
  • Удалите свойство ports из docker-compose.yml (этого проекта)
  • Примените изменения:
docker compose up -d
  • Имя контейнера можно посмотреть командой docker compose ps
  • В панели администрирования реверс-прокси настройте домен на него iplist-app-1 порт 8080 и включите SSL
  • NginxProxyManager будет продлевать ssl сертификат автоматически

Ручной запуск (PHP 8.1+)

apt-get install -y ntpsec whois dnsutils ipcalc
cp .env.example .env
composer install
php index.php

geoip.dat и geosite.dat собираются самим сервисом, внешние утилиты для них не нужны. Отдельный бинарник нужен только формату srs — им компилируется бинарный rule-set:

# sing-box (для формата srs)
SINGBOX_VERSION=1.13.15
curl -fsSL -o /tmp/sing-box.tar.gz   "https://github.com/SagerNet/sing-box/releases/download/v${SINGBOX_VERSION}/sing-box-${SINGBOX_VERSION}-linux-amd64-glibc.tar.gz"
tar -xzf /tmp/sing-box.tar.gz -C /tmp
install -m 0755 "/tmp/sing-box-${SINGBOX_VERSION}-linux-amd64-glibc/sing-box" /usr/local/bin/sing-box

Если нужна сборка geoip.dat через утилиту v2fly (SYS_GEOIP_NATIVE=false), понадобится Go 1.25+:

git clone --depth 1 https://github.com/v2fly/geoip.git
cd geoip && go build . && cd ../

Кастомный формат вывода

Для получения выгрузки данных по заданному шаблону используются get параметры: format=custom и template=шаблон, где шаблон может содержать такие паттерны как:

свойствоописание
{group}Имя группы
{site}Имя сайта
{data}Выбранные данные
{shortmask}Маска подсети (короткая) (для ip и cidr)
{mask}Маска подсети (полная) (для ip и cidr)

Примеры:

Wildcard домены twitter для dns static add под mikrotik для forward-to=localhost:
https://iplist.opencck.org/?format=custom&data=domains&site=x.com&wildcard=1&template=%2Fip%20dns%20static%20add%20name%3D%7Bdata%7D%20type%3DFWD%20address-list%3D%7Bgroup%7D_%7Bsite%7D%20match-subdomain%3Dyes%20forward-to%3Dlocalhost

Wildcard домены в кастомном формате:
https://iplist.opencck.org/?format=custom&data=domains&wildcard=1&template=data%3A%20%7Bdata%7D%20group%3A%20%7Bgroup%7D%20site%3A%20%7Bsite%7D

Маска подсети в кастомном формате:
https://iplist.opencck.org/?format=custom&data=cidr4&template=data%3A%20%7Bdata%7D%20group%3A%20%7Bgroup%7D%20site%3A%20%7Bsite%7D%20shortmask%3A%20%7Bshortmask%7D%20mask%3A%20%7Bmask%7D

Настройка маршрутизации Xray/V2Ray

Скачайте iplist.dat файл в рабочий каталог:

https://iplist.opencck.org/?format=geoip&data=cidr4

Пример routing конфигурации:

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat"]
      },
      ...
    ]
  },
  ...
}

Пример использования тегов (по имени портала или группы) в конфигурации:

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat:youtube.com"]
      },
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat:anime"]
      },
      ...
    ]
  },
  ...
}

Домены отдаются файлом geosite.dat (те же теги — по имени портала и по группе):

https://iplist.opencck.org/?format=geosite&data=domains
{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "domain": ["ext:geosite.dat:youtube.com"]
      },
      {
        "type": "field",
        "outboundTag": "vpn",
        "domain": ["ext:geosite.dat:anime"]
      },
      ...
    ]
  },
  ...
}

По умолчанию домены пишутся как RootDomain — правило срабатывает и на сам домен, и на все его поддомены. Другое поведение выбирается параметром domaintype: full — только точное совпадение, keyword — вхождение подстроки, regex — регулярное выражение.

Настройка sing-box (rule-set)

Сервис отдаёт rule-set в двух видах: singbox — исходный JSON, srs — скомпилированный бинарный файл (меньше размер и быстрее загрузка). Оба варианта sing-box умеет забирать по ссылке:

{
    "route": {
        "rule_set": [
            {
                "type": "remote",
                "tag": "iplist-ip",
                "format": "binary",
                "url": "https://iplist.opencck.org/?format=srs&data=cidr4&group=youtube",
                "download_detour": "direct",
                "update_interval": "1d"
            },
            {
                "type": "remote",
                "tag": "iplist-domains",
                "format": "source",
                "url": "https://iplist.opencck.org/?format=singbox&data=domains&group=youtube",
                "download_detour": "direct",
                "update_interval": "1d"
            }
        ],
        "rules": [
            {
                "rule_set": ["iplist-ip", "iplist-domains"],
                "outbound": "vpn"
            }
        ]
    }
}

Версия формата задаётся параметром version (по умолчанию 1 — её читают все sing-box начиная с 1.8). Для format=srs версия исходника является верхней границей: sing-box компилирует минимальную достаточную версию бинарного файла.

Настройка Mikrotik

  • В администраторской панели роутера (или через winbox) откройте раздел System -> Scripts
  • Создайте новый скрипт "Add new" с произвольным именем, например iplist_v4_cidr
  • В поле Source введите следующий код (используйте url адрес вашего сервера, протокол в mode тоже может отличаться):
/tool fetch url="https://iplist.opencck.org/?format=mikrotik&data=cidr4&append=timeout%3D1d" mode=https dst-path=iplist_v4_cidr.rsc
:delay 5s
:log info "Downloaded iplist_v4_cidr.rsc succesfully";

/import file-name=iplist_v4_cidr.rsc
:delay 10s
:log info "New iplist_v4_cidr added successfully";
  • 1
  • Сохраните скрипт
  • Откройте раздел планировщика System -> Scheduler
  • Создайте новое задание с произвольным именем, например iplist_v4_cidr
  • В качестве Start time укажите время для старта задания (пример: 00:05:00). Для Interval введите значение 1d 00:00:00.
  • В поле On event введите имя скрипта
iplist_v4_cidr
  • 2
  • Откройте скрипт в разделе System -> Scripts и запустите его нажатием на кнопку Run Script
  • В разделе Logs вы должны увидеть сообщение New iplist_v4_cidr added successfully
  • 3
  • А в разделе IP -> Firewall -> Address Lists должны появиться новые списоки (в примере с именем youtube)
  • 4

Через GET-параметр template для формата mikrotik можно указывать шаблон для имени списка:

https://iplist.opencck.org/?format=mikrotik&data=cidr4&append=timeout%3D1d&template={group}_{data}

По умолчанию шаблон имеет значение: {group}_{data}

Настройка HomeProxy (sing-box)

Включите "Routing mode" в "Only proxy mainland China": 1 Подключитесь к роутеру по ssh и выполните следующие команды:

# переименовываем старый скрипт обновления
mv /etc/homeproxy/scripts/update_resources.sh /etc/homeproxy/scripts/update_resources.sh.origin

# загружаем новый скрипт
wget https://iplist.opencck.org/scripts/homeproxy/update_resources.sh -O /etc/homeproxy/scripts/update_resources.sh

# добавляем права на выполнение
chmod +x /etc/homeproxy/scripts/update_resources.sh

# отменяем стирание cron после перезапуска homeproxy
sed -i '/sed -i/s/^/\t#/; /\/etc\/init.d\/cron restart >/s/^/\t#/' /etc/init.d/homeproxy

# вы захостили это решение? - тогда раскомментируйте следующую строку и поменяйте "example.com" на ваш домен
# sed -i 's/iplist.opencck.org/example.com/g' /etc/homeproxy/scripts/update_resources.sh

Откройте административную панель OpenWRT раздел "System" - "Sсheduled Tasks". Добавьте строку, чтобы автоматически запускать скрипт обновления при старте, а также в 00:05:00 и 12:05:00

5 0,12 * * * /etc/homeproxy/scripts/update_crond.sh

2

Настройка дополнения для Chrome - Proxy SwitchySharp

Установить можно по ссылке 1

Подробнее о формате Switchy RuleList

License

The MIT License (MIT). Please see LICENSE for more information.

amnezia
cidr-list
clashx
homeproxy
ip
ipset
ipv6
keenetic
mikrotik
openwrt
sing-box
switchyomega

rekryt/iplist

IP Address Collection and Management Service with multiple output formats: mikrotik, json, text, ipset, nfset, clashx, keenetic, switchy, amnezia

HTML

1,867

600 commits

updated Sep 16, 2026

See the code

README

IP Address Collection and Management Service with multiple formats

For english readme: README.en.md

Основной портал: https://iplist.opencck.org

Портал с прочими сервисами: https://beta.iplist.opencck.org

Портал с российскими сервисами: https://russia.iplist.opencck.org

iplist

Сервис сбора IP-адресов и CIDR зон

Данный сервис предназначен для сбора и обновления IP-адресов (IPv4 и IPv6), а также их CIDR зон для указанных доменов. Это асинхронный PHP веб-сервер на основе AMPHP и Linux-утилит whois и ipcalc. Сервис предоставляет интерфейсы для получения списков зон ip адресов указанных доменов (IPv4 адресов, IPv6 адресов, а также CIDRv4 и CIDRv6 зон) в различных форматах, включая текстовый, JSON, форматы скриптов для добавления в "Address List" на роутерах Mikrotik (RouterOS), Keenetic KVAS\BAT, SwitchyOmega, Amnezia и др.

Основные возможности

  • Сбор и автоматическое обновление IP-адресов и CIDR зон для доменов.
  • Поддержка вывода данных в различных форматах (JSON, lst, Mikrotik, OpenWRT, ipset и т.д).
  • Интеграция с внешними источниками данных (поддержка импорта начальных данных из внешних URL).
  • Легкое развертывание с помощью Docker Compose.
  • Настройка через JSON файлы для управления доменами.

Используемые технологии

  • PHP 8.1+ (amphp, revolt)
  • whois, ipcalc (linux)

Image

Форматы выгрузки

форматописание
jsonJSON формат
textРазделение новой строкой
commaРазделение запятыми
geoipv2rayGeoIPDat
geositev2rayGeoSiteDat
singboxsing-box rule-set (JSON)
srssing-box rule-set (бинарный)
mikrotikMikroTik Script
switchySwitchyOmega RuleList
nfsetDnsmasq nfset
ipsetDnsmasq ipset
clashxClashX
kvasKeenetic KVAS
batKeenetic Routes .bat
wildcardKeenetic DNS
amneziaAmnezia filter list
pacProxy Auto-Configuration file

Настройки

Конфигурационные файлы хранятся в config/<группа>/<портал>.json. Каждый JSON файл представляет собой конфигурацию для конкретного портала, задавая домены для мониторинга и источники начальных данных по IP и CIDR.

{
    "domains": [
        "youtube.com",
        "www.youtube.com",
        "m.youtube.com",
        "www.m.youtube.com",
        "googlevideo.com",
        "www.googlevideo.com",
        "ytimg.com",
        "i.ytimg.com"
    ],
    "dns": ["127.0.0.11:53", "77.88.8.88:53", "8.8.8.8:53"],
    "timeout": 43200,
    "ip4": [],
    "ip6": [],
    "cidr4": [],
    "cidr6": [],
    "external": {
        "domains": ["https://raw.githubusercontent.com/nickspaargaren/no-google/master/categories/youtubeparsed"],
        "ip4": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/ipv4_list.txt"],
        "ip6": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/ipv6_list.txt"],
        "cidr4": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/cidr4.txt"],
        "cidr6": ["https://raw.githubusercontent.com/touhidurrr/iplist-youtube/main/cidr6.txt"]
    }
}
свойствотипописание
domainsstring[]Список доменов портала
dnsstring[]Список DNS серверов для обновления ip-адресов. По мимо локального и google dns, можно использовать публичные российские DNS, например Яндекс
timeoutintВремя между обновлением ip-адресов доменов (секунды)
ip4string[]Начальный список ipv4 адресов
ip6string[]Начальный список ipv6 адресов
cidr4string[]Начальный список CIDRv4 зон ipv4 адресов
cidr6string[]Начальный список CIDRv6 зон ipv6 адресов
externalobjectСписки URL для получения данных от сторонних источников
replaceobjectЗамена пересекающихся CIDR зон на более узкие (см. раздел ниже)
свойствотипописание
domainsstring[]Список URL для пополнения доменов портала
ip4string[]Список URL для пополнения ipv4 адресов
ip6string[]Список URL для пополнения ipv6 адресов
cidr4string[]Список URL для пополнения CIDRv4 зон ipv4 адресов
cidr6string[]Список URL для пополнения CIDRv6 зон ipv6 адресов

Замена пересекающихся CIDR зон (свойство replace)

Опциональное поле replace в конфиге портала позволяет заменить «широкие» CIDR-зоны, принадлежащие нескольким порталам (например, 172.217.0.0/16 у google и yandex), на более узкие CIDR-блоки, известные только этому порталу. При включённой опции SYS_REPLACE_AGGREGATE_SUBNETS блоки дополнительно агрегируются (supernet), а четыре порога SYS_REPLACE_COLLAPSE_THRESHOLD_* включают «пирамидальное» плотностное схлопывание.

Все подробности — в отдельном документе: docs/REPLACE.md.

Настройка и запуск под docker

git clone https://github.com/rekryt/iplist.git
cd iplist
cp .env.example .env

Если требуется отредактируйте .env файл

свойствозначение по умолчаниюописание
COMPOSE_PROJECT_NAMEiplistИмя compose проекта
STORAGE_SAVE_INTERVAL120Период сохранения кеша whois (секунды)
SYS_DNS_RESOLVE_IP4trueПолучать ipv4 адреса
SYS_DNS_RESOLVE_IP6trueПолучать ipv6 адреса
SYS_DNS_RESOLVE_CHUNK_SIZE10Размер чанка для получения dns записей
SYS_DNS_RESOLVE_DELAY100Задержка между получением dns записей (миллисекунды)
SYS_IP6_SUBNET_PREFIX_CAP64Максимально допустимая длина префикса IPv6-подсети
SYS_REPLACE_ESCALATE_IPStrueЭскалировать ip4/ip6 в replace на этапе reload
SYS_REPLACE_AGGREGATE_SUBNETSfalseАгрегировать (supernet) value-массивы replace на reload
SYS_REPLACE_COLLAPSE_THRESHOLD_IP4_240Порог /24-схлопывания (v4, узкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP4_160Порог /16-схлопывания (v4, широкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP6_640Порог /64-схлопывания (v6, узкий tier). 0 — выключено
SYS_REPLACE_COLLAPSE_THRESHOLD_IP6_320Порог /32-схлопывания (v6, широкий tier). 0 — выключено
SYS_MEMORY_LIMIT1024MПредельное кол-во памяти.
SYS_TIMEZONEEurope/MoscowСписок URL для получения начальных CIDRv4 зон ipv4 адресов
SYS_TMP_PATHstorage/tmpКаталог временных файлов генераторов (см. ниже)
SYS_TMP_TTL900Возраст, после которого осиротевший временный каталог удаляется (секунды)
SYS_TMP_SWEEP_INTERVAL600Период уборки осиротевших временных каталогов (секунды). 0 — выключено
SYS_ENCODE_WORKER_THRESHOLD20000Порог по числу записей, выше которого сборка .dat уходит в отдельный процесс. 0 — всегда в отдельный процесс
SYS_GEOIP_NATIVEtrueСобирать geoip.dat самим сервисом. false — путь через утилиту v2fly/geoip
HTTP_HOST0.0.0.0IP сетевого интерфейса (по умолчанию все интерфейсы)
HTTP_PORT8080Сетевой порт сервера (по умолчанию 8080)
GEOIP_PATH./geoip/Каталог с бинарником geoip. Нужен только при SYS_GEOIP_NATIVE=false
SINGBOX_PATH/usr/local/bin/sing-boxПуть к бинарнику sing-box. Нужен формату srs, без него формат отдаст ошибку
DEBUGtrueОпределяет уровень логирования
docker compose up -d

Открыть сервис можно в браузере по протоколу http, порт 8080

http://0.0.0.0:8080/
http://0.0.0.0:8080/?format=json
http://0.0.0.0:8080/?format=json&site=youtube.com&data=domains
http://0.0.0.0:8080/?format=text&site=youtube.com&data=ip4
http://0.0.0.0:8080/?format=mikrotik&data=cidr4
http://0.0.0.0:8080/?format=mikrotik&site=youtube.com&data=cidr4
http://0.0.0.0:8080/?format=comma&data=cidr4
get параметрописаниепример
formatФормат выгрузки данных?format=text
dataДанные для выгрузки?data=cidr4
siteПортал для выгрузки данных?site=youtube.com
groupГруппа для выгрузки данных?group=youtube
exclude[ip4]Исключить ipv4 адреса?exclude[ip4]=1.1.1.1&exclude[ip4]=2.2.2.2
exclude[ip6]Исключить ipv6 адреса?exclude[ip6]=2a06:98c1:3121::a
exclude[cidr4]Исключить CIDRv4 зоны?exclude[cidr4]=1.1.1.0/24
exclude[cidr6]Исключить CIDRv6 зоны?exclude[cidr6]=2a06:98c1::/32
exclude[group]Исключить группы?exclude[group]=youtube&exclude[group]=casino
exclude[site]Исключить порталы?exclude[site]=youtube.com
exclude[domain]Исключить домены?exclude[domain]=youtube.com
wildcardОставлять только wildcard домены?wildcard=1
filesaveСохранять как файл?filesave=1
nativeОтдавать исходные cidr4/cidr6 портала без применения replace (см. docs/REPLACE.md)?data=cidr4&native=1
domaintypeТип доменного правила: suffix (по умолчанию), full, keyword, regex — для geosite, singbox, srs?domaintype=full
versionВерсия формата rule-set 1…5 (по умолчанию 1) — для singbox, srs?version=3
templateШаблон выгрузки?format=custom&template=подробнее

Настройка SSL

Для настройки SSL сертификата вам понадобится домен настроенный на ваш сервер. Если у вас нет собственного домена - как вариант бесплатный домен можно получить например на https://noip.com. Актуальность такого домена придётся подтверждать раз в месяц.

  • Установите и настройте реверс-прокси, например NginxProxyManager
  • Создайте виртуальную сеть docker
docker network create web
  • Настройте её в docker-compose.yml файлах реверс-прокси и данного проекта
services:
    ...
    app:
        networks:
            - web
networks:
    web:
        external: true
        name: web
  • Удалите свойство ports из docker-compose.yml (этого проекта)
  • Примените изменения:
docker compose up -d
  • Имя контейнера можно посмотреть командой docker compose ps
  • В панели администрирования реверс-прокси настройте домен на него iplist-app-1 порт 8080 и включите SSL
  • NginxProxyManager будет продлевать ssl сертификат автоматически

Ручной запуск (PHP 8.1+)

apt-get install -y ntpsec whois dnsutils ipcalc
cp .env.example .env
composer install
php index.php

geoip.dat и geosite.dat собираются самим сервисом, внешние утилиты для них не нужны. Отдельный бинарник нужен только формату srs — им компилируется бинарный rule-set:

# sing-box (для формата srs)
SINGBOX_VERSION=1.13.15
curl -fsSL -o /tmp/sing-box.tar.gz   "https://github.com/SagerNet/sing-box/releases/download/v${SINGBOX_VERSION}/sing-box-${SINGBOX_VERSION}-linux-amd64-glibc.tar.gz"
tar -xzf /tmp/sing-box.tar.gz -C /tmp
install -m 0755 "/tmp/sing-box-${SINGBOX_VERSION}-linux-amd64-glibc/sing-box" /usr/local/bin/sing-box

Если нужна сборка geoip.dat через утилиту v2fly (SYS_GEOIP_NATIVE=false), понадобится Go 1.25+:

git clone --depth 1 https://github.com/v2fly/geoip.git
cd geoip && go build . && cd ../

Кастомный формат вывода

Для получения выгрузки данных по заданному шаблону используются get параметры: format=custom и template=шаблон, где шаблон может содержать такие паттерны как:

свойствоописание
{group}Имя группы
{site}Имя сайта
{data}Выбранные данные
{shortmask}Маска подсети (короткая) (для ip и cidr)
{mask}Маска подсети (полная) (для ip и cidr)

Примеры:

Wildcard домены twitter для dns static add под mikrotik для forward-to=localhost:
https://iplist.opencck.org/?format=custom&data=domains&site=x.com&wildcard=1&template=%2Fip%20dns%20static%20add%20name%3D%7Bdata%7D%20type%3DFWD%20address-list%3D%7Bgroup%7D_%7Bsite%7D%20match-subdomain%3Dyes%20forward-to%3Dlocalhost

Wildcard домены в кастомном формате:
https://iplist.opencck.org/?format=custom&data=domains&wildcard=1&template=data%3A%20%7Bdata%7D%20group%3A%20%7Bgroup%7D%20site%3A%20%7Bsite%7D

Маска подсети в кастомном формате:
https://iplist.opencck.org/?format=custom&data=cidr4&template=data%3A%20%7Bdata%7D%20group%3A%20%7Bgroup%7D%20site%3A%20%7Bsite%7D%20shortmask%3A%20%7Bshortmask%7D%20mask%3A%20%7Bmask%7D

Настройка маршрутизации Xray/V2Ray

Скачайте iplist.dat файл в рабочий каталог:

https://iplist.opencck.org/?format=geoip&data=cidr4

Пример routing конфигурации:

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat"]
      },
      ...
    ]
  },
  ...
}

Пример использования тегов (по имени портала или группы) в конфигурации:

{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat:youtube.com"]
      },
      {
        "type": "field",
        "outboundTag": "vpn",
        "ip": ["ext:iplist.dat:anime"]
      },
      ...
    ]
  },
  ...
}

Домены отдаются файлом geosite.dat (те же теги — по имени портала и по группе):

https://iplist.opencck.org/?format=geosite&data=domains
{
  "routing": {
    "rules": [
      {
        "type": "field",
        "outboundTag": "vpn",
        "domain": ["ext:geosite.dat:youtube.com"]
      },
      {
        "type": "field",
        "outboundTag": "vpn",
        "domain": ["ext:geosite.dat:anime"]
      },
      ...
    ]
  },
  ...
}

По умолчанию домены пишутся как RootDomain — правило срабатывает и на сам домен, и на все его поддомены. Другое поведение выбирается параметром domaintype: full — только точное совпадение, keyword — вхождение подстроки, regex — регулярное выражение.

Настройка sing-box (rule-set)

Сервис отдаёт rule-set в двух видах: singbox — исходный JSON, srs — скомпилированный бинарный файл (меньше размер и быстрее загрузка). Оба варианта sing-box умеет забирать по ссылке:

{
    "route": {
        "rule_set": [
            {
                "type": "remote",
                "tag": "iplist-ip",
                "format": "binary",
                "url": "https://iplist.opencck.org/?format=srs&data=cidr4&group=youtube",
                "download_detour": "direct",
                "update_interval": "1d"
            },
            {
                "type": "remote",
                "tag": "iplist-domains",
                "format": "source",
                "url": "https://iplist.opencck.org/?format=singbox&data=domains&group=youtube",
                "download_detour": "direct",
                "update_interval": "1d"
            }
        ],
        "rules": [
            {
                "rule_set": ["iplist-ip", "iplist-domains"],
                "outbound": "vpn"
            }
        ]
    }
}

Версия формата задаётся параметром version (по умолчанию 1 — её читают все sing-box начиная с 1.8). Для format=srs версия исходника является верхней границей: sing-box компилирует минимальную достаточную версию бинарного файла.

Настройка Mikrotik

  • В администраторской панели роутера (или через winbox) откройте раздел System -> Scripts
  • Создайте новый скрипт "Add new" с произвольным именем, например iplist_v4_cidr
  • В поле Source введите следующий код (используйте url адрес вашего сервера, протокол в mode тоже может отличаться):
/tool fetch url="https://iplist.opencck.org/?format=mikrotik&data=cidr4&append=timeout%3D1d" mode=https dst-path=iplist_v4_cidr.rsc
:delay 5s
:log info "Downloaded iplist_v4_cidr.rsc succesfully";

/import file-name=iplist_v4_cidr.rsc
:delay 10s
:log info "New iplist_v4_cidr added successfully";
  • 1
  • Сохраните скрипт
  • Откройте раздел планировщика System -> Scheduler
  • Создайте новое задание с произвольным именем, например iplist_v4_cidr
  • В качестве Start time укажите время для старта задания (пример: 00:05:00). Для Interval введите значение 1d 00:00:00.
  • В поле On event введите имя скрипта
iplist_v4_cidr
  • 2
  • Откройте скрипт в разделе System -> Scripts и запустите его нажатием на кнопку Run Script
  • В разделе Logs вы должны увидеть сообщение New iplist_v4_cidr added successfully
  • 3
  • А в разделе IP -> Firewall -> Address Lists должны появиться новые списоки (в примере с именем youtube)
  • 4

Через GET-параметр template для формата mikrotik можно указывать шаблон для имени списка:

https://iplist.opencck.org/?format=mikrotik&data=cidr4&append=timeout%3D1d&template={group}_{data}

По умолчанию шаблон имеет значение: {group}_{data}

Настройка HomeProxy (sing-box)

Включите "Routing mode" в "Only proxy mainland China": 1 Подключитесь к роутеру по ssh и выполните следующие команды:

# переименовываем старый скрипт обновления
mv /etc/homeproxy/scripts/update_resources.sh /etc/homeproxy/scripts/update_resources.sh.origin

# загружаем новый скрипт
wget https://iplist.opencck.org/scripts/homeproxy/update_resources.sh -O /etc/homeproxy/scripts/update_resources.sh

# добавляем права на выполнение
chmod +x /etc/homeproxy/scripts/update_resources.sh

# отменяем стирание cron после перезапуска homeproxy
sed -i '/sed -i/s/^/\t#/; /\/etc\/init.d\/cron restart >/s/^/\t#/' /etc/init.d/homeproxy

# вы захостили это решение? - тогда раскомментируйте следующую строку и поменяйте "example.com" на ваш домен
# sed -i 's/iplist.opencck.org/example.com/g' /etc/homeproxy/scripts/update_resources.sh

Откройте административную панель OpenWRT раздел "System" - "Sсheduled Tasks". Добавьте строку, чтобы автоматически запускать скрипт обновления при старте, а также в 00:05:00 и 12:05:00

5 0,12 * * * /etc/homeproxy/scripts/update_crond.sh

2

Настройка дополнения для Chrome - Proxy SwitchySharp

Установить можно по ссылке 1

Подробнее о формате Switchy RuleList

License

The MIT License (MIT). Please see LICENSE for more information.

amnezia
cidr-list
clashx
homeproxy
ip
ipset
ipv6
keenetic
mikrotik
openwrt
sing-box
switchyomega

Significant stargazers

Alexey Lavinsky

5 followers · starred Jan 2026

Vasiliy Tolstov

182 followers · starred Dec 2025

Alex V.

11 followers · starred May 2026

Sehat1137

22 followers · starred May 2026