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

Какой взять клиент \ протокол VPN, чтобы раздельное тунелирование работало по домену, а не IP?

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

Собственно нет ли возможности каким либо образом сделать сплит тунелирование просто по домену? Или это в целом не реализуемо (я особо мат. части не знаю)?
  • Вопрос задан
  • 19987 просмотров
Подписаться 10 Простой 8 комментариев
Помогут разобраться в теме Все курсы
  • Skillfactory
    Управление информационной инфобезопасностью
    11 месяцев
    Далее
  • ProductStar
    Профессия: Инженер по информационной безопасности
    9 месяцев
    Далее
  • Merion Academy
    Онлайн-курс по сетевым технологиям Huawei
    2 месяца
    Далее
Пригласить эксперта
Ответы на вопрос 9
paran0id
@paran0id
Умный, но ленивый
Делал так: на сервере с vpn ставил socks-прокси, в vpn маршрут по умолчанию не заворачивал. В приложениях, которым нужен vpn, прописывал этот прокси. В браузере юзал расширение foxyproxy, там по домену прописывал, кому через прокси ходить.
Ответ написан
@Drno
nekoray \ nekobox \ sing-box
Ответ написан
@sektet
Тоже селф хостед на амнезии, использую такую схему: в виртуалке запущен клиент vpn амнезии, весь трафик виртуалки идёт через vpn, на этой же виртуалки крутится прокси squid. В браузере установлено расширение, которое по указанному домену направляет через прокси. Собираюсь реализовать эту схему на роутере с прошивкой OpenWRT.
Ответ написан
Комментировать
@Mishochegg
В SQUID есть директива tcp_outgoing_mark, позволяющая маркировать исходящие пакеты пакеты и применять соответствующие правила маршрутизации ip rule для этих пакетов.

/etc/squid/redirect.txt (Список доменов)
acl redirect_http dstdomain "/etc/squid/redirect.txt"
acl redirect_https ssl::server_name "/etc/squid/redirect.txt"

tcp_outgoing_mark 5 redirect_http
tcp_outgoing_mark 5 redirect_https

Squid, в данном случае, работает в режиме intercept (прозрачно). Применяется алгоритм peek and splice. Сервисы, использующие ssl_v1.3 не проходять через peek. К таким сервисам относится Telegram и большиство банк-клиентов. Для этих сервисов создаётся файл ssl13.txt с указанием ip и подсетей вида:
91.108.56.0/22
91.108.4.0/22
...
После чего создаём acl вида:
acl ssl13 dst "/etc/squid/ssl13.txt"

домены для альтернативной маршрутизации указываются в файле вида /etc/squid/redirect.txt
.habr.com
.vk.com
.ok.ru
...
Если доступ к указанным ресурсам осуществляется через http, то ресурс обрабатывается через
acl redirect_http dstdomain "/etc/squid/redirect.txt"
Если https, то
acl redirect_https ssl::server_name "/etc/squid/redirect.txt"
При этом домены можно описывать в одном файле.
Далее описыаем директивы peek and splice
ssl_bump peek step1 !ssl13 (не подглядываем в заголовок сертификата для ssl_v1.3)
ssl_bump splice all
На основе подсмотренного в заголовке применяем паркировку исходящего пакета
tcp_outgoing_mark 5 redirect_http
tcp_outgoing_mark 5 redirect_https
Ответ написан
@sapata
Xray/Nekobox
В правилах NekoBox можно настроить как ходить - на российские ip через провайдера, на остальные через прокси; на домены в зоне ru через провайдера, на остальные через прокси. Можно много разных правил создать.
Пошаговая инструкция как сделать и настроить прокси-сервер, клиентов для подключения к нему
Ответ написан
Комментировать
b1ora
@b1ora
настройка-микротик.рф
Определение url происходит по L7 и после рукопожатия, то есть уже после маршрутизации.

Получатся tcp установился, url узнали и нужно рвать соединение чтобы пустить в другой интерфейс.

Так работать не будет.
Ответ написан
@WeeAmigo
Клиенты на базе ядра Mihomo поддерживают (само ядро поддерживает, получается) AmneziaWG, а там открываются большие возможности, изучите конфигурацию этого ядра.
Ответ написан
Комментировать
@Paveldik
ух,ты!
я думал, что заметка не откроется - будет надпись "заблокировано".
Дальше мне стало интересно, осмелится ли кто в нарушение действующего законодательства РФ давать конструктивные рекомендации в комментариях...
И оказалось, таких не мало.
Однако...
Ответ написан
Комментировать
@Gigabyte191
Коротко да, по домену можно, но не в Amnezia и не в классическом OpenVPN/WireGuard-подходе. Ограничение тут не в «кривых руках», а в архитектуре.

Сейчас у тебя всё ломается потому что сплит-туннелинг по IP работает после DNS-резолва, а когда домены за Cloudflare — IP постоянно меняются, и правила сразу становятся неактуальными.

Кароче, VPN должен перехватывать DNS до выхода в сеть и уметь маршрутизировать трафик по domain rules, а не по IP, это умеют схемы на базе Xray (VLESS): routing по domain / geosite, split-tunnel именно по доменам, нормально работает даже с Cloudflare

В Amnezia это архитектурно не реализовано — поэтому «по-человечески» там никак.

Я у себя в итоге ушёл на VLESS + Xray, если не хочется ковыряться с конфигами вручную — проще взять сервис, где это уже настроено из коробки. Я так и сделал, проблема ушла полностью.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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