Open apnagaev opened 2 years ago
@apnagaev, hello and thanks for the report. Could you please clarify some points:
Could you also provide some examples of queries that are preformed but shouldn't along with the appropriate entries from query log?
thanks for answer!
It is from external:
But in version v0.106.3 for internal request adguard gived internal dns-record and for external request - external record.
It is client profile:
I drawed schem, may be it will be useful.
(Вижу, у вас интерфейс на русском, так что, если можно, давайте на нём.)
@apnagaev, спасибо за подробный ответ и схему! Если я правильно понял, 10.255.255.2
— это ваш приватный DNS-сервер? В версиях до v0.107.0 функционал кастомных апстримов для клиентов с ClientID не работал, а в v0.107.0 мы его починили, см #3186. Как я вижу, у вашего клиента есть ClientID и кастомный апстрим, поэтому все запросы от него теперь корректно перенаправляются на приватный апстрим.
Если вам для клиента ap_ph
совсем не нужны ответы от приватного DNS-сервера, то просто исключите его адрес из настроек клиента. Если вам нужны, например, только для домена my.local
, то замените список апстримов на что-то типа:
[/my.local/]10.255.255.2
1.1.1.1
думал здесь принято на английском) на русском будет продуктивнее, спасибо!
Ваш вариант был одним из первых, которыми я пытался самостоятельно решить проблему) но так не подойдет. Клиент ap_ph должен получать внешнюю запись при обращении через мобильную сеть и внутреннюю при обращении через WiFi, домен mydomain.ru маршрутизируемый и ресурс cloud.mydomain.ru внутри периметра имеет адрес 10.255.x.x, а за пределами периметра 83.x.x.x. Если я применю конфиг таким образом, то на любое обращение к mydomain.ru будет отдавать внутренний адрес, даже если я за пределами периметра. Не знаю почему в 106 все работало правильно, но работало, у меня в докере обе версии и этот кейс легко повторяется. На ум приходит какойто параметр который бы менял апстрим дополнительно в зависимости от реального ip клиента.
В настоящее время такое можно сделать либо через правила $dnsrewrite
:
||cloud.mydomain.ru^$client=10.255.255.123,dnsrewrite=NOERROR;A;10.255.254.1
Где 10.255.255.123
— IP-адрес клиента ap_ph
. Либо сделав двух клиентов, ap_ph_external
и ap_ph_internal
, расставив им соотв. апстримы.
Разные апстримы для ap_ph_external и ap_ph_internal решило бы вопрос, но это один клиент, просто дома подключается к wifi, а за пределами, соответственно, другие сети. в этом случае придется переписывать профиль DoT в настройках телефона при каждом переключении сети, что не очень удобно.
Вариант с $dnsrewrite возможен, но тоже не идеален, т.к. кроме cloud.mydomain.ru в сети есть еще достаточно большое количество ресурсов, которые также резолвятся по разному снаружи и внутри. придется по сути повторить все записи внутреннего dns на adguard. было бы здорово если бы появился параметр вроде:
||*.mydomain.ru^$client=10.255.0.0/16,dnsserver=10.255.123.123
Пока у меня позникает только желание развернуть еще один контейнер, перед ними поставить haproxy и завернуть запросы с внутренних адресов на "внутренний" adguard, а с внешних на "внешний", но тогда статистика будет не централизованной, да и вцелом такое решение кажется избыточным
Модификатор client
(как и настройки перманентных клиентов) поддерживает CIDR, так что вы могли бы сделать что-то типа:
||site1.mydomain.ru^$client=10.255.0.0/16,dnsrewrite=NOERROR;A;10.255.254.1
||site2.mydomain.com^$client=10.255.0.0/16,dnsrewrite=NOERROR;A;10.255.254.2
||site3.mydomain.local^$client=10.255.0.0/16,dnsrewrite=NOERROR;A;10.255.254.3
…
То есть, создание DNS-зоны для клиентов в подсети. По сути заменяя ваш приватный DNS-сервер на AGH. Более того, правила $dnsrewrite
будут работать и с фильтрлистами, так что вы можете добавить список со всеми IP приватных сервисов в таком виде в качестве списка на странице «Фильтры → Чёрные списки DNS».
По-другому сейчас сделать будет сложно, так как тут переплетаются идентификация клиента по подсети/IP-адресу, идентификация по ClientID, а также кастомные апстримы для доменов. Мы рассмотрим другие варианты на след. неделе.
Если что-то подобное реализовать получится или будет в плане, то пока буду сидеть на версии 106.3, т.к. ресурсов внутри достаточно много. Если возьмёте в работу, буду внимательно следить и с нетерпением ждать))
пока новостей нет?
@apnagaev, в ближайшее время подобная фича вряд ли будет реализована. Модель с двумя разными клиентами пока остаётся главным вариантом решения подобных задач.
Понял, спасибо. А внешняя СУБД для логов не планируется? чтобы хотябы статистику в одном месте собирать
Зависит от вашего определения «внешней». Рекомендую подписаться на этот тикет: #2290. Мы в любом случае хотим сделать какой-то дружественный к обработке формат.
Hi! My AdGuard Home version is v0.107 It is docker container in virtual machine vith Ubuntu 20.04, intel x64 I have Inernal Domain (microsoft) DNS-server and AdGuard Home. All internal clients request dns from adguard and adguard request dns from ms dns-server (for domain compatibility) for internal clients. For part of device I use DoH and DoT. Some devices (mobile phones) can request dns from adguard from internal network and from internet (I use DoT, but this issue will be repeat and with dns:53). This device must resolve dns from internal with internal ip and from external with external ip. For this device I use upstrim with inernal dns-server. In version v0.106.3 it worked correctly. From internet resolved external ip, from internal network - internal ip. In v0.107 it is not work. Device use DoT and have one clientid in both network. It is resolve internal dns from internal and external networks, so if I add internal upstrim, I can't use adguard over internet and if I add external upstrim, I can't use adguard in internal network. Can you check it and help with issue? Thanks in advance