Files
iplist/README.md
2024-09-03 11:50:50 +03:00

14 KiB
Raw Blame History

IP Address Collection and Management Service for Mikrotik RouterOS Script, JSON or Text Format

For english readme: README.en.md

Demo URL: https://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).

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

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

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

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

Настройки

Конфигурационные файлы хранятся в директории config. Каждый 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 адресов

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

git clone git@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_DELAY 100 Задержка между получением dns записей (миллисекунды)
SYS_MEMORY_LIMIT 1024M Предельное кол-во памяти.
SYS_TIMEZONE Europe/Moscow Список URL для получения начальных CIDRv4 зон ipv4 адресов
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

Для настройки 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 ntp whois dnsutils ipcalc
cp .env.example .env
composer install
php index.php

Настройка Mikrotik

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

/ip firewall address-list remove [find where comment="youtube.com"];
:delay 5s

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

Настройка 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

# вы захостили это решение? - тогда раскомментируйте следующую строку и поменяйте "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

/etc/homeproxy/scripts/update_crond.sh

echo "5 0,12 * * * /etc/homeproxy/scripts/update_crond.sh" > /etc/crontabs/root
/etc/init.d/cron start
/etc/init.d/cron enable

2

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

Установить можно по ссылке 1 Подробнее о формате Switchy RuleList

License

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