Безопасность в интернете с каждым днём становится всё более насущной необходимостью. Утечка личных данных может обойтись слишком дорого, поэтому о своей цифровой неприкосновенности лучше позаботиться заранее. И начать стоит, например, с защиты DNS-запросов. Обычно для этого используются такие протоколы, как DNS-over-TLS, DNS-over-HTTPS и другие. Я же предлагаю рассмотреть ещё один способ — направить DNS-трафик через прокси-сервер на базе Xray, назовём этот метод DNS-over-VLESS. В сети немало инструкций по настройке самого Xray, но вот проброс DNS-трафика через него раскрыт недостаточно подробно. Попробуем восполнить этот пробел.

Итак, первоначальное условие, у вас уже должен быть настроен и функционировать прокси xray VLESS с XTLS Reality по одной из многочисленных инструкций. Все действия по его "прокачке" выполняем локально на компьютере или роутере, сервер xray не трогаем*.
* Замечание от пользователя:
Во многих конфигурациях серверов xray, которые можно найти на просторах интернета, есть секция для предотвращения проблем с локальной маршрутизацией, в ней блокируется "geoip:private", куда попадает дефолтный адрес DNS-резолвера - 127.0.0.53. Для нашей задачи данное правило с "geoip:private" необходимо удалить, либо направить 127.0.0.53 выше этого правила в директ
Разобьём единый файл настроек xray config.json на файлы по разделам: inbounds.json, outbounds.json, dns.json, routing.json. Этих четырёх файлов достаточно для нашей задачи. После настройки и проверки работоспособности можете дополнительно добавить к ним log.json, politic.json. Впрочем, разбиение на разделы не обязательно, если вам удобней настраивать единый config.json, делайте так, как вам удобно.
Для реализации задуманного необходимо использовать входящее подключение (inbounds), поддерживающее UDP-протокол, например, TProxy.
inbounds.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
{ "inbounds": [ { "port": 1181, "protocol": "dokodemo-door", "settings": { "network": "tcp,udp", "followRedirect": true }, "sniffing": { "enabled": true, "routeOnly": true, "destOverride": ["http","tls","quic"] }, "streamSettings": { "sockopt": {"tproxy": "tproxy"} }, "tag": "tproxy" } ] } |
Как мы уже условились, прокси работает по протоколу VLESS с XTLS Reality и первое, что мы сделаем для пересылки через него DNS-трафика, это добавим в файл outbounds.json секцию DNS-протокола, а в исходящие подключения vless и freedom параметр domainStrategy, без этого параметра встроенный в xray DNS-сервер использоваться не будет.
outbounds.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 |
{ "outbounds": [ { "protocol": "vless", "settings": { "address": "***.***.***.***", "port": 443, "id": "****************************", "encryption": "none", "flow": "xtls-rprx-vision" }, "streamSettings": { "network": "tcp", "security": "reality", "realitySettings": { "serverName": "*********", "publicKey": "****************************", "shortId": "********", "spiderX": "/" }, "sockopt": { "domainStrategy": "ForceIP" } }, "tag": "proxy" }, { "protocol": "freedom", "streamSettings": { "sockopt": { "domainStrategy": "ForceIP" } }, "tag": "direct" }, { "protocol": "dns", "tag": "dns-out" } ] } |
Следующим шагом создадим файл dns.json и укажем в нём любой публичный DNS-сервер.
dns.json
|
1 2 3 4 5 6 7 8 9 |
{ "dns": { "tag": "dns-in", "servers": [ "8.8.8.8" ], "queryStrategy": "UseIP" } } |
Далее создадим в начале файла routing.json два правила, которые перехватят DNS запросы
routing.json
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
{ "routing": { "rules": [ { "inboundTag": ["dns-in"], "outboundTag": "proxy" }, { "port": 53, "outboundTag": "dns-out" }, { "domain": [ "browserleaks", "ip.me" ], "outboundTag": "proxy" }, { "network": "tcp,udp", "outboundTag": "direct" } ] } } |
Настройка завершена, выполняем проверку.
Если ошибок не допущено, то проксируемый ресурс browserleaks.com покажет DNS страны нахождения вашего VPS. Не стоит бояться использования обычных DNS в рассмотренных конфигах, их трафик будет передан на VPS-сервер транспортом VLESS с TLS-шифрованием.
В итоге результат получен, DNS-over-VLESS настроен и работает. Никто не прослушает ваши DNS-запросы к проксируемым сайтам и не подменит ответы по своему усмотрению, а для дополнительной защиты в интернете, обратите внимание на возможность отключения WebRTC и QUIC в браузере.