Перейти к содержанию

Предотвращение утечки DNS

Без правильной настройки DNS ваши DNS-запросы могут утекать за пределы VPN-туннеля, раскрывая провайдеру или локальной сети, какие домены вы посещаете.


Как происходят утечки DNS

Когда вы подключаетесь к VPN, ваш трафик шифруется и маршрутизируется через VPN-сервер. Однако DNS-запросы часто обрабатываются отдельно системным DNS-резолвером операционной системы, который может отправлять запросы напрямую на DNS-серверы вашего провайдера:

Без DNS прокси:
┌──────────────┐         ┌─────────────┐
│ Ваше устрой. │ ──────► │ DNS провайд.│ ← Утечка DNS!
│              │         └─────────────┘
│ ── VPN ────► │         ┌─────────────┐
└──────────────┘ ──────► │ VPN-сервер  │ ← Обычный трафик
                        └─────────────┘

Даже если ваш веб-трафик проходит через VPN-туннель, провайдер видит каждый разрешённый вами домен.


Как DNS прокси r-vpn предотвращает утечки

DNS прокси r-vpn работает локально на вашём устройстве. Он принимает DNS-запросы и пересылает их через зашифрованный VPN-туннель на сервер, который их разрешает:

С включённым DNS прокси:
┌──────────────┐         ┌─────────────┐
│ Ваше устрой. │         │ DNS провайд.│ ← Не используется
│              │         └─────────────┘
│ [DNS прокси] │ ──────► │ VPN-сервер  │ ← Зашифрованный туннель
└──────────────┘         └─────────────┘

Ваш провайдер не видит DNS-запросов. Всё разрешение DNS происходит внутри зашифрованного туннеля.


Интеграция со split tunnel

DNS прокси соблюдает правила split tunnel:

Тип домена Поведение
Обходные домены Разрешаются локально (не через VPN)
Заблокированные домены (реклама/трекеры) Сразу возвращают NXDOMAIN
Все остальные домены Разрешаются через VPN-туннель

Это означает: - Отечественные стриминг-сайты, которые вы обходите, разрешаются локально (без накладных расходов VPN) - Блокировщик рекламы работает без отправки запросов на VPN-сервер - Все остальные домены приватны


Настройка

macOS

1. Включите DNS прокси в client.toml:

[dns_proxy]
enabled        = true
listen_address = "127.0.0.1:53"

2. Запустите клиент с правами root (необходимо для привязки к порту 53):

sudo rvpn -c ~/.config/rvpn/client.toml

3. Настройте системный DNS:

Системные настройки -> Сеть -> ваше подключение -> Подробности -> DNS

Добавьте 127.0.0.1 как основной DNS-сервер. Удалите все остальные записи.

Или через командную строку:

sudo networksetup -setdnsservers Wi-Fi 127.0.0.1

Для проверки:

# Должно показать 127.0.0.1
networksetup -getdnsservers Wi-Fi

# Должно вернуть IP вашего VPN-сервера
dig @127.0.0.1 api.ipify.org

Для восстановления исходного DNS:

sudo networksetup -setdnsservers Wi-Fi empty

Linux

Вариант 1: Прямое редактирование resolv.conf

Запустите клиент от root:

sudo rvpn -c ~/.config/rvpn/client.toml

Отредактируйте /etc/resolv.conf:

nameserver 127.0.0.1

Вариант 2: systemd-resolved (рекомендуется)

Добавьте в /etc/systemd/resolved.conf:

[Resolve]
DNS=127.0.0.1

Затем перезапустите:

sudo systemctl restart systemd-resolved

Проверьте:

resolvectl status | grep DNS

Linux с NetworkManager

  1. Редактируйте подключение: nm-connection-editor
  2. Настройки IPv4 -> Метод: Вручную
  3. Добавьте DNS-сервер: 127.0.0.1
  4. Сохраните и переподключитесь

Проверка на утечки DNS

Посетите эти сайты при подключённом VPN:

  1. https://dnsleaktest.com
  2. https://ipleak.net
  3. https://browserleaks.com/dns

Показанные DNS-серверы должны быть DNS вашего VPN-сервера (или dns_servers, указанными в вашем server.toml), а не DNS провайдера.


Как работает разрешение DNS в TUN-режиме

