Documentation
¶
Index ¶
- Variables
- func ForEach(resolver Resolver, callback func(Resolver))
- func GetFromChainWithType[T any](resolver ChainedResolver) (result T, err error)
- func GetQueryLoggingWriter(ctx context.Context, cfg config.QueryLog) (querylog.Writer, error)
- func LogResolverConfig(res Resolver, logger *logrus.Entry)
- func Name(resolver Resolver) string
- type BlockingResolver
- func (r *BlockingResolver) BlockingStatus() api.BlockingStatus
- func (r *BlockingResolver) DisableBlocking(ctx context.Context, duration time.Duration, disableGroups []string) error
- func (r *BlockingResolver) EnableBlocking(ctx context.Context)
- func (c *BlockingResolver) IsEnabled() bool
- func (r *BlockingResolver) LogConfig(logger *logrus.Entry)
- func (r *BlockingResolver) RefreshLists() error
- func (r *BlockingResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *BlockingResolver) String() string
- func (t *BlockingResolver) Type() string
- type Bootstrap
- func (c *Bootstrap) IsEnabled() bool
- func (c *Bootstrap) LogConfig(logger *logrus.Entry)
- func (b *Bootstrap) NewHTTPTransport() *http.Transport
- func (b *Bootstrap) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *Bootstrap) String() string
- func (t *Bootstrap) Type() string
- func (b *Bootstrap) UpstreamIPs(ctx context.Context, r *UpstreamResolver) (*IPSet, error)
- type CachingResolver
- func (r *CachingResolver) FlushCaches(ctx context.Context)
- func (c *CachingResolver) IsEnabled() bool
- func (r *CachingResolver) LogConfig(logger *logrus.Entry)
- func (r *CachingResolver) Resolve(ctx context.Context, request *model.Request) (response *model.Response, err error)
- func (t *CachingResolver) String() string
- func (t *CachingResolver) Type() string
- type ChainedResolver
- type ClientNamesResolver
- func (r *ClientNamesResolver) FlushCache()
- func (c *ClientNamesResolver) IsEnabled() bool
- func (r *ClientNamesResolver) LogConfig(logger *logrus.Entry)
- func (r *ClientNamesResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *ClientNamesResolver) String() string
- func (t *ClientNamesResolver) Type() string
- type ConditionalUpstreamResolver
- func (c *ConditionalUpstreamResolver) IsEnabled() bool
- func (c *ConditionalUpstreamResolver) LogConfig(logger *logrus.Entry)
- func (r *ConditionalUpstreamResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *ConditionalUpstreamResolver) String() string
- func (t *ConditionalUpstreamResolver) Type() string
- type CustomDNSResolver
- func (r *CustomDNSResolver) CreateAnswerFromQuestion(newFunc createAnswerFunc)
- func (c *CustomDNSResolver) IsEnabled() bool
- func (c *CustomDNSResolver) LogConfig(logger *logrus.Entry)
- func (r *CustomDNSResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *CustomDNSResolver) String() string
- func (t *CustomDNSResolver) Type() string
- type ECSMask
- type ECSResolver
- type EDEResolver
- type FQDNOnlyResolver
- type FilteringResolver
- type HostsFileEntry
- type HostsFileResolver
- type IPSet
- type MetricsResolver
- type MockUDPUpstreamServer
- func (t *MockUDPUpstreamServer) Close()
- func (t *MockUDPUpstreamServer) GetCallCount() int
- func (t *MockUDPUpstreamServer) ResetCallCount()
- func (t *MockUDPUpstreamServer) Start() config.Upstream
- func (t *MockUDPUpstreamServer) WithAnswerError(errorCode int) *MockUDPUpstreamServer
- func (t *MockUDPUpstreamServer) WithAnswerFn(fn func(request *dns.Msg) (response *dns.Msg)) *MockUDPUpstreamServer
- func (t *MockUDPUpstreamServer) WithAnswerMsg(answer *dns.Msg) *MockUDPUpstreamServer
- func (t *MockUDPUpstreamServer) WithAnswerRR(answers ...string) *MockUDPUpstreamServer
- func (t *MockUDPUpstreamServer) WithDelay(delay time.Duration) *MockUDPUpstreamServer
- type NamedResolver
- type NextResolver
- type NoOpResolver
- type ParallelBestResolver
- func (c *ParallelBestResolver) IsEnabled() bool
- func (c *ParallelBestResolver) LogConfig(logger *logrus.Entry)
- func (r *ParallelBestResolver) Name() string
- func (r *ParallelBestResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (r *ParallelBestResolver) String() string
- func (t *ParallelBestResolver) Type() string
- type QueryLoggingResolver
- func (c *QueryLoggingResolver) IsEnabled() bool
- func (c *QueryLoggingResolver) LogConfig(logger *logrus.Entry)
- func (r *QueryLoggingResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *QueryLoggingResolver) String() string
- func (t *QueryLoggingResolver) Type() string
- type Resolver
- type RewriterResolver
- func (c *RewriterResolver) IsEnabled() bool
- func (r *RewriterResolver) LogConfig(logger *logrus.Entry)
- func (r *RewriterResolver) Name() string
- func (r *RewriterResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *RewriterResolver) String() string
- func (t *RewriterResolver) Type() string
- type SpecialUseDomainNamesResolver
- func (c *SpecialUseDomainNamesResolver) IsEnabled() bool
- func (c *SpecialUseDomainNamesResolver) LogConfig(logger *logrus.Entry)
- func (r *SpecialUseDomainNamesResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (t *SpecialUseDomainNamesResolver) String() string
- func (t *SpecialUseDomainNamesResolver) Type() string
- type StrictResolver
- func (c *StrictResolver) IsEnabled() bool
- func (c *StrictResolver) LogConfig(logger *logrus.Entry)
- func (r *StrictResolver) Name() string
- func (r *StrictResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (r *StrictResolver) String() string
- func (t *StrictResolver) Type() string
- type UpstreamResolver
- func (c *UpstreamResolver) IsEnabled() bool
- func (c *UpstreamResolver) LogConfig(logger *logrus.Entry)
- func (r *UpstreamResolver) Resolve(ctx context.Context, request *model.Request) (response *model.Response, err error)
- func (r UpstreamResolver) String() string
- func (t *UpstreamResolver) Type() string
- func (r UpstreamResolver) Upstream() config.Upstream
- type UpstreamServerError
- type UpstreamTreeResolver
- func (c *UpstreamTreeResolver) IsEnabled() bool
- func (c *UpstreamTreeResolver) LogConfig(logger *logrus.Entry)
- func (r *UpstreamTreeResolver) Name() string
- func (r *UpstreamTreeResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
- func (r *UpstreamTreeResolver) String() string
- func (t *UpstreamTreeResolver) Type() string
Constants ¶
This section is empty.
Variables ¶
var NoResponse = &model.Response{} //nolint:gochecknoglobals
Functions ¶
func ForEach ¶
ForEach iterates over all resolvers in the chain.
If resolver is not a chain, or is unlinked, the callback is called exactly once.
func GetFromChainWithType ¶
func GetFromChainWithType[T any](resolver ChainedResolver) (result T, err error)
func GetQueryLoggingWriter ¶
func LogResolverConfig ¶
LogResolverConfig logs the resolver's type and config.
Types ¶
type BlockingResolver ¶
type BlockingResolver struct {
NextResolver
// contains filtered or unexported fields
}
BlockingResolver checks request's question (domain name) against allow/denylists
func NewBlockingResolver ¶
func NewBlockingResolver(ctx context.Context, cfg config.Blocking, redis *redis.Client, bootstrap *Bootstrap, ) (r *BlockingResolver, err error)
NewBlockingResolver returns a new configured instance of the resolver
func (*BlockingResolver) BlockingStatus ¶
func (r *BlockingResolver) BlockingStatus() api.BlockingStatus
BlockingStatus returns the current blocking status
func (*BlockingResolver) DisableBlocking ¶
func (r *BlockingResolver) DisableBlocking(ctx context.Context, duration time.Duration, disableGroups []string) error
DisableBlocking deactivates the blocking for a particular duration (or forever if 0).
func (*BlockingResolver) EnableBlocking ¶
func (r *BlockingResolver) EnableBlocking(ctx context.Context)
EnableBlocking enables the blocking against the denylists
func (*BlockingResolver) IsEnabled ¶
func (c *BlockingResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*BlockingResolver) LogConfig ¶
func (r *BlockingResolver) LogConfig(logger *logrus.Entry)
LogConfig implements `config.Configurable`.
func (*BlockingResolver) RefreshLists ¶
func (r *BlockingResolver) RefreshLists() error
RefreshLists triggers the refresh of all allow/denylists in the cache
func (*BlockingResolver) Resolve ¶
func (r *BlockingResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve checks the query against the denylist and delegates to next resolver if domain is not blocked
type Bootstrap ¶
type Bootstrap struct {
// contains filtered or unexported fields
}
Bootstrap allows resolving hostnames using the configured bootstrap DNS.
func NewBootstrap ¶
NewBootstrap creates and returns a new Bootstrap. Internally, it uses a CachingResolver and an UpstreamResolver.
func (*Bootstrap) IsEnabled ¶
func (c *Bootstrap) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*Bootstrap) NewHTTPTransport ¶
NewHTTPTransport returns a new http.Transport that uses b to resolve hostnames
func (*Bootstrap) UpstreamIPs ¶
type CachingResolver ¶
type CachingResolver struct {
NextResolver
// contains filtered or unexported fields
}
CachingResolver caches answers from dns queries with their TTL time, to avoid external resolver calls for recurrent queries
func NewCachingResolver ¶
func NewCachingResolver(ctx context.Context, cfg config.Caching, redis *redis.Client, ) *CachingResolver
NewCachingResolver creates a new resolver instance
func (*CachingResolver) FlushCaches ¶
func (r *CachingResolver) FlushCaches(ctx context.Context)
func (*CachingResolver) IsEnabled ¶
func (c *CachingResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*CachingResolver) LogConfig ¶
func (r *CachingResolver) LogConfig(logger *logrus.Entry)
LogConfig implements `config.Configurable`.
func (*CachingResolver) Resolve ¶
func (r *CachingResolver) Resolve(ctx context.Context, request *model.Request) (response *model.Response, err error)
Resolve checks if the current query should use the cache and if the result is already in the cache and returns it or delegates to the next resolver
type ChainedResolver ¶
type ChainedResolver interface {
Resolver
// Next sets the next resolver
Next(n Resolver)
// GetNext returns the next resolver
GetNext() Resolver
}
ChainedResolver represents a resolver, which can delegate result to the next one
func NewECSResolver ¶
func NewECSResolver(cfg config.ECS) ChainedResolver
NewECSResolver creates new resolver instance which adds the subnet information as EDNS0 option
func NewRewriterResolver ¶
func NewRewriterResolver(cfg config.RewriterConfig, inner ChainedResolver) ChainedResolver
type ClientNamesResolver ¶
type ClientNamesResolver struct {
NextResolver
// contains filtered or unexported fields
}
ClientNamesResolver tries to determine client name by asking responsible DNS server via rDNS (reverse lookup)
func NewClientNamesResolver ¶
func NewClientNamesResolver(ctx context.Context, cfg config.ClientLookup, upstreamsCfg config.Upstreams, bootstrap *Bootstrap, ) (cr *ClientNamesResolver, err error)
NewClientNamesResolver creates new resolver instance
func (*ClientNamesResolver) FlushCache ¶
func (r *ClientNamesResolver) FlushCache()
FlushCache reset client name cache
func (*ClientNamesResolver) IsEnabled ¶
func (c *ClientNamesResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*ClientNamesResolver) LogConfig ¶
func (r *ClientNamesResolver) LogConfig(logger *logrus.Entry)
LogConfig implements `config.Configurable`.
func (*ClientNamesResolver) Resolve ¶
func (r *ClientNamesResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve tries to resolve the client name from the ip address
type ConditionalUpstreamResolver ¶
type ConditionalUpstreamResolver struct {
NextResolver
// contains filtered or unexported fields
}
ConditionalUpstreamResolver delegates DNS question to other DNS resolver dependent on domain name in question
func NewConditionalUpstreamResolver ¶
func NewConditionalUpstreamResolver( ctx context.Context, cfg config.ConditionalUpstream, upstreamsCfg config.Upstreams, bootstrap *Bootstrap, ) (*ConditionalUpstreamResolver, error)
NewConditionalUpstreamResolver returns new resolver instance
func (*ConditionalUpstreamResolver) IsEnabled ¶
func (c *ConditionalUpstreamResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*ConditionalUpstreamResolver) Resolve ¶
func (r *ConditionalUpstreamResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve uses the conditional resolver to resolve the query
type CustomDNSResolver ¶
type CustomDNSResolver struct {
NextResolver
// contains filtered or unexported fields
}
CustomDNSResolver resolves passed domain name to ip address defined in domain-IP map
func NewCustomDNSResolver ¶
func NewCustomDNSResolver(cfg config.CustomDNS) *CustomDNSResolver
NewCustomDNSResolver creates new resolver instance
func (*CustomDNSResolver) CreateAnswerFromQuestion ¶
func (r *CustomDNSResolver) CreateAnswerFromQuestion(newFunc createAnswerFunc)
func (*CustomDNSResolver) IsEnabled ¶
func (c *CustomDNSResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*CustomDNSResolver) Resolve ¶
func (r *CustomDNSResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve uses internal mapping to resolve the query
type ECSResolver ¶
type ECSResolver struct {
NextResolver
// contains filtered or unexported fields
}
ECSResolver is responsible for adding the EDNS Client Subnet information as EDNS0 option.
func (*ECSResolver) IsEnabled ¶
func (c *ECSResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*ECSResolver) Resolve ¶
Resolve adds the subnet information as EDNS0 option to the request of the next resolver and sets the client IP from the EDNS0 option to the request if this option is enabled
type EDEResolver ¶
type EDEResolver struct {
NextResolver
// contains filtered or unexported fields
}
A EDEResolver is responsible for adding the reason for the response as EDNS0 option
func NewEDEResolver ¶
func NewEDEResolver(cfg config.EDE) *EDEResolver
NewEDEResolver creates new resolver instance which adds the reason for the response as EDNS0 option to the response if it is enabled in the configuration
func (*EDEResolver) IsEnabled ¶
func (c *EDEResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*EDEResolver) Resolve ¶
Resolve adds the reason as EDNS0 option to the response of the next resolver if it is enabled in the configuration
type FQDNOnlyResolver ¶
type FQDNOnlyResolver struct {
NextResolver
// contains filtered or unexported fields
}
func NewFQDNOnlyResolver ¶
func NewFQDNOnlyResolver(cfg config.FQDNOnly) *FQDNOnlyResolver
func (*FQDNOnlyResolver) IsEnabled ¶
func (c *FQDNOnlyResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
type FilteringResolver ¶
type FilteringResolver struct {
NextResolver
// contains filtered or unexported fields
}
FilteringResolver filters DNS queries (for example can drop all AAAA query) returns empty ANSWER with NOERROR
func NewFilteringResolver ¶
func NewFilteringResolver(cfg config.Filtering) *FilteringResolver
func (*FilteringResolver) IsEnabled ¶
func (c *FilteringResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
type HostsFileEntry ¶
type HostsFileEntry = parsers.HostsFileEntry
type HostsFileResolver ¶
type HostsFileResolver struct {
NextResolver
// contains filtered or unexported fields
}
func NewHostsFileResolver ¶
func (*HostsFileResolver) IsEnabled ¶
func (c *HostsFileResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*HostsFileResolver) LogConfig ¶
func (r *HostsFileResolver) LogConfig(logger *logrus.Entry)
LogConfig implements `config.Configurable`.
type MetricsResolver ¶
type MetricsResolver struct {
NextResolver
// contains filtered or unexported fields
}
MetricsResolver resolver that records metrics about requests/response
func NewMetricsResolver ¶
func NewMetricsResolver(cfg config.Metrics) *MetricsResolver
NewMetricsResolver creates a new intance of the MetricsResolver type
func (*MetricsResolver) IsEnabled ¶
func (c *MetricsResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*MetricsResolver) Resolve ¶
func (r *MetricsResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve resolves the passed request
type MockUDPUpstreamServer ¶
type MockUDPUpstreamServer struct {
// contains filtered or unexported fields
}
func NewMockUDPUpstreamServer ¶
func NewMockUDPUpstreamServer() *MockUDPUpstreamServer
func (*MockUDPUpstreamServer) Close ¶
func (t *MockUDPUpstreamServer) Close()
func (*MockUDPUpstreamServer) GetCallCount ¶
func (t *MockUDPUpstreamServer) GetCallCount() int
func (*MockUDPUpstreamServer) ResetCallCount ¶
func (t *MockUDPUpstreamServer) ResetCallCount()
func (*MockUDPUpstreamServer) Start ¶
func (t *MockUDPUpstreamServer) Start() config.Upstream
func (*MockUDPUpstreamServer) WithAnswerError ¶
func (t *MockUDPUpstreamServer) WithAnswerError(errorCode int) *MockUDPUpstreamServer
func (*MockUDPUpstreamServer) WithAnswerFn ¶
func (t *MockUDPUpstreamServer) WithAnswerFn(fn func(request *dns.Msg) (response *dns.Msg)) *MockUDPUpstreamServer
func (*MockUDPUpstreamServer) WithAnswerMsg ¶
func (t *MockUDPUpstreamServer) WithAnswerMsg(answer *dns.Msg) *MockUDPUpstreamServer
func (*MockUDPUpstreamServer) WithAnswerRR ¶
func (t *MockUDPUpstreamServer) WithAnswerRR(answers ...string) *MockUDPUpstreamServer
func (*MockUDPUpstreamServer) WithDelay ¶
func (t *MockUDPUpstreamServer) WithDelay(delay time.Duration) *MockUDPUpstreamServer
type NamedResolver ¶
type NamedResolver interface {
// Name returns the full name of the resolver
Name() string
}
NamedResolver is a resolver with a special name
type NextResolver ¶
type NextResolver struct {
// contains filtered or unexported fields
}
NextResolver is the base implementation of ChainedResolver
func (*NextResolver) GetNext ¶
func (r *NextResolver) GetNext() Resolver
GetNext returns the next resolver
type NoOpResolver ¶
type NoOpResolver struct{}
NoOpResolver is used to finish a resolver branch as created in RewriterResolver
func NewNoOpResolver ¶
func NewNoOpResolver() *NoOpResolver
func (NoOpResolver) IsEnabled ¶
func (NoOpResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (NoOpResolver) LogConfig ¶
func (NoOpResolver) LogConfig(*logrus.Entry)
LogConfig implements `config.Configurable`.
func (NoOpResolver) String ¶
func (r NoOpResolver) String() string
String implements `fmt.Stringer`.
type ParallelBestResolver ¶
type ParallelBestResolver struct {
// contains filtered or unexported fields
}
ParallelBestResolver delegates the DNS message to 2 upstream resolvers and returns the fastest answer
func NewParallelBestResolver ¶
func NewParallelBestResolver( ctx context.Context, cfg config.UpstreamGroup, bootstrap *Bootstrap, ) (*ParallelBestResolver, error)
NewParallelBestResolver creates new resolver instance
func (*ParallelBestResolver) IsEnabled ¶
func (c *ParallelBestResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*ParallelBestResolver) Name ¶
func (r *ParallelBestResolver) Name() string
func (*ParallelBestResolver) Resolve ¶
func (r *ParallelBestResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve sends the query request to multiple upstream resolvers and returns the fastest result
func (*ParallelBestResolver) String ¶
func (r *ParallelBestResolver) String() string
type QueryLoggingResolver ¶
type QueryLoggingResolver struct {
NextResolver
// contains filtered or unexported fields
}
QueryLoggingResolver writes query information (question, answer, duration, ...)
func NewQueryLoggingResolver ¶
func NewQueryLoggingResolver(ctx context.Context, cfg config.QueryLog) *QueryLoggingResolver
NewQueryLoggingResolver returns a new resolver instance
func (*QueryLoggingResolver) IsEnabled ¶
func (c *QueryLoggingResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*QueryLoggingResolver) Resolve ¶
func (r *QueryLoggingResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve logs the query, duration and the result
type Resolver ¶
type Resolver interface {
config.Configurable
fmt.Stringer
// Type returns a short, user-friendly, name for the resolver.
//
// It should be the same for all instances of a specific Resolver type.
Type() string
// Resolve performs resolution of a DNS request
Resolve(ctx context.Context, req *model.Request) (*model.Response, error)
}
Resolver generic interface for all resolvers
type RewriterResolver ¶
type RewriterResolver struct {
NextResolver
// contains filtered or unexported fields
}
RewriterResolver is different from other resolvers, in the sense that it creates a branch in the resolver chain. The branch is where the rewrite is active. If the branch doesn't yield a result, the normal resolving is continued.
func (*RewriterResolver) IsEnabled ¶
func (c *RewriterResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*RewriterResolver) LogConfig ¶
func (r *RewriterResolver) LogConfig(logger *logrus.Entry)
LogConfig implements `config.Configurable`.
func (*RewriterResolver) Name ¶
func (r *RewriterResolver) Name() string
func (*RewriterResolver) Resolve ¶
func (r *RewriterResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve uses the inner resolver to resolve the rewritten query
type SpecialUseDomainNamesResolver ¶
type SpecialUseDomainNamesResolver struct {
NextResolver
// contains filtered or unexported fields
}
func NewSpecialUseDomainNamesResolver ¶
func NewSpecialUseDomainNamesResolver(cfg config.SUDN) *SpecialUseDomainNamesResolver
func (*SpecialUseDomainNamesResolver) IsEnabled ¶
func (c *SpecialUseDomainNamesResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
type StrictResolver ¶
type StrictResolver struct {
// contains filtered or unexported fields
}
StrictResolver delegates the DNS message strictly to the first configured upstream resolver if it can't provide the answer in time the next resolver is used
func NewStrictResolver ¶
func NewStrictResolver( ctx context.Context, cfg config.UpstreamGroup, bootstrap *Bootstrap, ) (*StrictResolver, error)
NewStrictResolver creates a new strict resolver instance
func (*StrictResolver) IsEnabled ¶
func (c *StrictResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*StrictResolver) Name ¶
func (r *StrictResolver) Name() string
func (*StrictResolver) Resolve ¶
func (r *StrictResolver) Resolve(ctx context.Context, request *model.Request) (*model.Response, error)
Resolve sends the query request in a strict order to the upstream resolvers
func (*StrictResolver) String ¶
func (r *StrictResolver) String() string
type UpstreamResolver ¶
type UpstreamResolver struct {
// contains filtered or unexported fields
}
UpstreamResolver sends request to external DNS server
func NewUpstreamResolver ¶
func NewUpstreamResolver( ctx context.Context, cfg upstreamConfig, bootstrap *Bootstrap, ) (*UpstreamResolver, error)
NewUpstreamResolver creates new resolver instance
func (*UpstreamResolver) IsEnabled ¶
func (c *UpstreamResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*UpstreamResolver) Resolve ¶
func (r *UpstreamResolver) Resolve(ctx context.Context, request *model.Request) (response *model.Response, err error)
Resolve calls external resolver
func (UpstreamResolver) String ¶
func (r UpstreamResolver) String() string
func (*UpstreamResolver) Type ¶
func (t *UpstreamResolver) Type() string
Type implements `Resolver`.
func (UpstreamResolver) Upstream ¶
func (r UpstreamResolver) Upstream() config.Upstream
type UpstreamServerError ¶
UpstreamServerError wraps a response with RCode ServFail so no other resolver tries to use it.
func (*UpstreamServerError) Error ¶
func (e *UpstreamServerError) Error() string
type UpstreamTreeResolver ¶
type UpstreamTreeResolver struct {
// contains filtered or unexported fields
}
func (*UpstreamTreeResolver) IsEnabled ¶
func (c *UpstreamTreeResolver) IsEnabled() bool
IsEnabled implements `config.Configurable`.
func (*UpstreamTreeResolver) Name ¶
func (r *UpstreamTreeResolver) Name() string
func (*UpstreamTreeResolver) String ¶
func (r *UpstreamTreeResolver) String() string
Source Files
¶
- blocking_resolver.go
- bootstrap.go
- caching_resolver.go
- clientnames_resolver.go
- conditional_upstream_resolver.go
- custom_dns_resolver.go
- ecs_resolver.go
- ede_resolver.go
- filtering_resolver.go
- fqdn_only_resolver.go
- hosts_file_resolver.go
- metrics_resolver.go
- mock_udp_upstream_server.go
- noop_resolver.go
- parallel_best_resolver.go
- query_logging_resolver.go
- resolver.go
- rewritter_resolver.go
- strict_resolver.go
- sudn_resolver.go
- upstream_resolver.go
- upstream_tree_resolver.go