Статья о том, как настроить точечный роутинг по нужным доменам на роутере с OpenWrt. На мой взгляд, это самый удобный способ, который можно реализовать сейчас. Настроить роутер можно с помощью скрипта. Если вдруг не заведётся сразу, то другим скриптом можно найти, что не работает. Настройка с помощью Ansible никуда не делась, только модифицировалась и стала лучше. Помимо инструкций по настройке туннелей Wireguard и OpenVPN, написал инструкцию по использованию технологий Shadowsocks, VLESS и прочими. Эта инструкция написана под свежую OpenWrt 23.05 и скрипт работает только с ней. Но на предыдущих версиях можно также настроить всё вручную, либо с помощью Ansible. На них всё работает, но есть свои особенности.
Зачем настраивать маршруты по спискам?
1. Есть российские сайты, которые блокируют доступ с нероссийских IP-адресов. Уверен, вы с этим сталкивались
2. Высокий Latency, время ожидания открытия ресурса. Если вы, например, находитесь в Москве, а сервер с сайтом в Подмосковье, то у вас короткий маршрут. Через VPN делается петля через другую страну. Это влияет на скорость загрузки ресурса
3. Сайты определяют вашу локацию по стране, где расположен VPN-сервер. Например, гугл вас будет приветствовать по-немецки. Нужно будет переключать локацию вручную, чтоб делать поиск по российским ресурсам
4. Если у вас не быстрый VPN-сервер, то все ваши гигабиты по оптике превращаются в тыкву. VPN создаёт бутылочное горлышко
5. Юрисдикция другой страны. Например, у некоторых правообладателей поставлены на поток обнаружение раздач нелегальных копий их контента. Система обнаружения отработает, и владелец VPN-сервера получит автоматическую абузу на сервер и вытекающие из неё проблемы
6. Нагрузка на сам VPN-сервер. Об это мало задумываются. Точечный роутинг — жирный плюс для VPN-сервера
Проблемы готовых списков IP-адресов
Главная проблема — это отсутствие необходимого вам ресурса в подготовленных списках. Как это решать? Можно резолвить домены, получать IP-адреса ресурса и заносить их в свой ещё один список. Со временем эти IP-адреса меняются и придётся делать по новой.
Antifilter постарались решить эту проблемы с помощью сommunity списка. Чтоб каждый мог добавить нужный ему сайт. Есть список доменов и список IP-адресов, которые автоматически добавляются через резолвинг доменов. Крутая идея, но многих доменов нет, а их добавление не факт, что будет одобрено. Как я понимаю, резолвинг доменов в списки работает не из одной локации, но всё равно бывает так, что адрес, который резолвится у вас, будет отсутствовать в списках.
Моя реализация списка доменов
Каждому по отдельности вытаскивать самостоятельно домены необходимых сервисов довольно непродуктивно для сообщества. Поэтому я сформировал свои списки доменов. Да, именно спискИ. Теперь вы можете их всех заблокировать на роутере и жить хорошо!
На данный момент есть три списка:
1. Россия, для людей внутри страны. Тут всё понятно думаю
2. Россия, для людей извне. Список из сайтов, которые пускают к себе только с российских IP-адресов
3. Украина. Тут просто берётся список с ресурса https://uablacklist.net/
Плюсы и минусы использования списков доменов
Плюсы:
Вы оперируете доменами, не опускаетесь до резолвинга
1. Универсальность: подходит для роутинга в любой стране
2. В sets не будет IP-адреса вашего VPN-сервера
3. Помимо готового списка доменов, можно добавлять свои прям на роутере
4. В маршрутизации участвуют только необходимые IP-адреса, полученные из доменов. Меньше IP-адресов в списках — меньше потребление памяти
Минусы:
1. Механизм резолвинга не идеален. При первом обращении к сайту вам придётся немного подождать, чтоб dnsmasq добавил IP-адрес в sets. Но после добавления всё происходит моментально
2. Существуют приложения, которые не используют DNS-сервер роутера, а используют свою встроенную реализацию резолвинга прям в приложении. Здесь просто требуется отключение этой функции.
Как это работает?
Тут нет никакой магии, всё реализуется довольно распространёнными open source инструментами. Два главных участника этой затеи — это dnsmasq и nftables. Рассмотрим всё на примере сайта graylog.org. WAF Cloudflare настроен у него на блокировку по стране, это означает, что с российского IP доступ запрещён.
Для соединения с сайтом прежде всего компьютер отправляет роутеру DNS запрос, в котором просит зарезолвить домен. Начиная с этого момента включается механизм роутинга. За DNS в OpenWrt отвечает dnsmasq. У него есть крутая фича: можно задать домен в конфигурации и все зарезолвенные IP-адреса этого домена он будет складывать в nftables sets.
Далее смотрим в ссылки в подвале, и решаем задачу так, как вам было предложено.
Так же есть возможность выбора сервиса, куда этот трафик можно недорого перенаправлять.
Полезные ссылки:
Точечная маршрутизация по доменам HABR
Какого провайдера VPS выбрать для собственного сервера
Точечная маршрутизация по доменам