From dc78b4ecce6c1171618e1f7f2d5868a808ee0b8b Mon Sep 17 00:00:00 2001 From: Quentin McGaw Date: Mon, 16 Feb 2026 15:27:07 +0000 Subject: [PATCH] fix(dns): skip blocking if block lists download fails --- go.mod | 2 +- go.sum | 4 ++-- internal/dns/run.go | 6 ------ internal/dns/setup.go | 16 ++++++++++------ internal/dns/ticker.go | 4 ++-- internal/dns/update.go | 6 ++---- 6 files changed, 17 insertions(+), 21 deletions(-) diff --git a/go.mod b/go.mod index 748fe135..615f774c 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/klauspost/pgzip v1.2.6 github.com/mdlayher/genetlink v1.3.2 github.com/pelletier/go-toml/v2 v2.2.4 - github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216144148-3f6b7de87740 + github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216151239-36b3306f2205 github.com/qdm12/gosettings v0.4.4 github.com/qdm12/goshutdown v0.3.0 github.com/qdm12/gosplash v0.2.0 diff --git a/go.sum b/go.sum index bb280962..6e5f8372 100644 --- a/go.sum +++ b/go.sum @@ -73,8 +73,8 @@ github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPA github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216144148-3f6b7de87740 h1:MJKaCmBFnmaX9uZUZYHB+kpxF+FRoDBY1Fx8CVaes6I= -github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216144148-3f6b7de87740/go.mod h1:98foWgXJZ+g8gJIuO+fdO+oWpFei5WShMFTeN4Im2lE= +github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216151239-36b3306f2205 h1:0ycKUDQ50cYb2QpeyGcEnvVs9HJmC9jsb/XZNC1z28c= +github.com/qdm12/dns/v2 v2.0.0-rc9.0.20260216151239-36b3306f2205/go.mod h1:98foWgXJZ+g8gJIuO+fdO+oWpFei5WShMFTeN4Im2lE= github.com/qdm12/goservices v0.1.1-0.20251104135713-6bee97bd4978 h1:TRGpCU1l0lNwtogEUSs5U+RFceYxkAJUmrGabno7J5c= github.com/qdm12/goservices v0.1.1-0.20251104135713-6bee97bd4978/go.mod h1:D1Po4CRQLYjccnAR2JsVlN1sBMgQrcNLONbvyuzcdTg= github.com/qdm12/gosettings v0.4.4 h1:SM6tOZDf6k8qbjWU8KWyBF4mWIixfsKCfh9DGRLHlj4= diff --git a/internal/dns/run.go b/internal/dns/run.go index 2fec05a9..0cd9aeb7 100644 --- a/internal/dns/run.go +++ b/internal/dns/run.go @@ -2,7 +2,6 @@ package dns import ( "context" - "errors" "github.com/qdm12/dns/v2/pkg/nameserver" "github.com/qdm12/gluetun/internal/constants" @@ -53,11 +52,6 @@ func (l *Loop) Run(ctx context.Context, done chan<- struct{}) { if ctx.Err() != nil { return } - - if !errors.Is(err, errUpdateBlockLists) { - const fallback = true - l.useUnencryptedDNS(fallback) - } l.logAndWait(ctx, err) settings = l.GetSettings() } diff --git a/internal/dns/setup.go b/internal/dns/setup.go index f93004a7..3f9fe138 100644 --- a/internal/dns/setup.go +++ b/internal/dns/setup.go @@ -2,24 +2,28 @@ package dns import ( "context" - "errors" "fmt" "net/netip" "github.com/qdm12/dns/v2/pkg/check" + "github.com/qdm12/dns/v2/pkg/middlewares/filter/update" "github.com/qdm12/dns/v2/pkg/nameserver" "github.com/qdm12/dns/v2/pkg/server" ) -var errUpdateBlockLists = errors.New("cannot update filter block lists") - func (l *Loop) setupServer(ctx context.Context) (runError <-chan error, err error) { - err = l.updateFiles(ctx) + settings := l.GetSettings() + var updateSettings update.Settings + updateSettings.SetRebindingProtectionExempt(settings.Blacklist.RebindingProtectionExemptHostnames) + err = l.filter.Update(updateSettings) if err != nil { - return nil, fmt.Errorf("%w: %w", errUpdateBlockLists, err) + return nil, fmt.Errorf("updating filter for rebinding protection: %w", err) } - settings := l.GetSettings() + err = l.updateFiles(ctx, settings) + if err != nil { + l.logger.Warn("downloading block lists failed, skipping: " + err.Error()) + } serverSettings, err := buildServerSettings(settings, l.filter, l.localResolvers, l.logger) if err != nil { diff --git a/internal/dns/ticker.go b/internal/dns/ticker.go index 9cc18881..af7bda0b 100644 --- a/internal/dns/ticker.go +++ b/internal/dns/ticker.go @@ -28,12 +28,12 @@ func (l *Loop) RunRestartTicker(ctx context.Context, done chan<- struct{}) { return case <-timer.C: lastTick = l.timeNow() + settings := l.GetSettings() if l.GetStatus() == constants.Running { - if err := l.updateFiles(ctx); err != nil { + if err := l.updateFiles(ctx, settings); err != nil { l.logger.Warn("updating block lists failed, skipping: " + err.Error()) } } - settings := l.GetSettings() timer.Reset(*settings.UpdatePeriod) case <-l.updateTicker: if !timer.Stop() { diff --git a/internal/dns/update.go b/internal/dns/update.go index b22dc32e..6717dfc8 100644 --- a/internal/dns/update.go +++ b/internal/dns/update.go @@ -6,11 +6,10 @@ import ( "github.com/qdm12/dns/v2/pkg/blockbuilder" "github.com/qdm12/dns/v2/pkg/middlewares/filter/update" + "github.com/qdm12/gluetun/internal/configuration/settings" ) -func (l *Loop) updateFiles(ctx context.Context) (err error) { - settings := l.GetSettings() - +func (l *Loop) updateFiles(ctx context.Context, settings settings.DNS) (err error) { l.logger.Info("downloading hostnames and IP block lists") blacklistSettings := settings.Blacklist.ToBlockBuilderSettings(l.client) @@ -37,7 +36,6 @@ func (l *Loop) updateFiles(ctx context.Context) (err error) { IPPrefixes: result.BlockedIPPrefixes, } updateSettings.BlockHostnames(result.BlockedHostnames) - updateSettings.SetRebindingProtectionExempt(settings.Blacklist.RebindingProtectionExemptHostnames) err = l.filter.Update(updateSettings) if err != nil { return fmt.Errorf("updating filter: %w", err)