Задать вопрос

Как пустить трафик на instagram.com в туннель, имея openwrt-роутер?

Привет!
Имеется роутер Xiaomi R3P с OpenWRT на борту. На роутере поднят Openvpn туннель в Европу.
Для сайтов типа chatgpt.com, strava.com, metacritic.com и прочих успешно использую PBR (policy based routing). Но попытка входа на instagram.com тянет за собой кучу CDN'ов типа static.cdninstagram.com и кучу других. PBR, к сожалению, не поддерживает регулярки. Как можно решить эту проблему? То есть задача - весь трафик на инсту пускать в туннель, но белый трафик на доступные сайты не туннелировать.

Также в наличии proxmox сервак, может возможно его привлечь в это дело как-то.
Других железок нет.
  • Вопрос задан
  • 2542 просмотра
Подписаться 6 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
@dronmaxman
VoIP Administrator
Попробуй так https://habr.com/ru/articles/767464/

Обрати внимание на ссылку https://github.com/itdoginfo/allow-domains
Ответ написан
Комментировать
ValdikSS
@ValdikSS
В общем случае средствами лишь маршрутизации — никак. Это технически возможно, но никто этого еще не сделал (и я расстраиваюсь этому факту не первый год!).

Выходов несколько:
1. Добавлять IP-адреса доменов в момент резолва в лист маршрутизации VPN
Необходимо настроить DNS-сервер так, чтобы в момент запроса поддомена необходимых доменов (например, *.instagram.com) полученные IP-адреса добавлялись в список маршрутизации через VPN.
Это можно сделать, например, с помощью dnsmasq ipset.
Необходимо настроить маршрутизацию по списку ipset, а dnsmasq будет добавлять новые адреса, которые запрашивает пользователь, в этот список.

Недостаток способа заключается в необходимости использовать только DNS на роутере (DNS-over-HTTPS или любой сторонний резолвер не подойдёт — IP-адреса не будут добавляться в ipset и маршрутизации в VPN не будет), а также в том, что любой добавленный IP-адрес будет маршрутизирован в VPN: если два домена используют один и тот же IP-адрес, разделить их маршрутизацию не получится, оба будут маршрутизироваться через VPN.

В OpenWrt настраивается с помощью пакета pbr. Он не поддерживает регулярные выражения, как вы заметили, но они и не нужны: просто напишите любой домен, и словно это зона, все поддомены домена будут маршрутизированы в VPN. По-моему, pbr даже по-другому и не работает (нельзя маршрутизировать конкретный домен без его поддоменов).
Пример с доменами Netflix. Обнаружить все домены Instagram можно с помощью F12 - Network в браузере.

2. Обнаруживать домены в трафике, перемаршрутизировать через список маршрутизации VPN позже
Вариация первого метода с модулями вроде xt_tls, позволяющим обнаружить обращение к определённому домену из TLS-трафика, чтобы также добавить IP-адрес в ipset для маршрутизации в VPN.

Преимущество в том, что клиент может использовать любой DNS-сервер. Недостаток в том, что первый раз соединение всегда либо зависнет, либо разорвётся, и только второе и последующие заработают через VPN.
Вот здесь можно почитать, почему так происходит.

В OpenWrt модуль отсутствует.

3. Терминировать трафик на «умный» прокси-сервер, который поддерживает маршрутизацию по доменам
Весь TCP/UDP-трафик перенаправляется на локальный прокси-сервер, способный выявлять домены прямо из трафика и маршрутизировать их в зависимости от правил. Примеры подобных прокси: v2fly, xray, sing-box, и др. (все есть в OpenWrt).

Недостаток метода в том, что весь трафик будет обрабатываться userspace-программой: на низкопроизводительных роутерах это может привести к серьезному замедлению, некоторые VoIP-программы не будут звонить (из-за несовпадения UDP-порта, который создала программа, и UDP-порта, который использует прокси), и поддерживаются только UDP и TCP, другие протоколы (ICMP, GRE, IPIP, что угодно) через такой прокси работать не будут.
Преимущество в лёгкой настройке и довольно стабильной работе.

Алгоритм определения доменов, необходимых для маршрутизации, не отличается от описанного в #1.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы