AdguardTeam / AdGuardHome

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

no "CLIENT-SUBNET" in "OPT pseudosection", result in broken ECS support when using AGH as upstream #7429

Open baraja opened 1 week ago

baraja commented 1 week ago

Prerequisites

The problem

query from AGH with custom subnet: dig IN A @dns.mydns.com www.google.com +subnet=3.80.0.0/24 -p5353

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 1232
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:

while query from unbound with the same subnet info (unbound is on the same machine with different port): dig IN A @dns.mydns.com www.google.com +subnet=3.80.0.0/24 -p53

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; CLIENT-SUBNET: 3.80.0.0/24/12
;; QUESTION SECTION:
;www.google.com.                        IN      A

;; ANSWER SECTION:

without the "CLIENT-SUBNET" part, AGH can't handle ECS cache correctly just as described here https://github.com/AdguardTeam/AdGuardHome/issues/5757#issuecomment-1525560081 that is said, i can't use another AGH as my AGH's upstream, which will result in broken ECS function

Proposed solution

there is "CLIENT-SUBNET" part in "OPT pseudosection", which will be telling the downstream AGH to cache ECS correctly

Alternatives considered and additional information

No response

miladtempaccount commented 23 hours ago

can you please tell me if we can modify the code to send /32 instead of /24 to the upstream server ? I need to know where can I modify the source code to achieve that

baraja commented 6 hours ago

can you please tell me if we can modify the code to send /32 instead of /24 to the upstream server ? I need to know where can I modify the source code to achieve that

i'm not sure, but it looks like adguard public/private dns (adguard-dns.io) is working as expected, the ECS function is more perfect than AGH. i guess AGH should have the same behavior when handling ECS requests from clients according to 7.2.2

If the client query did include the option, the server MUST include one in its response, especially as it could be talking to a Forwarding Resolver, which would need the information for its own caching.