Skip to content

TTL=0 responses are cached and rewritten to cache_ttl_min #490

@hengwu0

Description

@hengwu0

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.
    l.Debug("ttl calculated to be 0; not caching")
  • 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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions