diff options
| author | Shulhan <ms@kilabit.info> | 2026-02-03 03:58:01 +0700 |
|---|---|---|
| committer | Shulhan <ms@kilabit.info> | 2026-02-03 03:59:04 +0700 |
| commit | d30b17c4db1392c19b11c3af7a47051f8dd6568a (patch) | |
| tree | 4b3f0ec995c60203261269f883a48097138b855c /rescached.go | |
| parent | 58678a935adbf324c4a36dbddcc286f6a6f4f655 (diff) | |
| download | rescached-d30b17c4db1392c19b11c3af7a47051f8dd6568a.tar.xz | |
all: add option to set minimum TTL
In the rescached.cfg, we add option where user can force the minimum
TTL in the DNS answer.
This option is not a standard and not recommended used in public
facing network.
It should be used only for personal and private network.
Diffstat (limited to 'rescached.go')
| -rw-r--r-- | rescached.go | 24 |
1 files changed, 23 insertions, 1 deletions
diff --git a/rescached.go b/rescached.go index 0fb23a5..0e6edfb 100644 --- a/rescached.go +++ b/rescached.go @@ -18,7 +18,7 @@ import ( ) // Version of program, overwritten by build. -var Version = `4.4.4` +var Version = `4.5.0` // Debug level, set by configuration as "rescached::debug". var Debug int @@ -51,6 +51,8 @@ func New(env *Environment) (srv *Server, err error) { return nil, err } + srv.initHooks() + return srv, nil } @@ -237,3 +239,23 @@ func (srv *Server) watchResolvConf() { srv.dns.RestartForwarders(srv.env.NameServers) } } + +func (srv *Server) initHooks() { + if srv.env.MinimumTTL > 0 { + srv.env.ServerOptions.OnAnswerReceived = srv.onAnswerReceived + } +} + +func (srv *Server) onAnswerReceived(answer *dns.Answer) { + var isLower bool + for x := range len(answer.Message.Answer) { + if answer.Message.Answer[x].TTL < srv.env.MinimumTTL { + isLower = true + break + } + } + if isLower { + answer.Message.SetTTL(srv.env.MinimumTTL) + answer.TTL = srv.env.MinimumTTL + } +} |
