Привет! Сегодня, когда управление интернет-трафиком становится актуальной задачей для многих, я хотел бы поделиться веб-приложением, которое поможет упростить настройку статических маршрутов. Если вам нравятся извращения и костыли, добро пожаловать к прочтению!

Зачем это нужно

Думаю, сейчас для многих актуален вопрос настройки индивидуальных маршрутов до определённых ресурсов. Например, вы хотите ограничить доступ ребёнку к определённым сайтам. Или, как и я, хотите одновременно смотреть YouTube и Кинопоиск в соседних вкладках. В этом случае перенаправление всего трафика через один интерфейс (включение VPN) вам не поможет. Необходима чуть более тонкая настройка.

Способов реализации можно придумать много. Вот небольшое саммари:

  • Некоторые прошивки роутеров, например, Xiaomi MiWifi, позволяют настроить роутинг по доменам «из коробки». В этом случае достаточно знать домены интересующих вас ресурсов и прописать для них правила маршрутизации.

  • Можно заморочиться с установкой кастомного ПО на свой роутер, которое позволит настроить роутинг на основе доменов. Однако этот способ вряд ли подходит большинству пользователей, а также является сложным в поддержке.

  • Более или менее универсальным решением является добавление статических маршрутов в таблицу маршрутизации. Оно не зависит от модели и прошивки роутера и не требует глубоких знаний. Но этот способ тоже нельзя назвать поддерживаемым и масштабируемым — каждый маршрут придётся добавлять вручную и проверять актуальность, так как адреса могут измениться.

Для некоторых ресурсов можно найти диапазон их адресов в открытых источниках, но для большинства придётся всё делать вручную, что может занять много времени. Далее речь пойдёт подробнее о поиске всех IP-адресов сайта и способах автоматизировать этот процесс.

Поиск IP адресов

Любой ресурс, если только это не статичный одностраничный сайт, использует множество зависимостей. Среди них различные бэкенды, CDNы, сторонние API, трекеры активности и так далее. Поэтому, скорее всего, вам будет недостаточно просто зарезолвить главный домен сайта через утилиту nslookup, а искать все используемые домены сайта вручную может быть довольно трудоёмко.

Очень подробно о том, как можно определить все домены сайта, описано в этой статье. Концептуально – потребуется записать трафик во время взаимодействия с ресурсом, далее вычленить все уникальные домены и уже после этого, зарезолвить для них IP адреса.

Нужно понимать, что в этом сценарии есть оговорки. Очевидно, зарезолвленные IP-адреса доменов со временем могут поменяться. Также далеко не все ресурсы, используемые сайтом, необходимы. Например, аналитическими трекерами или рекламными доменами можно легко пренебречь – нас интересует только содержимое сайта.

Автоматизируем с помощью Dossier

Немного облегчить задачу и автоматизировать процесс можно с помощью dossier.zavodov.space. Dossier — это веб-приложение для анализа зависимостей веб-страниц. Оно поможет с резолвингом IP-адресов и поиском доменов. Другими словами, у него есть два режима работы:

  1. Получение IP-адресов для заданных доменов.

  2. Парсинг доменов, используемых на определённых страницах, и получение для них IP-адресов.

Dossier — dossier.zavodov.space
Dossier — dossier.zavodov.space

Основные функции Dossier:

  • Поле ввода поддерживает как отдельные домены, так и полные URL. Каждый домен или URL должен быть введён с новой строки.

  • Все строки, не содержащие корректных доменов или URL, будут проигнорированы. На отдельных строках можно оставлять комментарии, они также будут пропускаться при обработке, если не будут распознаны.

  • Заданный список доменов и адресов сохраняется в сессии. Вы можете обновить страницу и получить актуальный список адресов через какое-то время.

  • Поддерживается экспорт в bat-файл. Это позволяет упростить конфигурацию таблицы маршрутизации.

Dossier — таблица с доменами для заданных страниц.
Dossier — таблица с доменами для заданных страниц.

Как это работает – на скриншоте выше показан первый шаг: поле ввода обрабатывается построчно. Каждая строка будет определена как:

  • домен;

  • страница (если строка начинается с https / http);

  • либо проигнорирована (если строка не содержит корректных данных).

После этого будет отображена таблица, в которой:

  • все распознанные введённые домены будут выделены в отдельной строке;

  • для каждой страницы будут отображены все домены, используемые при её загрузке.

Dossier — таблица с IP адресами для заданных доменов.
Dossier — таблица с IP адресами для заданных доменов.

Следующая таблица содержит все IP-адреса для найденных ранее доменов. Интерфейс поддерживает: фильтры для отображения IPv4 или IPv6-адресов, поиск, возможность формирования bat-файла с командами route для добавления адресов в таблицу маршрутизации.

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

Dossier — генерация файла для конфигурации таблицы маршрутизации.
Dossier — генерация файла для конфигурации таблицы маршрутизации.

Ограничения

Ниже перечислены некоторые известные ограничения:

  • За раз можно загрузить максимум 5 URL-страниц.

  • Приложение не обходит сайт, а лишь загружает указанную страницу и получает домены при её загрузке. Из-за этого список доменов может отличаться от того, что вы видите в браузере, например, если сайт требует авторизацию.

  • Во время генерации bat-файла поддерживаются только адреса IPv4.

Приложение было написано на досуге за пару вечеров для проверки работоспособности. Я понимаю все его недостатки, поэтому не судите строго. Буду рад доработать его, если кому-то оно окажется полезным!