Всем доброго дня!
Задача:
Обрабатывать DNS запросы с устройств локальной сети с фильтрацией рекламы и трекеров
Обрабатывать DNS запросы с Android-смартфонов в глобальной сети с той же целью
Что сейчас:
Конфиг машины: Есть домен, белый IP, роутер и линукс-сервер под роутером с ограниченным контролем операционки. На линукс-сервере стоит Docker на котором и развёрнут AdGuard Home v0.106.3. Собственно причина наличия докера именно в том что я хотел бы не вмешиваться в систему, вмешательство в которую пользователя не предполагается вообще. Менеджер пакетов сервера про пакет Adguard Home не в курсе а ОС содержит ряд особенностей на которые накладывается моё не особо хорошее знание линукс.
Базовый функционал: Благодаря macvlan докер контейнер находится на отдельном IP хотя как я понял это несколько нестандартное применение докера. Возможно это лишнее, но на хосте порты 80 и 443 заняты другими сервисами. UI успешно доступен по этому IP с другого устройства в локальной сети. Сам инстанс работает корректно, обрабатывает запросы, собирает статистику. Работоспособность DNS сервера без шифрования проверялась как на локальных ПК так и на ПК соединенном через глобальную сеть - тут тоже ОК.
Шифрование: У меня есть ключевая пара (сертификат и закрытый ключ), сертификат выпущен Let's Encrypt, не включает поддомены. При импорте через интерфейс для теста я получаю ошибку "Цепочка сертификатов не валидна" и "Your certificate does not verify: x509: certificate signed by unknown authority" хотя UI принимает сертификат с ключом. Издатель: CN=R3,O=Let's Encrypt,C=US. Сертификат валиден при проверке сервисов хоста. Сертификат валиден, если пробросить порты 80 и 443 на контейнер. То есть предполагается что невалидным его считает только докер-контейнер. Роутер в целом в защиту DNS умеет, но этот функционал не включен т.е. я предполагаю что этот траффик не перехватывается и роутером не обрабатывается.
Проброс портов и что не работает: Порт 853 насколько я понял используется при DNS over TLS так что он проброшен роутер->IP контейнера. Таким же образом проброшен и работающий порт 53. Порты 80 и 443 при этом указывают, напомню, на другой хост. Портчекер сообщает что порт открыт, телнет устанавливает связь. Андроид смартфон при настройке которая кажется корректной сообщает "ошибка подключения" и ломает DNS. Идентичная ошибка будет если указать существующий но заведомо безДНСный хост или несуществующий хост. Если в качестве хоста установить что-то из публичных DoT то всё работает. Поле нельзя заполнять с указанием протокола, директорий или порта - только домен или поддомены.
Вопросы:
1. Почему UI считаеткорень промежуточный недоверенным если корень есть и как можно это исправить в условиях докер-контейнера?
2. Почему Android смартфон пишет на мой адрес "ошибка соединения" и как вообще диагностировать правильно ли работает DoT сервер?
3. Где в UI можно посмотреть попытки достучаться на сервер через DoT?
Upd1. Если зайти в контейнер с sh, в /etc/ssl/certs корневой сертификат от моего домееного сертификата в папке есть. Если же пытаться выполнить импорт экспортированного в винде в base64 корня получаю ошибку WARNING: Skipping duplicate certificate in file ca-cert-x3.cer.pem (при этом имя файла не такое а x3.cer) т.е. и импорт проведён не будет потому что дубль. То есть корень есть, но мой серт невалиден всё равно.
Задача:
Обрабатывать DNS запросы с устройств локальной сети с фильтрацией рекламы и трекеров
Обрабатывать DNS запросы с Android-смартфонов в глобальной сети с той же целью
Что сейчас:
Конфиг машины: Есть домен, белый IP, роутер и линукс-сервер под роутером с ограниченным контролем операционки. На линукс-сервере стоит Docker на котором и развёрнут AdGuard Home v0.106.3. Собственно причина наличия докера именно в том что я хотел бы не вмешиваться в систему, вмешательство в которую пользователя не предполагается вообще. Менеджер пакетов сервера про пакет Adguard Home не в курсе а ОС содержит ряд особенностей на которые накладывается моё не особо хорошее знание линукс.
Базовый функционал: Благодаря macvlan докер контейнер находится на отдельном IP хотя как я понял это несколько нестандартное применение докера. Возможно это лишнее, но на хосте порты 80 и 443 заняты другими сервисами. UI успешно доступен по этому IP с другого устройства в локальной сети. Сам инстанс работает корректно, обрабатывает запросы, собирает статистику. Работоспособность DNS сервера без шифрования проверялась как на локальных ПК так и на ПК соединенном через глобальную сеть - тут тоже ОК.
Шифрование: У меня есть ключевая пара (сертификат и закрытый ключ), сертификат выпущен Let's Encrypt, не включает поддомены. При импорте через интерфейс для теста я получаю ошибку "Цепочка сертификатов не валидна" и "Your certificate does not verify: x509: certificate signed by unknown authority" хотя UI принимает сертификат с ключом. Издатель: CN=R3,O=Let's Encrypt,C=US. Сертификат валиден при проверке сервисов хоста. Сертификат валиден, если пробросить порты 80 и 443 на контейнер. То есть предполагается что невалидным его считает только докер-контейнер. Роутер в целом в защиту DNS умеет, но этот функционал не включен т.е. я предполагаю что этот траффик не перехватывается и роутером не обрабатывается.
Проброс портов и что не работает: Порт 853 насколько я понял используется при DNS over TLS так что он проброшен роутер->IP контейнера. Таким же образом проброшен и работающий порт 53. Порты 80 и 443 при этом указывают, напомню, на другой хост. Портчекер сообщает что порт открыт, телнет устанавливает связь. Андроид смартфон при настройке которая кажется корректной сообщает "ошибка подключения" и ломает DNS. Идентичная ошибка будет если указать существующий но заведомо безДНСный хост или несуществующий хост. Если в качестве хоста установить что-то из публичных DoT то всё работает. Поле нельзя заполнять с указанием протокола, директорий или порта - только домен или поддомены.
Вопросы:
1. Почему UI считает
2. Почему Android смартфон пишет на мой адрес "ошибка соединения" и как вообще диагностировать правильно ли работает DoT сервер?
3. Где в UI можно посмотреть попытки достучаться на сервер через DoT?
Upd1. Если зайти в контейнер с sh, в /etc/ssl/certs корневой сертификат от моего домееного сертификата в папке есть. Если же пытаться выполнить импорт экспортированного в винде в base64 корня получаю ошибку WARNING: Skipping duplicate certificate in file ca-cert-x3.cer.pem (при этом имя файла не такое а x3.cer) т.е. и импорт проведён не будет потому что дубль. То есть корень есть, но мой серт невалиден всё равно.
Last edited: