mirror of
https://github.com/safing/portmaster
synced 2025-09-02 02:29:12 +00:00
Fix and improve TTL handling
This commit is contained in:
parent
813346e829
commit
8dea8e6c46
4 changed files with 15 additions and 6 deletions
|
@ -45,6 +45,12 @@ var (
|
||||||
ErrNoCompliance = fmt.Errorf("%w: no compliant resolvers for this query", ErrBlocked)
|
ErrNoCompliance = fmt.Errorf("%w: no compliant resolvers for this query", ErrBlocked)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
minTTL = 60 // 1 Minute
|
||||||
|
minMDnsTTL = 60 // 1 Minute
|
||||||
|
maxTTL = 24 * 60 * 60 // 24 hours
|
||||||
|
)
|
||||||
|
|
||||||
// BlockedUpstreamError is returned when a DNS request
|
// BlockedUpstreamError is returned when a DNS request
|
||||||
// has been blocked by the upstream server.
|
// has been blocked by the upstream server.
|
||||||
type BlockedUpstreamError struct {
|
type BlockedUpstreamError struct {
|
||||||
|
@ -326,7 +332,7 @@ resolveLoop:
|
||||||
// cache if enabled
|
// cache if enabled
|
||||||
if !q.NoCaching {
|
if !q.NoCaching {
|
||||||
// persist to database
|
// persist to database
|
||||||
rrCache.Clean(600)
|
rrCache.Clean(minTTL)
|
||||||
err = rrCache.Save()
|
err = rrCache.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf("resolver: failed to cache RR for %s%s: %s", q.FQDN, q.QType.String(), err)
|
log.Warningf("resolver: failed to cache RR for %s%s: %s", q.FQDN, q.QType.String(), err)
|
||||||
|
|
|
@ -276,7 +276,7 @@ func handleMDNSMessages(ctx context.Context, messages chan *dns.Msg) error {
|
||||||
|
|
||||||
var questionID string
|
var questionID string
|
||||||
if saveFullRequest {
|
if saveFullRequest {
|
||||||
rrCache.Clean(60)
|
rrCache.Clean(minMDnsTTL)
|
||||||
err := rrCache.Save()
|
err := rrCache.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf("resolver: failed to cache RR %s: %s", rrCache.Domain, err)
|
log.Warningf("resolver: failed to cache RR %s: %s", rrCache.Domain, err)
|
||||||
|
@ -304,7 +304,7 @@ func handleMDNSMessages(ctx context.Context, messages chan *dns.Msg) error {
|
||||||
Server: mDNSResolver.Server,
|
Server: mDNSResolver.Server,
|
||||||
ServerScope: mDNSResolver.ServerIPScope,
|
ServerScope: mDNSResolver.ServerIPScope,
|
||||||
}
|
}
|
||||||
rrCache.Clean(60)
|
rrCache.Clean(minMDnsTTL)
|
||||||
err := rrCache.Save()
|
err := rrCache.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf("resolver: failed to cache RR %s: %s", rrCache.Domain, err)
|
log.Warningf("resolver: failed to cache RR %s: %s", rrCache.Domain, err)
|
||||||
|
|
|
@ -419,7 +419,7 @@ func (mgr *tcpResolverConnMgr) handleQueryResponse(conn *dns.Conn, msg *dns.Msg)
|
||||||
|
|
||||||
// persist to database
|
// persist to database
|
||||||
rrCache := inFlight.MakeCacheRecord(msg)
|
rrCache := inFlight.MakeCacheRecord(msg)
|
||||||
rrCache.Clean(600)
|
rrCache.Clean(minTTL)
|
||||||
err := rrCache.Save()
|
err := rrCache.Save()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Warningf(
|
log.Warningf(
|
||||||
|
|
|
@ -72,9 +72,12 @@ func (rrCache *RRCache) Clean(minExpires uint32) {
|
||||||
header.Ttl = 17
|
header.Ttl = 17
|
||||||
}
|
}
|
||||||
|
|
||||||
// TTL must be at least minExpires
|
// TTL range limits
|
||||||
if lowestTTL < minExpires {
|
switch {
|
||||||
|
case lowestTTL < minExpires:
|
||||||
lowestTTL = minExpires
|
lowestTTL = minExpires
|
||||||
|
case lowestTTL > maxTTL:
|
||||||
|
lowestTTL = maxTTL
|
||||||
}
|
}
|
||||||
|
|
||||||
// shorten caching
|
// shorten caching
|
||||||
|
|
Loading…
Add table
Reference in a new issue