AdguardTeam / AdguardTeam/dnsproxy

TTL=0 responses are cached and rewritten to cache_ttl_min

Open
#490 0 comments 0 reactions 0 assignees View on GitHub
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.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.