Dossier – автоматизируем резолвинг IP-адресов и настройку статических маршрутов

Привет! Сегодня, когда управление интернет-трафиком становится актуальной задачей для многих, я хотел бы поделиться веб-приложением, которое поможет упростить настройку статических маршрутов. Если вам нравятся извращения и костыли, добро пожаловать к прочтению!
Зачем это нужно
Думаю, сейчас для многих актуален вопрос настройки индивидуальных маршрутов до определённых ресурсов. Например, вы хотите ограничить доступ ребёнку к определённым сайтам. Или, как и я, хотите одновременно смотреть YouTube и Кинопоиск в соседних вкладках. В этом случае перенаправление всего трафика через один интерфейс (включение VPN) вам не поможет. Необходима чуть более тонкая настройка.
Способов реализации можно придумать много. Вот небольшое саммари:
Некоторые прошивки роутеров, например, Xiaomi MiWifi, позволяют настроить роутинг по доменам «из коробки». В этом случае достаточно знать домены интересующих вас ресурсов и прописать для них правила маршрутизации.
Можно заморочиться с установкой кастомного ПО на свой роутер, которое позволит настроить роутинг на основе доменов. Однако этот способ вряд ли подходит большинству пользователей, а также является сложным в поддержке.
Более или менее универсальным решением является добавление статических маршрутов в таблицу маршрутизации. Оно не зависит от модели и прошивки роутера и не требует глубоких знаний. Но этот способ тоже нельзя назвать поддерживаемым и масштабируемым — каждый маршрут придётся добавлять вручную и проверять актуальность, так как адреса могут измениться.
Для некоторых ресурсов можно найти диапазон их адресов в открытых источниках, но для большинства придётся всё делать вручную, что может занять много времени. Далее речь пойдёт подробнее о поиске всех IP-адресов сайта и способах автоматизировать этот процесс.
Поиск IP адресов
Любой ресурс, если только это не статичный одностраничный сайт, использует множество зависимостей. Среди них различные бэкенды, CDNы, сторонние API, трекеры активности и так далее. Поэтому, скорее всего, вам будет недостаточно просто зарезолвить главный домен сайта через утилиту nslookup, а искать все используемые домены сайта вручную может быть довольно трудоёмко.
Очень подробно о том, как можно определить все домены сайта, описано в этой статье. Концептуально – потребуется записать трафик во время взаимодействия с ресурсом, далее вычленить все уникальные домены и уже после этого, зарезолвить для них IP адреса.
Нужно понимать, что в этом сценарии есть оговорки. Очевидно, зарезолвленные IP-адреса доменов со временем могут поменяться. Также далеко не все ресурсы, используемые сайтом, необходимы. Например, аналитическими трекерами или рекламными доменами можно легко пренебречь – нас интересует только содержимое сайта.
Автоматизируем с помощью Dossier
Немного облегчить задачу и автоматизировать процесс можно с помощью dossier.zavodov.space. Dossier — это веб-приложение для анализа зависимостей веб-страниц. Оно поможет с резолвингом IP-адресов и поиском доменов. Другими словами, у него есть два режима работы:
Получение IP-адресов для заданных доменов.
Парсинг доменов, используемых на определённых страницах, и получение для них IP-адресов.

Основные функции Dossier:
Поле ввода поддерживает как отдельные домены, так и полные URL. Каждый домен или URL должен быть введён с новой строки.
Все строки, не содержащие корректных доменов или URL, будут проигнорированы. На отдельных строках можно оставлять комментарии, они также будут пропускаться при обработке, если не будут распознаны.
Заданный список доменов и адресов сохраняется в сессии. Вы можете обновить страницу и получить актуальный список адресов через какое-то время.
Поддерживается экспорт в bat-файл. Это позволяет упростить конфигурацию таблицы маршрутизации.

Как это работает – на скриншоте выше показан первый шаг: поле ввода обрабатывается построчно. Каждая строка будет определена как:
домен;
страница (если строка начинается с https / http);
либо проигнорирована (если строка не содержит корректных данных).
После этого будет отображена таблица, в которой:
все распознанные введённые домены будут выделены в отдельной строке;
для каждой страницы будут отображены все домены, используемые при её загрузке.

Следующая таблица содержит все IP-адреса для найденных ранее доменов. Интерфейс поддерживает: фильтры для отображения IPv4 или IPv6-адресов, поиск, возможность формирования bat-файла с командами route для добавления адресов в таблицу маршрутизации.
При генерации bat-файла по умолчанию выбран дефолтный gateway – 0.0.0.0. Вы можете заменить интерфейс на тот, через который хотите направлять пакеты. Команда route поддерживается многими роутерами, например, Keenetic. Это позволяет добавлять маршруты прямо через UI.

Ограничения
Ниже перечислены некоторые известные ограничения:
За раз можно загрузить максимум 5 URL-страниц.
Приложение не обходит сайт, а лишь загружает указанную страницу и получает домены при её загрузке. Из-за этого список доменов может отличаться от того, что вы видите в браузере, например, если сайт требует авторизацию.
Во время генерации bat-файла поддерживаются только адреса IPv4.
Приложение было написано на досуге за пару вечеров для проверки работоспособности. Я понимаю все его недостатки, поэтому не судите строго. Буду рад доработать его, если кому-то оно окажется полезным!