Thursday, August 16, 2012

bind $TTL

SkyHi @ Thursday, August 16, 2012

The $TTL directive is defined in RFC 2308.
TTL in the DNS context defines the duration in seconds that the record may be cached. Zero indicates the record should not be cached. Note: RFC 1912 cautions that 0 = no caching is not widely implemented so make no assumptions.
The default TTL for the zone is defined in BIND9 by the $TTL directive which must appear at the beginning of the zone file i.e. before any RR to which it will apply. This $TTL is used for any Resource Record which does not explicitly set the 'ttl' field.
The TTL field is defined to be an unsigned 32 bit value with a valid range from 0 to 2147483647 (clarified in RFC 2181) - which is a long time! - somewhere on the other side of 68 years.
The $TTL field may take any time value.
In BIND 8 the SOA record (minimum parameter) was used to define the zone default TTL value. In BIND 9 the SOA 'minimum' parameter is used as the negative (NXDOMAIN) caching time (defined in RFC 2308).
RFC 1912 recommends that the $TTL value be set to 1 day or longer and that certain RRs which rarely change, such as the MX records for the domain, use an explicit TTL value to set even longer values such as 2 to 3 weeks. The value of this field is a balance between how frequently you think the DNS records will change vs load on the DNS server. In the example below the $TTL value of 2d (2 days) indicates that any change may not be fully propagated for 48 hours, equally caching DNS servers will require to re-read the RRs from your DNS every 48 hours which can be a non-trivial load. Many users will set this value to say 2w (2 weeks) in normal operation then prior to planned changes will reduce the value to say 1d or 12h, until the change has stabilized then restore the value to 2w.


; zone file fragment 
$TTL 2d ; zone default
      3w   IN      MX  10  ; overrides default     
joe   3h   IN      A  ; overrides default     
www        IN      A  ; uses zone default = 2 days

BIND Time formats

BIND allows a number of time formats in combinations. Formats allowed are (case insensitive):
  • #s = seconds = # x 1 seconds (really!)
  • #m = minutes = # x 60 seconds
  • #h = hours = # x 3600 seconds
  • #d = day = # x 86400 seconds
  • #w = week = # x 604800 seconds


; zone file fragment
; common origin (@) format
@           IN      SOA (
               2003080800 ; serial number
               10800s     ; refresh =  3 hours
               15M        ; update retry = 15 minutes
               3W12h      ; expiry = 3 weeks + 12 hours
               2h20M      ; minimum = 2 hours + 20 minutes
www 12H15m  IN     A ; A record TTL value