Свой DNS-сервер на Oxy DNS и Xray: кратко о главном
🎯 О чём этот конспект: Пошаговое руководство по созданию персонального безопасного DNS-сервера с поддержкой протокола DNS over HTTPS (DoH) на базе современного движка Oxy DNS, а также развёртыванию DNS-TCP-прокси через Xray Core. Решение позволяет защитить сетевые запросы от перехвата и подмены провайдером и выборочно разблокировать сервисы (Xbox, зарубежные AI-платформы, API), блокирующие пользователей по GeoIP.
👤 Кому будет полезно: Вайбкодерам, разработчикам, системным администраторам и владельцам домашних роутеров (OpenWrt / Keenetic), которым требуется защищенная DNS-инфраструктура и бесперебойный доступ к зарубежным API и сервисам без необходимости держать постоянный VPN на каждом конечном клиенте.
✨ Что получите: Собственный быстрый DoH-резолвер с защищённым секретным URL, SSL-сертификатом от Let's Encrypt и настроенным умным TCP-проксированием через списки Geosite с автообновлением.
1. Диагностика утечек DNS и разница между DoH и DoT
Контекст: По умолчанию сетевые запросы операционных систем и роутеров отправляются на DNS-серверы интернет-провайдера по незашифрованному протоколу UDP через порт 53. Это позволяет третьим лицам (провайдерам, регуляторам) отслеживать полный список посещаемых доменов и приложений, а также осуществлять подмену IP-адресов (DNS Spoofing / DNS Hijacking) для блокировки ресурсов. Использование защищённых протоколов шифрует тело запроса: DNS over TLS (DoT) использует отдельный защищённый порт (обычно 853), а DNS over HTTPS (DoH) упаковывает DNS-трафик в стандартный протокол HTTPS (порт 443), делая его неотличимым от обычного веб-серфинга. Перед настройкой сервера необходимо уметь локально определять текущую цепочку DNS-резолвинга.
Тайминг: , , ,
Выгода: Устранение уязвимостей DNS Leak, предотвращение перехвата трафика и подмены ответов провайдером.
Как применить:
- Шаг 1: Проверка текущего DNS через терминал — Выполните команду
nslookupв терминале рабочей станции (PowerShell на Windows или bash/zsh на macOS/Linux), чтобы увидеть, какой сервер возвращает сопоставление домена с IP-адресом.
nslookup example.com- Шаг 2: Диагностика цепочки резолвинга на роутере (OpenWrt) — Подключитесь к роутеру по SSH и проверьте запущенные процессы и порты через
netstat, чтобы выяснить, какая служба обрабатывает запросы (например, локальный форвардерdnsmasqна 127.0.0.1:53 или клиентsing-box/ FarCop на 127.0.0.42:53).
ssh root@192.168.1.1
netstat -tlpn | grep :53Результат: Вы точно понимаете, какая служба на маршрутизаторе принимает запросы и куда перенаправляет трафик (провайдерский DNS или локальный прокси-клиент).
2. Подготовка инфраструктуры: Аренда VPS, проверка чистоты IP и делегирование домена
Контекст: Для работы персонального DoH-сервера необходимы виртуальный сервер (VPS) с чистым IP-адресом и зарегистрированный домен. Так как многие коммерческие VPN попадают под блокировки подсетей, перед настройкой сервера обязательно проверяется доступность выданного IP с помощью ICMP-пинга без использования VPN. Для управления доменными записями рекомендуется использовать Cloudflare: он обеспечивает мгновенное обновление DNS-зон и корректно резолвится внешними сервисами (например, Telegram-ботами при настройке вебхуков), в отличие от некоторых локальных регистраторов.
Тайминг: , , , ,
Выгода: Экономия бюджета за счёт аренды минимального VPS ($2.5–$3 в месяц, 1 vCPU, 1 GB RAM достаточно для обслуживания тысяч DNS-запросов) и предотвращение проблем с блокировкой IP-адреса.
Как применить:
- Шаг 1: Проверка доступности IP-адреса VPS — После создания VPS на Ubuntu (версии 22.04 или 24.04 LTS) проверьте доступность хоста в PowerShell/терминале без использования туннелей.
ping <IP_ВАШЕГО_СЕРВЕРА>- Шаг 2: Регистрация домена и перенос DNS-зон в Cloudflare — Зарегистрируйте домен в любой международной или локальной зоне (рекомендуются нейтральные зоны
.com,.pro,.net) и делегируйте NS-серверы на Cloudflare. - Шаг 3: Добавление A-записи для DNS-сервера — В панели управления Cloudflare перейдите в раздел DNS -> Records, добавьте запись типа A с именем поддомена (например,
dnsили любое произвольное) и IP-адресом вашего VPS. Обязательно отключите оранжевое облако (Proxy status: DNS only). - Шаг 4: Проверка привязки домена — Убедитесь, что поддомен резолвится на нужный IP.
nslookup dns.yourdomain.comРезультат: VPS доступен по прямому соединению, а доменное имя указывает напрямую на сервер без вмешательства прокси Cloudflare.
3. Развёртывание Oxy DNS и выпуск SSL-сертификата для DoH
Контекст: В отличие от устаревших решений (например, AdGuard Home или обычный bind/dnsmasq), Oxy DNS оптимизирован для высокопроизводительной маршрутизации, поддерживает гибкие цепочки апстримов и позволяет реализовывать сложные схемы умного проксирования. Чтобы посторонние лица не могли сканировать и бесплатно использовать ваш DNS-сервер, DoH настраивается на секретный URL-путь (например, https://dns.yourdomain.com/Resolve/<случайный_токен>). Для шифрования TLS выпускается валидный сертификат Let's Encrypt через Certbot в режиме standalone.
Тайминг: , , , ,
Выгода: Защищённый собственный DoH-эндпоинт, закрытый от несанкционированного доступа случайным токеном, с автоматическим перевыпуском SSL.
Как применить:
- Шаг 1: Подключение к серверу и установка пакетов — Подключитесь к VPS по SSH (через MobaXterm или стандартный терминал) под пользователем
rootи установите необходимые утилиты.
apt update && apt install -y ca-certificates curl unzip tar openssl certbot python3- Шаг 2: Установка переменных окружения и выпуск SSL-сертификата — Задайте имя вашего домена и сгенерируйте секретный путь доступа к DoH.
# Укажите ваш зарегистрированный поддомен
export DNS_NAME="dns.yourdomain.com"
export DOH_PATH="Resolve/$(openssl rand -hex 12)"
mkdir -p /etc/oxy-dns
echo "$DNS_NAME $DOH_PATH" > /etc/oxy-dns/endpoint.txt
# Выпуск сертификата через Certbot
certbot certonly --standalone -d $DNS_NAME --non-interactive --agree-tos -m admin@yourdomain.com- Шаг 3: Установка бинарника Oxy DNS — Скачайте релиз Oxy DNS для архитектуры x86_64 под Linux (версия musl/gnu) с официального репозитория GitHub и распакуйте в системную директорию.
cd /tmp
OXY_VER=$(curl -s https://api.github.com/repos/wooseopkim/oxy-dns/releases/latest | grep "tag_name" | cut -d '"' -f 4)
curl -L -o oxy-dns.tar.gz "https://github.com/wooseopkim/oxy-dns/releases/download/${OXY_VER}/oxy-dns-x86_64-unknown-linux-musl.tar.gz"
tar -xzf oxy-dns.tar.gz
mv oxy-dns /usr/local/bin/
chmod +x /usr/local/bin/oxy-dns- Шаг 4: Создание конфигурации Oxy DNS (
/etc/oxy-dns/config.yaml) — Настройте апстримы (Cloudflare, Google) и параметры входящих соединений.
cat <<EOF > /etc/oxy-dns/config.yaml
api:
listen: "127.0.0.1:9199"
upstreams:
- address: "1.1.1.1:53"
- address: "8.8.8.8:53"
servers:
- type: doh
listen: "0.0.0.0:443"
path: "/${DOH_PATH}"
cert: "/etc/letsencrypt/live/${DNS_NAME}/fullchain.pem"
key: "/etc/letsencrypt/live/${DNS_NAME}/privkey.pem"
EOF- Шаг 5: Настройка службы Systemd и хука перевыпуска Certbot — Создайте systemd-сервис для автозапуска Oxy DNS.
cat <<EOF > /etc/systemd/system/oxy-dns.service
[Unit]
Description=Oxy DNS Service
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/oxy-dns --config /etc/oxy-dns/config.yaml
Restart=on-failure
RestartSec=5s
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now oxy-dns.service
# Добавление хука на автоперезапуск сервиса при продлении сертификата
echo "renew_hook = systemctl restart oxy-dns.service" >> /etc/letsencrypt/renewal/${DNS_NAME}.conf- Шаг 6: Тестирование работы DoH через cURL — Выполните тестовый запрос резолвинга с локального компьютера или сервера.
curl -s "https://${DNS_NAME}/${DOH_PATH}?name=example.com&type=A" | python3 -m json.toolРезультат: Oxy DNS успешно отвечает на запросы по HTTPS с возвращением валидного JSON с IP-адресами целевого домена.
4. Настройка DNS-TCP-прокси через связку Oxy DNS и Xray Core
Контекст: Ряд зарубежных сервисов (консоли Xbox, сервисы OpenAI/ChatGPT, Claude, некоторые медиаплатформы) блокируют доступ клиентам с IP-адресов определенных стран на стороне своих серверов. При этом прямой VPN-клиент не всегда возможно установить (например, на ТВ-приставках или консолях). Решение — DNS Smart Proxy: когда клиент запрашивает IP заблокированного сервиса, Oxy DNS возвращает IP-адрес вашего зарубежного VPS. На порту 443 VPS запускается Xray Core, который распределяет трафик: если во входящем SNI указан домен вашего DoH-сервера — запрос уходит в Oxy DNS, а если указан сторонний домен (Xbox/OpenAI) — Xray прозрачно проксирует TCP/TLS трафик до оригинального целевого хоста.
⚠️ Важное ограничение: Данный тип проксирования не шифрует весь канал до сервера (как полноценный VLESS/Shadowsocks) и не обходит блокировки оборудования ТСПУ/DPI внутри РФ (например, YouTube через такую связку работать не будет). Он предназначен исключительно для ресурсов, блокирующих клиентов по GeoIP со своей стороны.
Тайминг: , , , ,
Выгода: Разблокировка консолей (Xbox Live/игры), нейросетей и специализированных API на любых устройствах домашней сети простым указанием DoH-адреса, без постоянного включения VPN.
Как применить:
- Шаг 1: Установка Xray Core — Загрузите актуальный бинарник Xray Core.
mkdir -p /etc/xray /usr/local/share/xray
cd /tmp
XRAY_VER=$(curl -s https://api.github.com/repos/XTLS/Xray-core/releases/latest | grep "tag_name" | cut -d '"' -f 4)
curl -L -o xray.zip "https://github.com/XTLS/Xray-core/releases/download/${XRAY_VER}/Xray-linux-64.zip"
unzip -o xray.zip -d /usr/local/bin/
chmod +x /usr/local/bin/xray- Шаг 2: Скачивание базы маршрутизации Geosite — Скачайте файл базы правил доменов
geosite.dat.
curl -L -o /usr/local/share/xray/geosite.dat "https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat"- Шаг 3: Перенос Oxy DNS на локальный порт — Измените порт DoH в файле
/etc/oxy-dns/config.yamlс443на локальный порт8443(чтобы освободить внешний 443 для Xray).
# Фрагмент /etc/oxy-dns/config.yaml
servers:
- type: doh
listen: "127.0.0.1:8443"
path: "/${DOH_PATH}"
cert: "/etc/letsencrypt/live/${DNS_NAME}/fullchain.pem"
key: "/etc/letsencrypt/live/${DNS_NAME}/privkey.pem"- Шаг 4: Настройка конфигурации Xray (
/etc/xray/config.json) — Настройте перенаправление входящих соединений по SNI. - Шаг 5: Настройка групп проксирования и автообновления Geosite в Oxy DNS — Добавьте в
/etc/oxy-dns/config.yamlплагины переопределения ответов для списков geosite и планировщик обновления баз в 04:00.
plugins:
- tag: proxy_override
type: static_ip
args:
groups:
- "geosite:xbox"
- "geosite:openai"
ip: "<IP_ВАШЕГО_VPS>"
- tag: geosite_updater
type: download
args:
url: "https://github.com/v2fly/domain-list-community/releases/latest/download/dlc.dat"
dest: "/usr/local/share/xray/geosite.dat"
cron: "0 4 * * *"- Шаг 6: Запуск служб — Запустите и проверьте статусы обоих сервисов через Systemctl.
systemctl restart oxy-dns
systemctl enable --now xray
systemctl status oxy-dns xray --no-pagerРезультат: При резолвинге доменов xbox.com или openai.com DNS возвращает IP вашего VPS, трафик безопасно проксируется через Xray Core, а остальные DNS-запросы отдаются в стандартном виде.
Свой DNS-сервер на Oxy DNS и Xray: ответы на частые вопросы
В: Будет ли такой DNS-прокси разблокировать сайты, заблокированные ТСПУ в РФ (например, YouTube)?
О: Нет. Данная связка (DNS-прокси + Xray TCP Sniffing) не использует шифрование трафика внутри туннеля (как VLESS Reality / Shadowsocks) и не маскирует SNI для сторонних сайтов. Системы глубокой фильтрации трафика (DPI/ТСПУ) перехватят незашифрованный TLS Client Hello. Данная схема решает исключительно проблему Geo-blocking со стороны зарубежных серверов, которые закрыли доступ для российских IP (Xbox, ChatGPT, зарубежные API).
В: Зачем генерировать случайный путь в URL DoH (/Resolve/хеш)?
О: По умолчанию IP-адреса и порты сканируются роботами в интернете за считанные часы. Если оставить стандартный эндпоинт (например, /dns-query), сторонние боты начнут слать на ваш сервер миллионы запросов, что приведет к перегрузке процессора VPS, исчерпанию трафика и попаданию IP в спам-листы. Секретный путь работает как API-ключ.
В: Почему в Cloudflare нужно обязательно отключать оранжевое облако (Proxy)?
О: Cloudflare проксирует веб-трафик через свои edge-ноды и перехватывает SSL-сертификаты. Для корректной работы собственного DoH с приватным путем и прямого TCP-проксирования запросов на IP вашего сервера запись должна быть в режиме DNS Only (Серое облако).
В: Что делать, если новый арендованный VPS не отвечает на ping?
О: Если IP не пингуется без включенного VPN, но пингуется с другого зарубежного сервера — этот IP заблокирован регулятором. На дешевых хостингах техподдержка редко меняет адрес бесплатно. Рекомендуется либо сразу арендовать 2-3 инстанса в нестандартных локациях (UK, US, редкие страны Европы вместо перегруженных Нидерландов) и удалить неработающие, либо использовать хостинг с платной гарантией чистых IP.
В: Как прописать настроенный DoH-сервер в домашний роутер на OpenWrt?
О: В интерфейсе OpenWrt (в плагинах PassWall / FarCop / OpenClash или настройках dnsmasq) выберите протокол DNS over HTTPS (DoH) и укажите ваш URL: https://dns.yourdomain.com/Resolve/ваш_секретный_хеш. В качестве Bootstrap DNS (первичного резолвера для поиска IP самого домена) укажите 1.1.1.1 или 8.8.8.8.
В: Как добавить отдельный домен в проксирование без использования Geosite?
О: В конфигурации Oxy DNS (/etc/oxy-dns/config.yaml) в блоке плагина переопределения добавьте список конкретных FQDN:
domains:
- "api.my-blocked-service.com"
- "custom-domain.org"После сохранения перезапустите сервис командой systemctl restart oxy-dns.
Свой DNS-сервер на Oxy DNS и Xray: инструменты и ссылки из видео
- Oxy DNS — Современный высокопроизводительный DNS-сервер и маршрутизатор запросов на Rust —
https://github.com/wooseopkim/oxy-dns - Xray Core — Набор инструментов для построения сетевых прокси и VPN-туннелей —
https://github.com/XTLS/Xray-core - V2Fly Geosite Community — База категорий доменов и гео-зон для гибкой маршрутизации трафика —
https://github.com/v2fly/domain-list-community - Certbot (EFF) — Утилита для автоматического получения и продления бесплатных SSL-сертификатов Let's Encrypt —
https://certbot.eff.org - Cloudflare DNS — Бесплатный сервис управления DNS-записями с мгновенной синхронизацией —
https://www.cloudflare.com - MobaXterm — Расширенный терминальный SSH-клиент для Windows с поддержкой SFTP и вкладок —
https://mobaxterm.mobatek.net
Конспект создан на основе видео «Свой DNS сервер за 15 минут / Защищаем свой DNS / DNS Прокси для Xbox и нейросетей» канала Let's Talk About IT. Все права на оригинальный материал принадлежат авторам. Источник: https://www.youtube.com/watch?v=CRd-hu3kBPA