Как работают DNS-запросы на устройствах пользователей? И как можно настроить DNS over HTTPS (DoH) через прокси или, по крайней мере, непосредственно с клиента на DNS-ресолвер на VPS?

Добрый день! 

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

1) Я заинтересован в том, чтобы настроить на своём VPS с xray и nginx – Pi-hole с unbound. Я уже предпринял три попытки:

- Следовал инструкции по настройке обоих через Docker, но у меня не удалось запустить Pi-hole с Unbound. При попытке повторно установить после удаления контейнеров возникла ошибка. Когда я пытался полностью обнулить систему (включая удаление Docker), то столкнулся с ошибкой, и сервер перестал работать. Теперь я не рассматриваю вариант с Docker.

- Попробовал установить Unbound с прослушкой на localhost. Этот этап прошёл успешно, и я добавил его адрес в конфигурацию xray. Однако я не совсем понял, что получил на выходе. Для того чтобы Unbound выполнял свои функции, мне нужно указать в клиентском приложении адрес 111.11.11.11:443 (адрес, на котором слушает xray) как удалённый DNS-сервер, правильно? Но, как я понимаю, если не указать secretpath, запрос просто уйдёт через фолбэк на nginx.

- Наконец, я установил всё на VPS без Docker, следуя документации на сайте Pi-hole. Здесь всё прошло отлично – Pi-hole и Unbound начали работать вместе и смогли установить соединение с внешним интернетом. В этом случае у меня возник вопрос: что делать дальше? Pi-hole слушает на внешнем контуре, а не на localhost (что, как я понимаю, может быть проблемой с точки зрения безопасности). Как мне связать его с xray (и стоит ли это делать, или лучше настроить DNS-сервер прямо на клиентском устройстве)? 

В итоге, я просто хочу понять...
  • 11 января 2025 г. 13:44
Ответы на вопрос 2
Сначала давайте разберёмся с основной теорией, касающейся работы DNS-запросов и DNS over HTTPS (DoH), а затем перейдём к практическим аспектам настройки на вашем VPS.

### Теорическая часть

**Как работают DNS-запросы:**
1. Когда пользователь вводит URL-адрес в браузере, устройство отправляет DNS-запрос, чтобы разрешить доменное имя в IP-адрес.
2. Запрос может проходить через несколько уровней:
   - Кеш DNS на устройстве.
   - Локальный DNS-сервер (например, на роутере).
   - Официальные DNS-серверы (например, Google, Cloudflare).
3. Получив IP-адрес, устройство может подключиться к серверу по этому адресу.

**DNS over HTTPS (DoH):**
- DoH шифрует DNS-запросы, передавая их через HTTPS, что делает их менее уязвимыми для перехвата.
- Клиенты (например, браузеры) могут напрямую отправлять DoH-запросы к DoH-совместимым DNS-ресолверам.
- Это может помочь обойти ограничения, установленные провайдерами.

### Практическая часть

Теперь, рассмотрим, как вы можете настроить на своём VPS Pi-hole с Unbound и xray (или nginx) для DoH.

**Настройка Pi-hole и Unbound без Docker:**
1. **Pi-hole**: он будет служить DNS-прокси, принимая запросы от клиентов и передавая их на Unbound для разрешения.
2. **Unbound**: это локальный DNS-сервер, который будет обслуживать запросы от Pi-hole и делать резолвинг на нужные DNS-серверы.

**Ваши шаги:**
1. **Pi-hole с Unbound**: Если вы уже установили Pi-hole и Unbound и они работают вместе, убедитесь, что Pi-hole настроен для использования Unbound в качестве DNS-сервера. В веб-интерфейсе Pi-hole в разделе настройки DNS укажите адрес `127.0.0.1#5335` (или другой порт, если вы изменили его).
   
2. **Конфигурация Unbound**: Убедитесь, что Unbound настроен на прослушивание только на localhost (127.0.0.1), чтобы избежать потенциальных атак извне. Проверьте файл конфигурации Unbound (обычно это `/etc/unbound/unbound.conf`) и убедитесь, что в секции `interface:` указано `interface: 127.0.0.1`.

3. **Настройка xray или nginx для DoH**: 
   - Если вы используете xray, настройте его на обработку DoH-запросов. Например, в конфигурации xray, нужно указать, чтобы он слушал на определённом порту (например, 443) и передавал запросы на Unbound:
     ```json
     {
       "inbounds": [
         {
           "port": 443,
           "protocol": "dokodemo-door",
           "settings": {
             "address": "127.0.0.1",
             "port": 5335
           }
         }
       ]
     }
     ```
   - Если вы используете nginx, потребуется использовать такие модули, как `nginx-module-naxsi` или специфические модули для DoH, чтобы обрабатывать объединение HTTP-запросов с DNS.

4. **Клиентская конфигурация**: На клиентском устройстве вы можете настроить DNS-запросы, указывая в качестве DNS-сервера ваш сервер (например, `111.11.11.11:443`). Если вы настроили DoH, убедитесь, что клиент поддерживает его (например, в браузерах существует возможность настроить DoH).

### Основные вопросы:
- **Стоит ли связывать Pi-hole с xray?**: Если всё настроено правильно, то вам не обязательно связывать их. Вы можете просто использовать Pi-hole в качестве локального DNS-прокси и настроить его на клиентах. Если вы хотите повысить безопасность и конфиденциальность, настройка DoH через xray позволит вам шифровать DNS-запросы.

- **Безопасность Pi-hole**: Если Pi-hole работает на внешнем IP-адресе, это может быть небезопасно. Настройте его так, чтобы он слушал только на localhost, а DoH-сервер (xray или nginx) уже обрабатывал внешние запросы. Это предотвратит прямые DNS-з
Так можно же поднять не Pihole, а AdGuadHome, на нем настроить DoH (нужен собственный домен), и на этом же сервере поднять X-ray. У меня так и сделано. Ну, или на разных серверах, если их есть.
Похожие вопросы