AdguardTeam / AdGuardHome

Network-wide ads & trackers blocking DNS server
https://adguard.com/adguard-home/overview.html
GNU General Public License v3.0
25.74k stars 1.85k forks source link

Personal DNS server become unreacheable in a couple of days after start but local keeps working #3673

Closed NoAdO closed 3 years ago

NoAdO commented 3 years ago

Version of AdGuard Home server: v0.106.3 How did you install AdGuard Home: Docker run at Synology NAS How did you setup DNS configuration: inside web UI CPU architecture: Intel Celeron J3455, Apollolake Operating system and version: Synology DSM 7.0

Expected Behavior I expect AdGuard Home server to be aviable to Android phone as a personal (private) DNS all the time it's up and working

Actual Behavior After some uptime (a couple of days) Adroid phone starts to tell me that Personal (private) DNS server is unreacheable. I can't write exact error text cause my phone is in Russian language. AgHome keeps working for local network devices. Restarting container fixes the problem.

How can i collect logs to investigate the problem?

ainar-g commented 3 years ago

Сообщение можно и по-русски. Будет лучше, чем ничего :slightly_smiling_face:.

У нас в цикле разработки v0.107.0 было несколько похожих проблем. Можете попробовать обновиться до последней беты и посмотреть, воспроизводится ли эта ситуация?

NoAdO commented 3 years ago

Для меня не имеет значения, русский или английский. Если удобней английский - будет английский. Выбрал канал adguard/adguardhome:beta (13 дней назад) - v0.107.0-b.11 . Есть ещё edge - не понял разницу, видимо совсем нестабильные билды. Контейнер стартовал ОК, буду наблюдать, проблема обычно проявляется через несколько дней.

ainar-g commented 3 years ago

Всё верно, edge — это ежедневные сборки, в то время как beta — более стабильные.

NoAdO commented 3 years ago

Боюсь пока не смогу продолжать тестирование - отключал вчера персональный DNS на телефоне по не зависящим от тикета причинам (контейнер не отключал), сегодня решил включить обратно - и он не включился. ВПН домой тоже не включился из-за Let's Encrypt и окончания их корня. Перевыпустил основной серт (он участвует и в ВПН и для Ag Home), в UI Adguard Home его обновил, другая конфигурация не менялась - только серт на актуальный. Всё, телефон пишет "ошибка подключения", как из него добыть подробностей я не знаю, чем ещё можно тестить DoT тоже не знаю, соответственно и на чьей стороне проблема - тоже не знаю. Попробовал обновить до v0.107.0-b.12 - то же самое. UI считает цепочку и приватный ключ валидными. Что дальше - хз, но гитхаб вроде как не техподдержка. Буду думать.

P.S. Имеется второй телефон, на котором не отключался персональный DNS, тоже настроен на DoT на этот же сервер. Утром всё было ОК, потом человек был занят на работе, после работы было обнаружено что "всё кроме телеграм сломалось". Время обнаружения по Москве 17:20, время окончания срока сертов Let's Encrypt - 17:00. Интересно, совпадение ли это или docker образ мб работает со старыми сертами которые истекли?

ainar-g commented 3 years ago

Можете начать тред в обсуждениях. У самого Let's Encrypt, пишут, «Degraded Performance».

NoAdO commented 3 years ago

Верно, там есть упоминание в теме именно о проблемах DoT. Я решил что будет проще потратить 5$ на годовой сертификат чтобы исключить влияние LE на ситуацию, так что сейчас всё ок, персональный DNS снова работает, билд v0.107.0-b.12, продолжаю тест.

NoAdO commented 3 years ago

Не могу подтвердить проблему на v0.107.0-b.12 - пару раз ловил недоступность DNS на мобильнике но переключал на вторую SIM чтобы убедиться что оно действительно есть - и оно снималось. То ли мобильный оператор чудит, то ли телефон, то ли какая-то сессия истекает. Не понять. Можно считать что проблема не воспроизводится.

NoAdO commented 3 years ago

И мы вновь возвращаемся к проблеме. Из симптомов в момент проблемы:

Возможно поможет: на портах 80 и 443 отвечает другой вебсервер. Так из-за того что хост DSM и нет понимания как корректно настроить реверспрокси через его UI.

ainar-g commented 3 years ago

Если на машине с сервером достаточно места, можете включить подробные логи, в которых больше информации для отладки.

NoAdO commented 3 years ago

Ура, я принёс лог. Куда его выслать? Я подрезал 2 блока проблемных ситуаций захватив по несколько минут с крёв и получилось 3Мб данных, включая историю моих ДНС запросов и адреса девайсов локальной сети что не хотелось бы выкладывать публично. Могу выслать на почту или сгенерить временную ссылку.

Записки о том что происходит я делал на ходу ориентируясь на время телефона т.е. может быть разброс по часам но врядли больше чем на минуту.

Ситуация 1: я выхожу из дома с телефоном, телефон отключается от Wi-Fi и переходит на мобильную сеть, оператор Йота. Я иду пешком по улице к остановке трамвая. 17:17 ОС говорит что персональный ДНС сервер недоступен. Первое упоминание Йоты это, похоже, 2021/11/23 17:18:54.987881 но потом видимо IP поменялся. 17:19 перестаю ждать, переключаю мобильный интернет на Билайн. Немножко задержка но подключился т.е. сообщение о недоступности персонального DNS пропало. 17:24 снова пробую Йоту, не сразу но подключился.

