Add cache_neg_min_ttl and cache_neg_max_ttl
This commit is contained in:
parent
0f349c793e
commit
b1447160a0
|
@ -33,6 +33,8 @@ type Config struct {
|
||||||
Cache bool
|
Cache bool
|
||||||
CacheSize int `toml:"cache_size"`
|
CacheSize int `toml:"cache_size"`
|
||||||
CacheNegTTL uint32 `toml:"cache_neg_ttl"`
|
CacheNegTTL uint32 `toml:"cache_neg_ttl"`
|
||||||
|
CacheNegMinTTL uint32 `toml:"cache_neg_min_ttl"`
|
||||||
|
CacheNegMaxTTL uint32 `toml:"cache_neg_max_ttl"`
|
||||||
CacheMinTTL uint32 `toml:"cache_min_ttl"`
|
CacheMinTTL uint32 `toml:"cache_min_ttl"`
|
||||||
CacheMaxTTL uint32 `toml:"cache_max_ttl"`
|
CacheMaxTTL uint32 `toml:"cache_max_ttl"`
|
||||||
QueryLog QueryLogConfig `toml:"query_log"`
|
QueryLog QueryLogConfig `toml:"query_log"`
|
||||||
|
@ -73,7 +75,9 @@ func newConfig() Config {
|
||||||
EphemeralKeys: false,
|
EphemeralKeys: false,
|
||||||
Cache: true,
|
Cache: true,
|
||||||
CacheSize: 512,
|
CacheSize: 512,
|
||||||
CacheNegTTL: 60,
|
CacheNegTTL: 0,
|
||||||
|
CacheNegMinTTL: 60,
|
||||||
|
CacheNegMaxTTL: 600,
|
||||||
CacheMinTTL: 60,
|
CacheMinTTL: 60,
|
||||||
CacheMaxTTL: 8600,
|
CacheMaxTTL: 8600,
|
||||||
SourceRequireNoLog: true,
|
SourceRequireNoLog: true,
|
||||||
|
@ -265,7 +269,15 @@ func ConfigLoad(proxy *Proxy, svcFlag *string) error {
|
||||||
proxy.pluginBlockIPv6 = config.BlockIPv6
|
proxy.pluginBlockIPv6 = config.BlockIPv6
|
||||||
proxy.cache = config.Cache
|
proxy.cache = config.Cache
|
||||||
proxy.cacheSize = config.CacheSize
|
proxy.cacheSize = config.CacheSize
|
||||||
proxy.cacheNegTTL = config.CacheNegTTL
|
|
||||||
|
if config.CacheNegTTL > 0 {
|
||||||
|
proxy.cacheNegMinTTL = config.CacheNegTTL
|
||||||
|
proxy.cacheNegMaxTTL = config.CacheNegTTL
|
||||||
|
} else {
|
||||||
|
proxy.cacheNegMinTTL = config.CacheNegMinTTL
|
||||||
|
proxy.cacheNegMaxTTL = config.CacheNegMaxTTL
|
||||||
|
}
|
||||||
|
|
||||||
proxy.cacheMinTTL = config.CacheMinTTL
|
proxy.cacheMinTTL = config.CacheMinTTL
|
||||||
proxy.cacheMaxTTL = config.CacheMaxTTL
|
proxy.cacheMaxTTL = config.CacheMaxTTL
|
||||||
|
|
||||||
|
|
|
@ -71,18 +71,37 @@ func StripTrailingDot(str string) string {
|
||||||
return str
|
return str
|
||||||
}
|
}
|
||||||
|
|
||||||
func getMinTTL(msg *dns.Msg, minTTL uint32, maxTTL uint32, negCacheMinTTL uint32) time.Duration {
|
func getMinTTL(msg *dns.Msg, minTTL uint32, maxTTL uint32, cacheNegMinTTL uint32, cacheNegMaxTTL uint32) time.Duration {
|
||||||
if msg.Rcode != dns.RcodeSuccess || len(msg.Answer) <= 0 {
|
if (msg.Rcode != dns.RcodeSuccess && msg.Rcode != dns.RcodeNameError) || (len(msg.Answer) <= 0 && len(msg.Ns) <= 0) {
|
||||||
return time.Duration(negCacheMinTTL) * time.Second
|
return time.Duration(cacheNegMinTTL) * time.Second
|
||||||
}
|
}
|
||||||
ttl := uint32(maxTTL)
|
var ttl uint32
|
||||||
for _, rr := range msg.Answer {
|
if msg.Rcode == dns.RcodeSuccess {
|
||||||
if rr.Header().Ttl < ttl {
|
ttl = uint32(maxTTL)
|
||||||
ttl = rr.Header().Ttl
|
} else {
|
||||||
|
ttl = uint32(cacheNegMaxTTL)
|
||||||
|
}
|
||||||
|
if len(msg.Answer) > 0 {
|
||||||
|
for _, rr := range msg.Answer {
|
||||||
|
if rr.Header().Ttl < ttl {
|
||||||
|
ttl = rr.Header().Ttl
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for _, rr := range msg.Ns {
|
||||||
|
if rr.Header().Ttl < ttl {
|
||||||
|
ttl = rr.Header().Ttl
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if ttl < minTTL {
|
if msg.Rcode == dns.RcodeSuccess {
|
||||||
ttl = minTTL
|
if ttl < minTTL {
|
||||||
|
ttl = minTTL
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
if ttl < cacheNegMinTTL {
|
||||||
|
ttl = cacheNegMinTTL
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return time.Duration(ttl) * time.Second
|
return time.Duration(ttl) * time.Second
|
||||||
}
|
}
|
||||||
|
|
|
@ -238,9 +238,14 @@ cache_min_ttl = 600
|
||||||
cache_max_ttl = 86400
|
cache_max_ttl = 86400
|
||||||
|
|
||||||
|
|
||||||
## TTL for negatively cached entries
|
## Minimum TTL for negatively cached entries
|
||||||
|
|
||||||
cache_neg_ttl = 60
|
cache_neg_min_ttl = 60
|
||||||
|
|
||||||
|
|
||||||
|
## Maximum TTL for negatively cached entries
|
||||||
|
|
||||||
|
cache_neg_max_ttl = 600
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ func (plugin *PluginCacheResponse) Eval(pluginsState *PluginsState, msg *dns.Msg
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
ttl := getMinTTL(msg, pluginsState.cacheMinTTL, pluginsState.cacheMaxTTL, pluginsState.cacheNegTTL)
|
ttl := getMinTTL(msg, pluginsState.cacheMinTTL, pluginsState.cacheMaxTTL, pluginsState.cacheNegMinTTL, pluginsState.cacheNegMaxTTL)
|
||||||
cachedResponse := CachedResponse{
|
cachedResponse := CachedResponse{
|
||||||
expiration: time.Now().Add(ttl),
|
expiration: time.Now().Add(ttl),
|
||||||
msg: *msg,
|
msg: *msg,
|
||||||
|
|
|
@ -35,7 +35,8 @@ type PluginsState struct {
|
||||||
synthResponse *dns.Msg
|
synthResponse *dns.Msg
|
||||||
dnssec bool
|
dnssec bool
|
||||||
cacheSize int
|
cacheSize int
|
||||||
cacheNegTTL uint32
|
cacheNegMinTTL uint32
|
||||||
|
cacheNegMaxTTL uint32
|
||||||
cacheMinTTL uint32
|
cacheMinTTL uint32
|
||||||
cacheMaxTTL uint32
|
cacheMaxTTL uint32
|
||||||
}
|
}
|
||||||
|
@ -107,7 +108,8 @@ func NewPluginsState(proxy *Proxy, clientProto string, clientAddr *net.Addr) Plu
|
||||||
clientProto: clientProto,
|
clientProto: clientProto,
|
||||||
clientAddr: clientAddr,
|
clientAddr: clientAddr,
|
||||||
cacheSize: proxy.cacheSize,
|
cacheSize: proxy.cacheSize,
|
||||||
cacheNegTTL: proxy.cacheNegTTL,
|
cacheNegMinTTL: proxy.cacheNegMinTTL,
|
||||||
|
cacheNegMaxTTL: proxy.cacheNegMaxTTL,
|
||||||
cacheMinTTL: proxy.cacheMinTTL,
|
cacheMinTTL: proxy.cacheMinTTL,
|
||||||
cacheMaxTTL: proxy.cacheMaxTTL,
|
cacheMaxTTL: proxy.cacheMaxTTL,
|
||||||
}
|
}
|
||||||
|
|
|
@ -30,7 +30,8 @@ type Proxy struct {
|
||||||
pluginBlockIPv6 bool
|
pluginBlockIPv6 bool
|
||||||
cache bool
|
cache bool
|
||||||
cacheSize int
|
cacheSize int
|
||||||
cacheNegTTL uint32
|
cacheNegMinTTL uint32
|
||||||
|
cacheNegMaxTTL uint32
|
||||||
cacheMinTTL uint32
|
cacheMinTTL uint32
|
||||||
cacheMaxTTL uint32
|
cacheMaxTTL uint32
|
||||||
queryLogFile string
|
queryLogFile string
|
||||||
|
|
Loading…
Reference in New Issue