Настройка маршрутизации через vless (xray) на VPS

Здравствуйте. Подскажите, пожалуйста, как реализовать следующую схему. Я по wireguard подключаю все клиенты к VPS в РФ. Через эту VPS организую доступ между клиентами и в некоторых случаях к сетям за клиентами (пара клиентов - роутеры). При этом на VPS хочу организовать маршрутизацию трафика через xray по протоколу VLESS на зарубежную VPS так, чтобы трафик до ру доменов шел через VPS в РФ, а до остальных - через зарубежную.

На данном этапе два конкретных вопроса:

  1. Как заворачивать весь трафик, который идет НЕ к клиентам первой VPS/не через эти клиенты к локальным сетям за ними, на зарубежную VPS (какие программы, какие настройки)?
  2. Есть ли возможность в моем предполагаемом сетапе сделать подключение до VPS в РФ через домен, а не через IP? Я читал, что wireguard не умеет в домены, значит, мне лучше смотреть в сторону openvpn? Это для того, чтобы в случае проблем с одной VPS быстро перейти на другую, при этом не меняя на всех клиентах конфиг wireguard.

Будем считать, что wireguard сеть 10.0.30.0/24 ipv4 only.

Буду благодарен за ваши советы и рекомендации. Похожие темы, к сожалению, не увидел. Когда разберусь, постараюсь набрость небольшое how-to, чтобы таким как я (линукс энтузиастам) было проще все настроить.

Примерная упрощенная схема

Вроде бы уже несколько тем по policy based routing были на этом форуме. Для веб-серфинга по TCP по-моему самый простой вариант использовать расширение SwitchyOmega (можно экcпортировать настройки, под андроид без GASP поддерживающие десктопные расширения браузеры Iceraven и Kiwi Browser). Домен легко определяется при использовании SOCKS5 прокси, а IP тунель может только работать с IP машрутизацией.
Для реализации вашей идеи придётся написать скрипт/службу которая будет обновлять список IP РФ и добавлять их в nftables named set для машрутизации через внешний интерфейс, когда остальные пакеты должны идти через виртаульный интерфейс прокси.

Я бы не надеялся, что Wireguard будет нормально работать даже в пределах РФ, как показывает практика, на “внутренние адреса” его тоже блочат когда приспичит.

А так, схема делается довольно легко, на ВПС РФ ставите или X-ray+tun2socks, или сразу Sing-box (он умеет TUNиз коробки), и соответственно настраиваете маршрутизацию в системе так, чтобы весь трафик из wireguard шел на этот TUN. А дальше разркливаетк его как обычно в X-ray/Sing-box, можно по GeoIP, можно включить sniffing и “подслушивать” домены из http/https-sni и заворачивать дополнительно по правилам для .ru, .su., .рф (даже если по GeoIP адрес забугорный), и т.д., оно там все в документации описано

Перечитал несколько раз ваше сообщение и не понял, как оно отвечает хотя бы на 1 мой вопрос. Мне кажется, вы вообще не про то, о чем я спрашиваю, написали.

У меня есть довольно давно (лет 5 точно) работающая ВПС у одного из РФ хостеров, ВГ на ней работает в любых сетях. Даже когда писали про массовые проблемы с доступом, я их у себя не видел на этой ВПС. На других (зарубежных особенно) да, на ней нет. Поэтому и расчитываю на такую схему. А если не ВГ или не ОВПН (точнее, не ВПН, который могут заблокировать), тогда как построить эту схему при сохранении всех остальных требований? Через shadowsocks/xray? Что из себя будет представлять эта схема? По-моему, будет сложнее чем сейчас… Поэтому пока остановлюсь на этом.

А так, схема делается довольно легко, на ВПС РФ ставите или X-ray+tun2socks, или сразу Sing-box (он умеет TUNиз коробки), и соответственно настраиваете маршрутизацию в системе так, чтобы весь трафик из wireguard шел на этот TUN. А дальше разркливаетк его как обычно в X-ray/Sing-box, можно по GeoIP, можно включить sniffing и “подслушивать” домены из http/https-sni и заворачивать дополнительно по правилам для .ru, .su., .рф (даже если по GeoIP адрес забугорный), и т.д., оно там все в документации описано

Вот. Это одно из того, что мне нужно. Если у меня xray, значит ставлю tun2socks. С этим я разберусь. Вопрос, как заворачивать именно определенный трафик, как я описал выше и на схеме? Достаточно простой маршрутизации? При этом дефолтным шлюзом выставлять именно шлюз, созданный tun2socks, а остальные по приоритетам определять?

