> Markdown-версия страницы https://tuna.am/blog/dns-resolver-geodns/. Оглавление документации — [llms.txt](https://tuna.am/llms.txt), весь текст одним файлом — [llms-full.txt](https://tuna.am/llms-full.txt). Markdown-версия есть у любой страницы: добавьте `.md` к адресу без слеша на конце.

[Блог](https://tuna.am/blog.md)|[Инструкции](https://tuna.am/blog/tags/guides)

# Сайт за туннелем не открывается? Проверьте DNS-резолвер

13 ноября · 10 мин

Недавно нам написал пользователь: сайт за туннелем открывается наполовину. HTML загружается, мелкие запросы проходят, а большие скрипты, стили и картинки обрываются примерно на 20 КБ. Туннель работал исправно, точка входа отдавала ответ целиком. Всё упиралось в настройку DNS: был выбран DNS-over-HTTPS от Cloudflare.

Дело в том, как сервис туннелей Tuna выбирает точку входа для посетителя. Её выбирает DNS, а он видит не посетителя, а его DNS-резолвер. Ниже — как это устроено, как проверить свой резолвер и что настроить.

> **Коротко**
>
> * Точку входа, российскую или европейскую, выбирает GeoDNS. Он определяет страну не по вашему адресу, а по адресу DNS-резолвера.
> * Зарубежный резолвер, который не передаёт GeoDNS подсеть клиента, может определить вас как пользователя вне России, даже если вы в России. Так ведут себя Cloudflare, обычный Quad9 (`9.9.9.9`), OpenDNS и другие. Тогда трафик пойдёт на европейскую точку входа, и по пути его могут оборвать.
> * Подходят DNS провайдера и Яндекс DNS, а из зарубежных публичных — Google Public DNS и Quad9 с ECS. Они передают подсеть, и GeoDNS видит, откуда вы на самом деле, в том числе под VPN, если DNS-запросы идут через него.
> * Проверить, куда вас отправил DNS, можно одной командой: `dig` или `nslookup`.

## Как Tuna выбирает точку входа

Запросы к туннелям принимают [точки входа](https://tuna.am/blog/high-availability.md), а они, на текущий момент, собраны в две группы: российскую и европейскую. Группу выбирает [GeoDNS](https://en.wikipedia.org/wiki/GeoDNS): на запрос имени туннеля он отвечает по-разному в зависимости от того, откуда пришёл запрос.

Все имена туннелей ведут в зону `a.2na.am`. Это касается случайных и закреплённых имён в `a.2na.am`, бесплатных поддоменов в `a.tuna.free`, старых имён в `ru.tuna.am` и `nl.tuna.am` и собственных доменов, подключённых через CNAME. Дальше GeoDNS отдаёт:

* для России — CNAME `edge-ru-a.2na.am`, российские точки входа;
* для остальных стран — CNAME `edge-eu-a.2na.am`, европейские точки входа.

Туннельная нода, к которой подключён tuna-cli, от этого выбора не зависит: любая точка входа доставит запрос до неё. Выбор влияет только на то, через какую страну пойдёт трафик от посетителя до Tuna.

![Анимация: браузер спрашивает адрес у резолвера в России, GeoDNS видит Россию и отвечает edge-ru-a, запросы идут через российскую точку входа до tuna-node, и сайт открывается](/blog/img/2026-11-13-dns-resolver-geodns/geodns-russia.svg)

Обычный случай: резолвер в России, GeoDNS отдаёт российскую точку входа.

## GeoDNS видит резолвер, а не вас

Браузер не спрашивает DNS-сервер Tuna напрямую. Запрос идёт через рекурсивный резолвер: провайдера, роутера, публичного сервиса вроде 1.1.1.1 или 8.8.8.8. До нашего DNS-провайдера доходит адрес этого резолвера, а не ваш.

Если резолвер стоит в той же стране, что и вы, проблемы нет. Если нет, выручает расширение [EDNS Client Subnet](https://en.wikipedia.org/wiki/EDNS_Client_Subnet) (ECS): резолвер передаёт в запросе подсеть клиента, и GeoDNS выбирает по ней. Наш DNS-провайдер ECS учитывает, но передают его не все резолверы. У ECS есть обратная сторона: DNS-серверы сайтов видят вашу подсеть. Поэтому сервисы, которые берегут приватность, например Cloudflare, его не передают.

Без ECS GeoDNS видит только адрес узла резолвера, который вам ответил. У крупных публичных сервисов узлы стоят по всему миру, и ближайший по маршруту может оказаться и в Москве, и в Стокгольме.

![Анимация: браузер в России спрашивает адрес у Cloudflare, Cloudflare не передаёт подсеть, GeoDNS отвечает edge-eu-a, трафик идёт за рубеж через ТСПУ, маленький ответ проходит, а большой обрывается](/blog/img/2026-11-13-dns-resolver-geodns/geodns-cloudflare.svg)

Резолвер за рубежом без ECS: GeoDNS принимает посетителя из России за зарубежного.

### Какие резолверы мы проверили

Мы проверили популярные публичные резолверы с двух серверов в Москве. Спрашивали имя в зоне `a.2na.am` по обычному DNS, [DNS-over-TLS](https://ru.wikipedia.org/wiki/DNS_over_TLS) (DoT) и [DNS-over-HTTPS](https://ru.wikipedia.org/wiki/DNS_over_HTTPS) (DoH) и смотрели, передаёт ли резолвер подсеть клиента. Ответ от протокола не зависел, кроме Cloudflare.

| Резолвер                                           | DoT | DoH | Передаёт подсеть                          | Ответ для клиента из Москвы |
| -------------------------------------------------- | --- | --- | ----------------------------------------- | --------------------------- |
| Яндекс DNS                                         | да  | да  | не нужно, резолвер в России               | `edge-ru-a`                 |
| Google Public DNS                                  | да  | да  | да                                        | `edge-ru-a`                 |
| Quad9 с ECS (`9.9.9.11`)                           | да  | да  | да                                        | `edge-ru-a`                 |
| Quad9 (`9.9.9.9`)                                  | да  | да  | нет                                       | `edge-eu-a`                 |
| Cloudflare                                         | да  | да  | нет                                       | зависит от узла             |
| OpenDNS                                            | да  | да  | только избранным DNS-серверам, нашему нет | `edge-eu-a`                 |
| AdGuard DNS                                        | да  | да  | нет, но у него есть узел в России         | `edge-ru-a`                 |
| NextDNS, Control D, CleanBrowsing, DNS.SB, Mullvad | да  | да  | нет                                       | `edge-eu-a`                 |

Cloudflare хорошо показывает, как работает лотерея без ECS. С одного и того же сервера запросы к `1.1.1.1` и по DoT попадали на узел Cloudflare в Москве и получали `edge-ru-a`, а запросы по DoH через `cloudflare-dns.com` — на узел в Стокгольме и получали `edge-eu-a`.

Это снимок из московского дата-центра. У домашнего провайдера маршрут до узлов Cloudflare, AdGuard и других резолверов без ECS может быть другим, а с ним и ответ. Резолверы с ECS от маршрута не зависят: GeoDNS выбирает по вашей подсети, где бы ни стоял узел резолвера. DoH у DNS.SB и Mullvad из Москвы иногда не отвечал.

Если вам нужен зарубежный публичный резолвер, выбирайте тот, что передаёт подсеть, — Google Public DNS или Quad9 с ECS.

## Почему сайт открывается не до конца

Сама по себе европейская точка входа для посетителя из России не страшна: задержка чуть больше, только и всего. Проблема в ограничениях на пути. У многих российских провайдеров соединения с зарубежными хостингами обрываются, когда через них прошло примерно 16–20 КБ данных. Это поведение [ТСПУ](https://ru.wikipedia.org/wiki/%D0%A2%D0%A1%D0%9F%D0%A3), и мы видим его в обращениях клиентов разных провайдеров.

Отсюда характерная картина:

* маленькие ответы (HTML, запросы к API) приходят целиком;
* большие файлы (JS-бандлы, CSS, картинки) обрываются или грузятся бесконечно;
* в инструментах разработчика браузера — запросы в статусе `pending` или с ошибкой вроде `ERR_CONNECTION_RESET`, `ERR_HTTP2_PROTOCOL_ERROR`.

![Анимация загрузки страницы. Через российскую точку входа все файлы загружаются целиком. Через европейскую точку входа и ТСПУ index.html и ответ API приходят целиком, а style.css, app.js и hero.jpg обрываются примерно на 20 КБ](/blog/img/2026-11-13-dns-resolver-geodns/loading.svg)

Один и тот же сайт у одного и того же посетителя. Через ТСПУ проходят только ответы меньше примерно 20 КБ.

На стороне Tuna в это время всё в порядке: точка входа отправила ответ целиком, данные потерялись по дороге. Через российскую точку входа тот же сайт у того же посетителя открывается без проблем.

Обратная ситуация тоже бывает. Если вы работаете через VPN с выходом за рубежом, а DNS-запросы идут к российскому резолверу, GeoDNS отдаст российскую точку входа. Трафик к ней пойдёт через зарубежный выход VPN, и такое соединение тоже может оборваться.

![Анимация: под VPN DNS-запрос уходит к провайдеру в обход VPN, GeoDNS видит Россию и отвечает edge-ru-a, трафик идёт к российской точке входа через зарубежный выход VPN и обрывается](/blog/img/2026-11-13-dns-resolver-geodns/geodns-vpn.svg)

VPN, но DNS идёт мимо него: GeoDNS видит Россию, а трафик выходит за рубежом.

Правило одно: GeoDNS должен видеть ту же страну, откуда выходит ваш трафик. Так будет, если резолвер стоит там же или передаёт вашу подсеть.

## Как проверить

Спросите DNS, куда он направляет `a.2na.am`. На этот адрес ходят TCP-туннели (`a.2na.am:<порт>`), а для HTTP-имён вида `myapp.a.2na.am` ответ тот же:

```bash
dig a.2na.am

```

Смотрите на CNAME в секции `ANSWER`:

```text
a.2na.am.     300  IN  CNAME  edge-ru-a.2na.am.

```

То же через `nslookup`, он есть и в Windows:

```bash
nslookup a.2na.am

```

```text
a.2na.am  canonical name = edge-ru-a.2na.am.

```

* `edge-ru-a.2na.am` — российская точка входа;
* `edge-eu-a.2na.am` — европейская.

Если вы в России без VPN и видите `edge-eu-a`, резолвер выбран неудачно. Если вы под VPN с зарубежным выходом и видите `edge-ru-a`, DNS-запросы идут мимо VPN.

Если у вас установлен tuna-cli, команда `tuna diagnose` показывает то же самое в секции `DNS`: регион — последнее имя в цепочке CNAME.

> **Браузер может спрашивать DNS сам.** `dig`, `nslookup` и `tuna diagnose` используют системный резолвер. Если в браузере включён «защищённый DNS», браузер резолвит имена сам, в обход системы, и может получить другой ответ. Как его настроить — в разделе [«Защищённый DNS в браузере»](#browser).

## Что настроить

### В России без VPN

Используйте DNS провайдера (обычно он приходит автоматически от роутера) или публичный резолвер, с которым GeoDNS видит Россию:

| Резолвер          | Обычный DNS                  | DNS-over-TLS                | DNS-over-HTTPS                                |
| ----------------- | ---------------------------- | --------------------------- | --------------------------------------------- |
| Яндекс DNS        | `77.88.8.8`, `77.88.8.1`     | `common.dot.dns.yandex.net` | `https://common.dot.dns.yandex.net/dns-query` |
| Google Public DNS | `8.8.8.8`, `8.8.4.4`         | `dns.google`                | `https://dns.google/dns-query`                |
| Quad9 с ECS       | `9.9.9.11`, `149.112.112.11` | `dns11.quad9.net`           | `https://dns11.quad9.net/dns-query`           |

### С VPN

Используйте резолвер с ECS из таблицы выше или DNS за пределами России и убедитесь, что DNS-запросы идут через VPN. Тогда GeoDNS увидит подсеть выхода VPN и отдаст точку входа вне России. Многие VPN-клиенты делают это сами, но при раздельном туннелировании (split tunneling) DNS может уходить к провайдеру напрямую. В этом случае GeoDNS отдаст российскую точку входа, а трафик к ней пойдёт через зарубежный выход VPN и может не открыться.

### Защищённый DNS в браузере

Chrome, Edge и Firefox умеют резолвить имена по DNS-over-HTTPS сами и подменяют этим системный резолвер. Если там выбран провайдер без ECS, например Cloudflare, обычный Quad9, NextDNS или CleanBrowsing, выберите Google Public DNS или впишите свой адрес DNS-over-HTTPS из [таблицы выше](#russia). Можно и просто отключить защищённый DNS:

* Chrome и Edge: «Настройки» → «Конфиденциальность и безопасность» → «Безопасность» → «Использовать безопасный DNS»;
* Firefox: «Настройки» → «Приватность и защита» → «DNS через HTTPS».

На Android то же делает «Частный DNS» в настройках сети.

### Не прописывайте адреса вручную

Не закрепляйте адреса точек входа в `/etc/hosts`, в `curl --resolve` и подобных местах. Адреса точек входа меняются: мы добавляем и выводим точки входа, а при отказе DNS убирает неисправную из ответа. Закреплённый адрес однажды перестанет работать, а отказоустойчивость пропадёт сразу.

## Почему мы не можем исправить это у себя

Честно: это ограничение. Работу сайтов в условиях цензуры и ТСПУ мы гарантировать не можем. Мы можем только направить посетителя на точку входа, до которой его трафик скорее всего дойдёт. А решать, куда направить, приходится по тому, что видно GeoDNS: по адресу резолвера или по подсети, которую он передал.

Основная аудитория Tuna в России, но много пользователей в СНГ и Европе, и сайты за туннелями должны открываться у всех. Поэтому мы держим точки входа и там, и там и балансируем между регионами. Большего в текущих условиях на нашей стороне сделать нельзя.

Дальше точки входа появятся в новых регионах, например в Сингапуре и США. Принцип не изменится: точку входа выбирает DNS, так что правило про резолвер останется в силе.

Если вы проверили DNS, а сайт за туннелем всё равно открывается не целиком, напишите нам в поддержку и приложите вывод `tuna diagnose` и `dig a.2na.am`.

## Оставьте отзыв

Если вам нравится пользоваться Tuna, или наоборот вы недовольны чем-либо, то пожалуйста [оставьте отзыв](https://my.tuna.am/?show_feedback=1&lang=ru).

![](/blog/img/2024-08-22/feedback.gif)

## Новости

Анонсы новых функций и статей публикуем в [Telegram-канале](https://t.me/tuna_am). Подписывайтесь, чтобы ничего не пропустить.

## Помощь

Мы ценим наших пользователей и детально изучаем все обращения, если у вас возникли проблемы с tuna – обязательно свяжитесь с нами одним из способов:

* [Электронная почта](mailto:info@tuna.am)
* [Telegram сообщество](https://telegram.me/+Kgbtt0_gJwI5ZmEy)

Категории: [Инструкции](https://tuna.am/blog/tags/guides)

[старее →🎲 Кабинет на выдуманных данных: мок из OpenAPI прямо в Vite](https://tuna.am/blog/ui-mocks-from-openapi.md)
