For english readme: README.en.md
Demo URL: https://iplist.opencck.org
Данный сервис предназначен для сбора и обновления 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)
формат | описание |
---|---|
json | JSON формат |
text | Разделение новой строкой |
comma | Разделение запятыми |
mikrotik | MikroTik Script |
switchy | SwitchyOmega RuleList |
nfset | Dnsmasq nfset |
ipset | Dnsmasq ipset |
clashx | ClashX |
kvas | Keenetic KVAS |
bat | Keenetic Routes .bat |
amnezia | Amnezia filter list |
Конфигурационные файлы хранятся в 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"]
}
}
свойство | тип | описание |
---|---|---|
domains | string[] | Список доменов портала |
dns | string[] | Список DNS серверов для обновления ip-адресов. По мимо локального и google dns, можно использовать публичные российские DNS, например Яндекс |
timeout | int | Время между обновлением ip-адресов доменов (секунды) |
ip4 | string[] | Начальный список ipv4 адресов |
ip6 | string[] | Начальный список ipv6 адресов |
cidr4 | string[] | Начальный список CIDRv4 зон ipv4 адресов |
cidr6 | string[] | Начальный список CIDRv6 зон ipv6 адресов |
external | object | Списки URL для получения данных от сторонних источников |
свойство | тип | описание |
---|---|---|
domains | string[] | Список URL для пополнения доменов портала |
ip4 | string[] | Список URL для пополнения ipv4 адресов |
ip6 | string[] | Список URL для пополнения ipv6 адресов |
cidr4 | string[] | Список URL для пополнения CIDRv4 зон ipv4 адресов |
cidr6 | string[] | Список URL для пополнения CIDRv6 зон ipv6 адресов |
git clone https://github.com/rekryt/iplist.git
cd iplist
cp .env.example .env
Если требуется отредактируйте .env
файл
свойство | значение по умолчанию | описание |
---|---|---|
COMPOSE_PROJECT_NAME | iplist | Имя compose проекта |
STORAGE_SAVE_INTERVAL | 120 | Период сохранения кеша whois (секунды) |
SYS_DNS_RESOLVE_IP4 | true | Получать ipv4 адреса |
SYS_DNS_RESOLVE_IP6 | true | Получать ipv6 адреса |
SYS_DNS_RESOLVE_CHUNK_SIZE | 10 | Размер чанка для получения dns записей |
SYS_DNS_RESOLVE_DELAY | 100 | Задержка между получением dns записей (миллисекунды) |
SYS_MEMORY_LIMIT | 1024M | Предельное кол-во памяти. |
SYS_TIMEZONE | Europe/Moscow | Список URL для получения начальных CIDRv4 зон ipv4 адресов |
HTTP_HOST | 0.0.0.0 | IP сетевого интерфейса (по умолчанию все интерфейсы) |
HTTP_PORT | 8080 | Сетевой порт сервера (по умолчанию 8080) |
DEBUG | true | Определяет уровень логирования |
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
Для настройки 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 сертификат автоматически
apt-get install -y ntp whois dnsutils ipcalc
cp .env.example .env
composer install
php index.php
Для получения выгрузки данных по заданному шаблону используются 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
- В администраторской панели роутера (или через 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";
- Сохраните скрипт
- Откройте раздел планировщика System -> Scheduler
- Создайте новое задание с произвольным именем, например
iplist_v4_cidr
- В качестве
Start time
укажите время для старта задания (пример:00:05:00
). ДляInterval
введите значение1d 00:00:00
. - В поле
On event
введите имя скрипта
iplist_v4_cidr
- Откройте скрипт в разделе System -> Scripts и запустите его нажатием на кнопку
Run Script
- В разделе Logs вы должны увидеть сообщение
New iplist_v4_cidr added successfully
- А в разделе IP -> Firewall -> Address Lists должны появиться новые списоки (в примере с именем
youtube
)
Включите "Routing mode" в "Only proxy mainland China": Подключитесь к роутеру по 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
# вы захостили это решение? - тогда раскомментируйте следующую строку и поменяйте "example.com" на ваш домен
# sed -i 's/iplist.opencck.org/example.com/g' /etc/homeproxy/scripts/update_resources.sh
Откройте административную панель OpenWRT раздел "System" - "Startup" - "Local Startup". Добавьте перед "exit 0" строки, чтобы автоматически запускать скрипт обновления при старте, а также в 00:05:00 и 12:05:00
sleep 15
/etc/homeproxy/scripts/update_crond.sh
echo "5 0,12 * * * /etc/homeproxy/scripts/update_crond.sh" > /etc/crontabs/root
/etc/init.d/cron enable
/etc/init.d/cron start
Установить можно по ссылке
Подробнее о формате Switchy RuleList
The MIT License (MIT). Please see LICENSE for more information.