Либо вы заворачиваете весь трафик на Xray и он уже роутит по доменам и geoip (transparent proxy, tun2socks, для geoip лучше использовать не geoip.db из пакета - он не очень точный, а собирать сторонний GitHub - Loyalsoldier/geoip: 🌚 🌍 🌝 GeoIP 规则文件加强版,同时支持定制 V2Ray dat 格式路由规则文件 geoip.dat 和 MaxMind mmdb 格式文件 Country.mmdb。Enhanced edition of GeoIP files for V2Ray, Xray-core, Clash, Trojan-Go, Leaf and Hysteria, with replaced CN IPv4 CIDR available from ipip.net, appended CIDR lists and more.).
Либо вы определяете заранее, что роутить а что нет и часть трафика отдаете в Xray, а часть напрямую с узла - определять можно разными способами:

  • fakedns от Xray - использовать его как dns сервер на узле и возвращать адреса, которые будут заворачиваться в Xray через transparent (я использую такую схему)
  • получать ru-префиксы от ripe или с помощью каких-то скриптов (например GitHub - furriest/radb-tools: RADB tools) и исключать их из заворачивания в Xray.

Спасибо за информацию по сборке. Точно пригодится. Я пока разбираюсь с вариантом отдавать все на xray, а он дальше сам. Смотрю, как заводить этот tun2socks и, что самое пока непонятное для меня, как при маршрутизации трафика через интерфейс tun2socks пирам wireguard получать доступ друг к другу и к локалке за роутером…

Если вы собираетесь отдавать все на xray, то нужно адреса клиентов WG просто исключить из редиректа tun2socks. Конкретнее я не могу подсказать, потому что сам использую transparent proxy (dokodemo) через nftables. Соответственно, адреса которые не нужно заворачивать в Xray у меня просто исключены из редиректа.

Ваше сетап тоже самое делает, что я описал? Можете про него подробнее рассказать?

Вопрос, как заворачивать именно определенный трафик, как я описал выше и на схеме?

Трафик с WG можно заворачивать примерно так:

# допустим у вас в сети WG диапазон 10.100.1.0/24, а на TUN-интерфейсе 10.0.0.0/24
#  все что приходит с WG будем обрабатывать правилом 5
ip rule add from 10.100.1.0/24 table 5
# для правила 5 дефолтным маршрутом ставим TUN
ip route add default via 10.0.0.0/24 dev tun0 table 5

и дальше два варианта, или добавить еще маршрутов обратно на WG (чтобы клиенты WG ходили друг к другу), или же скорректировать ip rule add так чтобы он не захватывал то что идет к другим клиентам, типа

ip rule add not to 10.100.1.0/24 iif wg0 table 5
ip route add default via 10.0.0.0/24 dev tun0 table 5

или же пусть оно все приземляется на TUN, а дальше уже XRay раскидает коннекты - там нужно добавить routing rule чтобы “ip”: “10.100.1.0/24” шли на freedom (direct).

А если не ВГ или не ОВПН (точнее, не ВПН, который могут заблокировать), тогда как построить эту схему при сохранении всех остальных требований?

Я бы взял вместо WG и OpenVPN что-нибудь на базе нормального TLS, например AnyConnect/OpenConnect или SSTP. Но дело ваше, конечно :slight_smile: Это если вам нужно чтобы клиенты могли друг к другу подключаться. Если же не нужно чтобы клиенты друг друга видели, то можно сразу от клиентов ходить через XRay, а на сервере все маршруты по адресам и доменам типа “этот сразу выпускаем в России, а этот сразу передаем на другой Xray” разруливать средствами самого же XRay.

Если же не нужно чтобы клиенты друг друга видели

Нужно. Через это соединение я получаю доступ к NAS и NVR.

Я немного застрял на первом этапе - организации соединения между зарубежным и рф сервером по xray. У меня есть несколько клиентов на разных платформах (ios, macos, linux), которые я подключил через shadowrocket/nekoray к зарубежной впс. Они работают отлично. А вот headless вариант подключения у меня никак не работает. Может подскажете, что не так?

Конфиг ВПС-сервера - PrivateBin

Конфиг ВПС-клиента - PrivateBin

Лог клиента при попытке выполнить запрос через curl - PrivateBin

Гуглеж по ошибке показывает, что неправильный конфиг клиента, но конфиг верный (взял 1 в 1 с официального github, где примеры конфигов) + похожий конфиг на nekoray работает без проблем. Что я не замечаю?

Тоже пытаюсь сделать такую схему даже без маршрутизации, просто весь траффик из wg на vless. Как сделать подключение по vless из vps не понимаю. По tun2socks не ясно как заворачивать весь траффик wg именно на vless