cache-max-ttl

Petr Špaček petr.spacek at nic.cz
Tue Dec 11 08:43:56 UTC 2018


On 10. 12. 18 16:38, Gavin McCullagh via Unbound-users wrote:
> Hi,
> 
> I don't think this change is harmless.  Both described behaviours are
> useful, depending on the context.  
> 
> Downstream forwarding resolvers who forward through an upstream
> recursive resolver do not always appreciate the paternalistic behaviour
> of their upstream lowering ttls for them, which can cause lowered
> performance and increased costs.  And lots of support tickets.
> 
> Where the upstream recursive resolver is unbound, the existing behaviour
> is useful to just limit how long the upstream caches for without
> impacting on how long the downstream can cache for.  If the downstream
> wants to set cache-max-ttl also, that is their prerogative, but it is
> not forced on them by the upstream.

I think this is incorrect oversimplification. The original behavior
makes sense only if there is *exactly one* resolver forwarding to
Unbound and nothing else.

The original behavior gets pretty confusing in all other cases, e.g.:
Multiple resolvers forwarding to the same Unbound instance. In this case
an instance which asked first will see higher TTL than all other instances.

>From my perspective it makes more sense to modify TTL in all cases as
propsed in this patch, it is at least consistent.

Petr Špaček  @  CZ.NIC

> 
> Ideally, I would suggest offering both behaviours with different config
> options.
> 
> Gavin
> 
> 
> 
> On Mon, Dec 3, 2018, 6:53 AM Wouter Wijngaards via Unbound-users
> <unbound-users at nlnetlabs.nl <mailto:unbound-users at nlnetlabs.nl> wrote:
> 
>     Hi,
> 
>     Ok, I have fixed it like this patch says.
> 
>     The suggested patch contains an if-statement too many.
>     Fixed patch:
> 
>     Index: util/data/msgreply.c
>     ===================================================================
>     --- util/data/msgreply.c        (revision 5006)
>     +++ util/data/msgreply.c        (working copy)
>     @@ -195,6 +195,8 @@
>             }
>             if(*rr_ttl < MIN_TTL)
>                     *rr_ttl = MIN_TTL;
>     +       if(*rr_ttl > MAX_TTL)
>     +               *rr_ttl = MAX_TTL;
>             if(*rr_ttl < data->ttl)
>                     data->ttl = *rr_ttl;
> 
> 
>     Best regards, Wouter
> 
>     On 12/1/18 9:30 PM, Eric Luehrsen via Unbound-users wrote:
>     > this (new patch) appears to be the right behavior. you dont want each
>     > client or intermedary to also set max TTL. 
>     >
>     > maybe your business internal DNS (file and print servers) is
>     static for
>     > 7+ days, your DHCP server publishes 10 minutes for mobile devices, but
>     > you want your gateway/DNS appliance to force 4-8 hour refresh of
>     global
>     > internet resources.
>     >
>     > - Eric
>     >
>     > On Sat, Dec 1, 2018, 11:59 AM Paul Wouters via Unbound-users
>     > <unbound-users at nlnetlabs.nl <mailto:unbound-users at nlnetlabs.nl>
>     <mailto:unbound-users at nlnetlabs.nl
>     <mailto:unbound-users at nlnetlabs.nl>> wrote:
>     >
>     >     Your suggestion seems to be what I would expect unbound to do.
>     >
>     >     Paul
>     >
>     >     Sent from mobile device
>     >
>     >     > On Dec 1, 2018, at 11:12, Daisuke HIGASHI via Unbound-users
>     >     <unbound-users at nlnetlabs.nl
>     <mailto:unbound-users at nlnetlabs.nl>
>     <mailto:unbound-users at nlnetlabs.nl
>     <mailto:unbound-users at nlnetlabs.nl>>> wrote:
>     >     >
>     >     > Hi,
>     >     >
>     >     >   cache-max-ttl option defines upper-bound of RRsets TTL
>     >     > but initial TTL value _shown_ by Unbound’s response is original
>     >     TTL e.g.:
>     >     >
>     >     > original TTL: 86400
>     >     > cache-max-ttl: 300
>     >     >
>     >     >  1. TTL value just after RRsets cached: 86400
>     >     >  2. TTL value after 100 seconds: 86300
>     >     >  3. TTL value after 299 seconds: 86101
>     >     >  4. TTL value after 300 seconds: (expired)
>     >     >
>     >     >  This is documented behavior, but problematic if there is
>     caching
>     >     DNS proxy
>     >     > (e.g. home router) between Unbound and client — The DNS
>     proxy will
>     >     cache
>     >     > RRsets with large (86400) TTL and hold them long time
>     regardless of
>     >     > cache-max-ttl.
>     >     >
>     >     >  I think that Unbound's implementation should be changed so that
>     >     > cache-max-ttl defines also upper-bound of initial TTL shown
>     >     > by Unbound's response just like:
>     >     >
>     >     >  1. TTL value just after RRsets cached: 300
>     >     >  2. TTL value after 100 seconds: 200
>     >     >  3. TTL value after 299 seconds: 1
>     >     >  4. TTL value after 300 seconds: (expired)
>     >     >
>     >     > A quick hack patch attached.
>     >     > Is it useful? And is it harmless to existing Unbound
>     deployments?
>     >     >
>     >     > Regards,
>     >     > --
>     >     > Daisuke HIGASHI
>     >     > <min-ttl.patch>
>



More information about the Unbound-users mailing list