работаем. В период 17:30 до 18:40 я передвигался по Москве на трамвае, т.е. вышки несколько раз поменялись, но полных разрывов связи не было.

17:31 - запускаю приложение kate mobile (вконтакте) - долго грузятся сообщения хотя параллельно телеграмм работает т.е. интернет есть. (похоже 2021/11/23 17:32:09.170336 )

В логе смущают вот такие штуки: tls://dot-de.blahdns.com:853: response: Failed to read a request from tls://dot-de.blahdns.com:853, cause: EOF tls://dns.nextdns.io:853: response: Failed to read a request from tls://dns.nextdns.io:853, cause: EOF

Ситуация 2: Есть приложение Пикабу что грузит контент для просмотра с одноимённого сайта. Там есть превью картинок при пролистывании ленты и их полные версии при просмотре на весь экран. У Пикабу куча подсвереров так что превью и полные версии могут быть на разных сервах. 18:00 - Йота, лагает загрузка превью картинок хотя список постов грузится (т.е. основной домен доступен) 18:02 - переход на Билайн, ожидание связи с сервером днс - ошибка про недоступность ДНС остаётся 18:04 - перевключение сервера в настройках, продолжение попыток подключения 18:06 - возврат на Йоту, все ещё нет связи с днс сервером 18:06 - частичный отлаг, телефон сообщает что днс сервер доступен, но превью все ещё не грузятся 18:11 - полные версии картинок грузятся, превью нет, случайные сайты грузятся. Случайные сайты это например floriculture Из интересного в логе в это время: [debug] tls://dns.adguard.com:853: response: Failed to send a request to tls://dns.adguard.com:853, cause: write tcp внутреннийайпиадгуарда:42692->94.140.14.14:853: write: broken pipe хотя этих broken pipe куча по всему логу.

Ситуация 3: 21:59 - открываю yandex.ru ... а он не открывается! Пробую открыть apicaldominance - открывается. Чуть жду, снова пробую Яндекс - открывается. начало этого куска я нашёл в логе по времени 2021/11/23 22:00:36.107714 и там тоже есть The TLS connection is expired due to Failed to read a request from tls://dns.nextdns.io:853, cause: EOF

При этом за всё время работы через домашнюю сеть у меня ни разу не было таких зависаний или проблем, ни на телефоне ни на ПК.

ainar-g commented 3 years ago

Спасибо за информацию! Логи можно выслать на devteam@adguard.com, указав тему “AdGuard Home Issue 3673”.

На первый взгляд, все эти EOF и broken pipe говорят о том, что что-то может резать TCP-соеднинения от AGH к апстримам. Можете попробовать указать DNS-over-QUIC-апстримы, например quic://dns-unfiltered.adguard.com и/или quic://dns.nextdns.io?

NoAdO commented 3 years ago

Да, могу. Текущие upstream: https://dns10.quad9.net/dns-query tls://dot-de.blahdns.com tls://dns.nextdns.io https://doh-de.blahdns.com/dns-query https://dns.adguard.com/dns-query tls://dns.adguard.com И "параллельные запросы". Я полагал что это должно спасать от ситуации когда ни один сервер не возвращает ответ. Я понимаю что я могу получать ошибку и частичную недоступность как при отсутствии связи с моим ДНС так и при проблемах с апстримами, надеюсь лог поможет понять где именно беда. И да, я наблюдал сегодня кратковременную проблему с приложением из "Ситуация 2" при отключенном персональном ДНС, так что возможно это их глючит... но с другой стороны ошибка недоступности ДНС-то была.

Upd. Логи выслал, quic://dns.nextdns.io поставил

NoAdO commented 3 years ago

Нашлось что-то в логах? Увы, добавление quic не решило проблему, вчера опять поймал якобы недоступность персонального DNS, но verbose был выключен так что надо видимо по новой включать и записывать информацию о времени проблемы, если нужны ещё логи.

ainar-g commented 3 years ago

Спасибо за логи! К сожалению, в них мы видим только ещё больше тех же самых EOF и broken pipe. Может ли быть так, что ваш провайдер режет соединения от роутера?

И ещё, я вижу, что сравнительно немного отдаётся из кеша. Вы пробовали увеличить его размер? Возможно, вы попадаете в rate limit самих сервисов.

NoAdO commented 3 years ago

Провайдер может... но дома почему-то проблем не наблюдается. Увеличил размер кеша с 4,19Мб (4194304 байт) до 100Мб. (104857600 байт). Но да, мне тоже было не ясно почему перезапрашиваются некоторые недавно посещенные домены. Какой размер кэша можно считать адекватным?

ainar-g commented 2 years ago

Размер зависит от нагрузки, но думаю, что 16–32 МиБ обычно хватает.

Есть ещё известная проблема, что кэш не работает для клиентов с особыми правилами апстримов. См. AdguardTeam/dnsproxy#169.

NoAdO commented 2 years ago

Хм, интересный момент. Устройство в списке клиентов сохранено, но сохранение имеет вид "локальный IP -> имя". В списке клиентов при работе через мобильный интернет телефон отображается как "client.yota.ru (IP)" то есть адгуард его "не узнаёт". Особых правил апстримов не применено ни к кому.

Нагрузка - около 5 девайсов на 2 человек... не выглядит существенной. Пока повторений проблемы не было.

NoAdO commented 2 years ago

Было повторение проблемы, при чём идентично тому что я описывал выше. Выход из дома - переключение на мобильную сеть - проблема с DNS.

NoAdO commented 2 years ago

Последнее время проблем не было. Видимо увеличение кэша действительно помогло.