AdguardTeam / AdGuardHome

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

DNS Rewrites not chaining across multiple rules #7327

Open rhoriguchi opened 1 month ago

rhoriguchi commented 1 month ago

Prerequisites

Platform (OS and CPU architecture)

Linux, AMD64 (aka x86_64)

Installation

Other (please mention in the description)

Setup

On one machine

AdGuard Home version

v0.107.53

Action

When setting up DNS rewrites it rewrites it once but does not check the other rules. So if I have a rule that resolves test1234.com to EXAMPLE_HOSTNAME.local and I have a second rule EXAMPLE_HOSTNAME.local to 192.168.100.100. In the case of test1234.com it will use the upstream .local resolver instead of first checking if there is a rewrite rule for EXAMPLE_HOSTNAME.local.

Expected result

> nslookup test1234.com
Server:         127.0.0.1
Address:        127.0.0.1#53

test1234.com    canonical name = EXAMPLE_HOSTNAME.local.
Name:   EXAMPLE_HOSTNAME.local
Address: 192.168.100.100

> nslookup EXAMPLE_HOSTNAME.local
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   EXAMPLE_HOSTNAME.local
Address: 192.168.100.100

Actual result

> nslookup test1234.com
Server:         127.0.0.1
Address:        127.0.0.1#53

test1234.com    canonical name = EXAMPLE_HOSTNAME.local.
Name:   EXAMPLE_HOSTNAME.local
Address: 192.168.100.65

> nslookup EXAMPLE_HOSTNAME.local
Server:         127.0.0.1
Address:        127.0.0.1#53

Non-authoritative answer:
Name:   EXAMPLE_HOSTNAME.local
Address: 192.168.100.100

Additional information and/or screenshots

Only relevant fields of the config

dns:
  upstream_dns:
  - '[/local/]127.0.0.1:9053'
filtering:
  rewrites:
  - domain: test1234.com
    answer: EXAMPLE_HOSTNAME.local
  - domain: EXAMPLE_HOSTNAME.local
    answer: 192.168.100.100
poolcat4711 commented 13 hours ago

I just discovered the same thing - and a funny, the help says, put an A: in front to keep values from the upstream server