AdguardTeam / AdguardTeam/dnsproxy
TTL=0 responses are cached and rewritten to cache_ttl_min
- Dominant language
- Go
- Stars
- 3.3k
- Forks
- 343
- PR merge metrics
- No merged PRs in 30d
Description
According to RFC 1035, resource records with TTL=0 must not be cached. They may only be used for the current transaction.
However, in my setup AdGuard Home appears to cache upstream responses with TTL=0 and then rewrites the returned TTL to `cache_ttl_min`. This seems incorrect for two reasons:
1. TTL=0 responses should not be cached.
2. Rewriting TTL=0 to `cache_ttl_min` changes the caching semantics defined by RFC 1035.
Expected behavior:
- A response with TTL=0 should not be inserted into cache.
- `cache_ttl_min` should not be applied to TTL=0 responses, unless this behavior is explicitly documented as an intentional standards deviation.
Actual behavior:
- Repeated queries appear to be served from cache.
- The returned TTL is rewritten to the configured `cache_ttl_min` instead of remaining non-cacheable.
Notes:
- RFC 1035 says TTL=0 records "should not be cached".
- Current dnsproxy cache logic also appears to treat computed TTL=0 as non-cacheable. https://github.com/AdguardTeam/dnsproxy/blob/88e87e0705da4d3617524c3da3180b125e003265/proxy/cache.go#L406
- If this behavior is intentional, the documentation for `cache_ttl_min` should explicitly mention that TTL=0 is overridden and cached despite RFC semantics.
Reproduction:
1. Configure an upstream that returns TTL=0 for a test record.
2. Set `cache_ttl_min` to a positive value.
3. Query the same record multiple times through AdGuard Home.
4. Observe whether the second and later responses are served from cache and have TTL rewritten to `cache_ttl_min`.
Contributor guide
No contributing guide indexed for this repository
Assessment
This issue has not been assessed yet.