feat(dns): resolve network-local names (#2970)
This commit is contained in:
@@ -3,6 +3,7 @@ package dns
|
||||
import (
|
||||
"context"
|
||||
"fmt"
|
||||
"net/netip"
|
||||
|
||||
"github.com/qdm12/dns/v2/pkg/doh"
|
||||
"github.com/qdm12/dns/v2/pkg/dot"
|
||||
@@ -10,6 +11,7 @@ import (
|
||||
"github.com/qdm12/dns/v2/pkg/middlewares/cache/lru"
|
||||
filtermiddleware "github.com/qdm12/dns/v2/pkg/middlewares/filter"
|
||||
"github.com/qdm12/dns/v2/pkg/middlewares/filter/mapfilter"
|
||||
"github.com/qdm12/dns/v2/pkg/middlewares/localdns"
|
||||
"github.com/qdm12/dns/v2/pkg/plain"
|
||||
"github.com/qdm12/dns/v2/pkg/provider"
|
||||
"github.com/qdm12/dns/v2/pkg/server"
|
||||
@@ -25,7 +27,8 @@ func (l *Loop) SetSettings(ctx context.Context, settings settings.DNS) (
|
||||
}
|
||||
|
||||
func buildServerSettings(settings settings.DNS,
|
||||
filter *mapfilter.Filter, logger Logger) (
|
||||
filter *mapfilter.Filter, localResolvers []netip.AddrPort,
|
||||
logger Logger) (
|
||||
serverSettings server.Settings, err error,
|
||||
) {
|
||||
serverSettings.Logger = logger
|
||||
@@ -101,5 +104,17 @@ func buildServerSettings(settings settings.DNS,
|
||||
}
|
||||
serverSettings.Middlewares = append(serverSettings.Middlewares, filterMiddleware)
|
||||
|
||||
localDNSMiddleware, err := localdns.New(localdns.Settings{
|
||||
Resolvers: localResolvers, // auto-detected at container start only
|
||||
Logger: logger,
|
||||
})
|
||||
if err != nil {
|
||||
return server.Settings{}, fmt.Errorf("creating local DNS middleware: %w", err)
|
||||
}
|
||||
// Place after cache middleware, since we want to avoid caching for local
|
||||
// hostnames that may change regularly.
|
||||
// Place after filter middleware to avoid conflicts with the rebinding protection.
|
||||
serverSettings.Middlewares = append(serverSettings.Middlewares, localDNSMiddleware)
|
||||
|
||||
return serverSettings, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user