Ну что, попробовал я это чудо чудное диво дивное. По установке вопросов не возникло, а вот с конфигами пришлось повозиться и помощи в чате попросить. Пока непросто, надеюсь в будущем мы увидим мастер настройки что сам будет формировать json-ы да вот хотя бы на базе примеров из шапки под несколько типовых конфигураций.
Задача: в Интернет ходим как обычно, список выбранных доменов ходит через VPS где развёрнут 3X-UI с Reality. Голосовая связь должна работать (Discord и т.п.) так что Mixed режим. На роутере установлен AdGuard Home ( далее AGH), который также используется как DoT сервер для телефона не из дома так что DNS мы не трогаем (так-то могли бы и DNS туда завернуть). Помним, что в этом варианте даже если AGH использует DoT/DoH или прочие защищённые протоколы, ему всё равно надо у кого-то сперва спросить, на каком IP находится домен с DoT у которого он потом всё спрашивать будет. Это в AGH называется bootstrap DNS и провайдер этот запрос увидит, хоть ничего незаконного в использовании защищённых DNS и нет.
Сразу оговорюсь: оказалось крайне полезно, что правила применяются на базе политик, задаваемых в роутере. Так что даже если мы "всё сломали", можно просто убрать политику и читать в интернете решение.
Чтобы понимать логику работы, проще всего представить себе чёрный ящик со входом и выходами. Мы должны настроить что он входом будет пылесосить, какими выходами он плюёт трафик и правила, по которым он будет плеваться тем что спылесосил на входе в определённый выход.
После установки по инструкции я залез в /opt/etc/xray/configs/ и (хоть и не сразу но) привёл их к вот такому виду. Это, скорее, пример реализации чем реальное руководство к действию. Конфиги сильно проще редактировать текстовым редактором на ПК, если хранилище роутера доступно из локальной сети. Тогда это путь вида \\Keenetic-9870\ext4\etc\xray\configs
В inbounds (на момент написания комментария 03_inbounds.json) по сути менять относительно образца из Mixed конфига особо нечего. Разве что IP роутера, если вы назначили другие цифры. То есть редактировать надо там где есть комментарий с двумя слешами, между двойными кавычками:
Как читать json: В целом json это скобки, вложенные в скобки, вложенные в скобки. Поэтому используются отступы слева чтобы понимать глубину вложенности. Это значит, что если я хочу понять, что относится к блоку "sniffing": { то я читаю всё до закрытия фигурной скобки }. В примере это "enabled": true, "destOverride": [ "http", "tls" ] разнесённый по нескольким строчкам. Так уже и попонятней, что читать. Notepad++ умеет выделять закрывающую скобку при щелчке по открывающей, это тоже помогает с пониманием или если вы вдруг скобку удалили и не понимаете, где. Ну а всё что после // и до конца строки это комментарий.
Посмотрите, насколько удобней читать.
В outbounds () уже сильно больше изменений.
Сейчас мы редактируем "выходы" с чёрного ящика.
Блок с "tag": "vless-reality" это "выход" траффика, который отправится в VPS. Мы ему этот тег будем назначать и дальше опишем, куда трафик отправляется. address - публичный айпи VPS. Порт 443 не меняется потому что у нас Reality, наш сервер работает "зеркалом" какого-то домена, а стандартный порт https - 443. Flow - xtls-rprx-vision потому что так указано в настройках на стороне 3X-UI. Мы вообще оттуда всё копируем. ID - это идентификатор пользователя, он написан в окошке редактирования пользователя.
publicKey можно достать из окошка редактирования свойств Подключения в 3X-UI. Там же указан fingerprint (Поле uTLS), servername (поле Dest) и Short ID. Последнего, кстати, в X-UI я не нашёл вообще, потому и 3X-UI.
То есть надо понимать, что я вот тут подробно пишу но понятия не имею почему нужно писать например "settings": { "vnext": [ { а не как-то ещё. Для этого в шапке и лежат примеры, но разобраться что с чем стыкуется всё равно надо.
В целом же мой outbounds сообщает, что вот то что с тегом "vless-reality" идёт в VPS, что с тегом "direct" то идёт в "freedom" т.е. напрямую, а что с "block" то идёт в "blackhole" т.е. отбрасывается и никуда не идёт и вообще не тратим на это внимание и ресурсы, утруждая себя ответами.
На сейчас мы разобрались, что мы ловим трафик, назначаем ему теги, запихиваем в чёрный ящик. И что из чёрного ящика может приходить траффик с другими тегами и его надо запульнуть в VPS, напрямую или в никуда. Осталось разобраться с правилами чёрного ящика.
Опять же, разбираем код по кускам, комментариями на русском отмечены отдельные правила. К примеру, Правило 1 это мы ищем траффик с тегами ["redirect", "tproxy"] и назначаем ему тег "block" для доменов из списка, например analytics.yandex. То есть это улетает вникуда.
Аналогично строится правило 3 для VPS - мы берём траффик с ["redirect", "tproxy"] и назначаем "vless-reality" для доменов из списка. Обратите внимание, в списке есть английские комментарии. Я их просто для себя написал чтобы структурировать список. И да, вы тоже так можете.
Ну и правило 4 это опять мы смотрим трафик с метками "redirect", "tproxy" и помечаем его как "direct" (напрямую) без дополнительных условий, то есть весь остальной трафик что не попал в предыдущие правила.
Момент с записями вида ext:geosite_v2fly.dat:facebook - как они составляются? Суть строки состоит в том что мы берём внешний (external) источник - аддон geosite_v2fly и оттуда спрашиваем список для facebook. Вот он: https://github.com/v2fly/domain-list-community/blob/master/data/facebook и там же рядом куча списков ещё. У facebook много адресов, можно аналогично поискать для себя другие крупные ресурсы. При редактировании списков не забудьте, что у каждой строки должна быть запятая в конце, кроме последней.
При диагностике проблем пробуйте достучаться до сайтов из разных фильтров. Иногда это помогает в диагностике. К примеру, если работает умолчание но не работает VPS-путь, возможно что-то с правилом туда или с самим выходом. Ну или вы забыли применить политику к этому ПК 😃 Мне на старте вот этого понимания не очень хватало чтобы разобраться, что я и куда пишу. А ещё есть 01_log.json где можно выставить логгирование побольше и почитать логи. Только не забудьте обратно отключить потом.
Ну, вот так как-то. Просили отзыв - вот отзыв =))