В TUN-режиме клиент получает dns_servers от сервера через DHCP и автоматически их использует. DNS прокси по-прежнему рекомендуется при использовании режима SOCKS5, так как TUN-режим имеет встроенную обработку DNS.

Конфигурация DNS сервера

[server.network]
nat_enabled = true
dhcp_range   = "10.200.0.0/24"
dns_servers  = ["1.1.1.1", "8.8.8.8"]

Эти DNS-серверы передаются TUN-клиентам. Клиент использует их напрямую для разрешения DNS.


Пользовательские DNS-серверы

Для использования конкретных DNS-провайдеров через VPN-туннель:

На стороне сервера (передаётся TUN-клиентам):

[server.network]
dns_servers = ["1.1.1.1", "8.8.8.8"]   # Cloudflare + Google

Или с акцентом на приватность:

dns_servers = ["privacy.wikipedia.org", "dns.sb"]

На стороне клиента в режиме SOCKS5:

DNS прокси пересылает на сервер, который разрешает через dns_servers. Для использования конкретного DNS через туннель настройте их на сервере.


DNS-серверы для обходных доменов (локальный DNS-фолбэк)

Когда DNS прокси является вашим системным DNS-резолвером, обходные домены (домены, которые идут в обход VPN) требуют особой обработки. Если прокси попытается использовать системный резолвер для обходных доменов, запрос зациклится на самом себе, что приведёт к полному отказу DNS при неработающем туннеле.

Для предотвращения этого r-vpn отправляет необработанные UDP DNS-запросы напрямую на публичные серверы имён для обходных доменов, полностью минуя системный резолвер:

Настройка По умолчанию Назначение
nameservers ["223.5.5.5:53", "1.1.1.1:53", "8.8.8.8:53"] Публичные DNS-серверы для разрешения обходных доменов

Настройка в client.toml:

[dns_proxy]
enabled     = true
nameservers = ["223.5.5.5:53", "119.29.29.29:53", "1.1.1.1:53"]
  • Пользователям из КНР: Поставьте китайский DNS первым (например, AliDNS 223.5.5.5 или DNSPod 119.29.29.29) для наилучшей задержки на отечественных сайтах.
  • Глобальным пользователям: Порядок по умолчанию хорошо работает во всём мире.
  • Эти серверы используются только для обходных доменов. Туннельные домены по-прежнему разрешаются через зашифрованный VPN-туннель.

DNS-over-HTTPS и DNS-over-TLS

R-VPN не проксирует необработанные запросы DNS-over-HTTPS (DoH) или DNS-over-TLS (DoT) от клиентских приложений.

Локальный DNS прокси перехватывает традиционные UDP DNS-запросы от операционной системы. Для доменов, которые должны проходить через туннель, он пересылает их на сервер через зашифрованный WebSocket туннель R-VPN с использованием пользовательского DNS-протокола (не DoH и не DoT). Сервер разрешает их с помощью своего стандартного системного DNS-резолвера. В настоящее время серверная конфигурация DoH/DoT недоступна.


Устранение проблем с DNS

Домены не разрешаются

  • Проверьте, что DNS прокси запущен: dig @127.0.0.1 example.com
  • Убедитесь, что listen_address в client.toml соответствует вашей системной настройке DNS
  • Попробуйте другой DNS-сервер: dig @8.8.8.8 example.com

DNS прокси не запускается

  • Порт 53 может быть занят: sudo lsof -i :53
  • Попробуйте порт 5353 (не требует root)

Медленное разрешение DNS

  • Попробуйте другие DNS-серверы (Cloudflare 1.1.1.1 обычно самый быстрый)
  • Уменьшите dns_cache_ttl в client.toml для часто изменяющихся доменов

Утечка DNS несмотря на прокси

  • Убедитесь, что в системных настройках нет других DNS-настроек
  • Проверьте DNS-настройки браузера (Firefox может переопределять системный DNS)
  • Chrome (десктоп/Android): Отключите Безопасный DNS в настройках Chrome: Настройки -> Конфиденциальность и безопасность -> Безопасность -> Использовать безопасный DNS -> выключите. Затем очистите DNS-кэш Chrome: перейдите на chrome://net-internals/#dns и нажмите Clear host cache.
  • iOS Chrome: Если сайты не разрешаются, принудительно закройте приложение или очистите данные просмотра для сброса DNS-кэша.
  • Убедитесь, что не запущен DNS-резолвер без VPN (например, mDNSResponder)