resolver

package
v0.9.2-0...-36b1380 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: May 3, 2021 License: Apache-2.0 Imports: 35 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Name

func Name(resolver Resolver) string

Name returns a user-friendly name of a resolver

func TestDOHUpstream

func TestDOHUpstream(fn func(request *dns.Msg) (response *dns.Msg),
	reqFn ...func(w http.ResponseWriter)) config.Upstream

TestDOHUpstream creates a mock DoH Upstream

func TestUDPUpstream

func TestUDPUpstream(fn func(request *dns.Msg) (response *dns.Msg)) config.Upstream

TestUDPUpstream creates a mock UDP upstream

Types

type BlockingResolver

type BlockingResolver struct {
	NextResolver
	// contains filtered or unexported fields
}

BlockingResolver checks request's question (domain name) against black and white lists

func (*BlockingResolver) BlockingStatus

func (r *BlockingResolver) BlockingStatus() api.BlockingStatus

BlockingStatus returns the current blocking status

func (*BlockingResolver) Configuration

func (r *BlockingResolver) Configuration() (result []string)

Configuration returns the current resolver configuration

func (*BlockingResolver) DisableBlocking

func (r *BlockingResolver) DisableBlocking(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()

EnableBlocking enables the blocking against the blacklists

func (*BlockingResolver) RefreshLists

func (r *BlockingResolver) RefreshLists()

RefreshLists triggers the refresh of all black and white lists in the cache

func (*BlockingResolver) Resolve

func (r *BlockingResolver) Resolve(request *Request) (*Response, error)

Resolve checks the query against the blacklist and delegates to next resolver if domain is not blocked

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 (*CachingResolver) Configuration

func (r *CachingResolver) Configuration() (result []string)

Configuration returns a current resolver configuration

func (*CachingResolver) Resolve

func (r *CachingResolver) Resolve(request *Request) (response *Response, err error)

Resolve checks if the current query 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 NewBlockingResolver

func NewBlockingResolver(cfg config.BlockingConfig) ChainedResolver

NewBlockingResolver returns a new configured instance of the resolver

func NewCachingResolver

func NewCachingResolver(cfg config.CachingConfig) ChainedResolver

NewCachingResolver creates a new resolver instance

func NewClientNamesResolver

func NewClientNamesResolver(cfg config.ClientLookupConfig) ChainedResolver

NewClientNamesResolver creates new resolver instance

func NewConditionalUpstreamResolver

func NewConditionalUpstreamResolver(cfg config.ConditionalUpstreamConfig) ChainedResolver

NewConditionalUpstreamResolver returns new resolver instance

func NewCustomDNSResolver

func NewCustomDNSResolver(cfg config.CustomDNSConfig) ChainedResolver

NewCustomDNSResolver creates new resolver instance

func NewIPv6Checker

func NewIPv6Checker(disable bool) ChainedResolver

func NewMetricsResolver

func NewMetricsResolver(cfg config.PrometheusConfig) ChainedResolver

NewMetricsResolver creates a new intance of the MetricsResolver type

func NewQueryLoggingResolver

func NewQueryLoggingResolver(cfg config.QueryLogConfig) ChainedResolver

NewQueryLoggingResolver returns a new resolver instance

func NewStatsResolver

func NewStatsResolver() ChainedResolver

NewStatsResolver creates new instance of the resolver

type ClientNamesResolver

type ClientNamesResolver struct {
	NextResolver
	// contains filtered or unexported fields
}

ClientNamesResolver tries to determine client name by asking responsible DNS server vie rDNS (reverse lookup)

func (*ClientNamesResolver) Configuration

func (r *ClientNamesResolver) Configuration() (result []string)

Configuration returns current resolver configuration

func (*ClientNamesResolver) FlushCache

func (r *ClientNamesResolver) FlushCache()

FlushCache reset client name cache

func (*ClientNamesResolver) Resolve

func (r *ClientNamesResolver) Resolve(request *Request) (*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 (*ConditionalUpstreamResolver) Configuration

func (r *ConditionalUpstreamResolver) Configuration() (result []string)

Configuration returns current configuration

func (*ConditionalUpstreamResolver) Resolve

func (r *ConditionalUpstreamResolver) Resolve(request *Request) (*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 (*CustomDNSResolver) Configuration

func (r *CustomDNSResolver) Configuration() (result []string)

Configuration returns current resolver configuration

func (*CustomDNSResolver) Resolve

func (r *CustomDNSResolver) Resolve(request *Request) (*Response, error)

Resolve uses internal mapping to resolve the query

type IPv6Checker

type IPv6Checker struct {
	NextResolver
	// contains filtered or unexported fields
}

IPv6Checker can drop all AAAA query (empty ANSWER with NOERROR)

func (*IPv6Checker) Configuration

func (r *IPv6Checker) Configuration() (result []string)

func (*IPv6Checker) Resolve

func (r *IPv6Checker) Resolve(request *Request) (*Response, error)

type MetricsResolver

type MetricsResolver struct {
	NextResolver
	// contains filtered or unexported fields
}

MetricsResolver resolver that records metrics about requests/response

func (*MetricsResolver) Configuration

func (m *MetricsResolver) Configuration() (result []string)

Configuration gets the config of this resolver in a string slice

func (*MetricsResolver) Resolve

func (m *MetricsResolver) Resolve(request *Request) (*Response, error)

Resolve resolves the passed request

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

func (*NextResolver) Next

func (r *NextResolver) Next(n Resolver)

Next sets the next resolver

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 (*ParallelBestResolver) Configuration

func (r *ParallelBestResolver) Configuration() (result []string)

Configuration returns current resolver configuration

func (*ParallelBestResolver) Resolve

func (r *ParallelBestResolver) Resolve(request *Request) (*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, ...) into log file or as log entry (if log directory is not configured)

func (*QueryLoggingResolver) Configuration

func (r *QueryLoggingResolver) Configuration() (result []string)

Configuration returns the current resolver configuration

func (*QueryLoggingResolver) Resolve

func (r *QueryLoggingResolver) Resolve(request *Request) (*Response, error)

Resolve logs the query, duration and the result

type Request

type Request struct {
	ClientIP    net.IP
	Protocol    RequestProtocol
	ClientNames []string
	Req         *dns.Msg
	Log         *logrus.Entry
	RequestTS   time.Time
}

Request represents client's DNS request

type RequestProtocol

type RequestProtocol uint8

RequestProtocol represents the server protocol

const (
	// TCP is the TPC protocol
	TCP RequestProtocol = iota

	// UDP is the UDP protocol
	UDP
)

func (RequestProtocol) String

func (r RequestProtocol) String() string

type Resolver

type Resolver interface {

	// Resolve performs resolution of a DNS request
	Resolve(req *Request) (*Response, error)

	// Configuration prints current resolver configuration
	Configuration() []string
}

Resolver generic interface for all resolvers

func Chain

func Chain(resolvers ...Resolver) Resolver

Chain creates a chain of resolvers

func NewParallelBestResolver

func NewParallelBestResolver(upstreamResolvers map[string][]config.Upstream) Resolver

NewParallelBestResolver creates new resolver instance

type Response

type Response struct {
	Res    *dns.Msg
	Reason string
	RType  ResponseType
}

Response represents the response of a DNS query

type ResponseType

type ResponseType int

ResponseType represents the type of the response

const (
	// RESOLVED the response was resolved by the external upstream resolver
	RESOLVED ResponseType = iota

	// CACHED the response was resolved from cache
	CACHED

	// BLOCKED the query was blocked
	BLOCKED

	// CONDITIONAL the query was resolved by the conditional upstream resolver
	CONDITIONAL

	// CUSTOMDNS the query was resolved by a custom rule
	CUSTOMDNS
)

func (ResponseType) String

func (r ResponseType) String() string

type StatsResolver

type StatsResolver struct {
	NextResolver
	// contains filtered or unexported fields
}

StatsResolver calculates query statistics

func (*StatsResolver) Configuration

func (r *StatsResolver) Configuration() (result []string)

Configuration returns current configuraion

func (*StatsResolver) Resolve

func (r *StatsResolver) Resolve(request *Request) (*Response, error)

Resolve calculates query statistics

type UpstreamResolver

type UpstreamResolver struct {
	NextResolver
	// contains filtered or unexported fields
}

UpstreamResolver sends request to external DNS server

func NewUpstreamResolver

func NewUpstreamResolver(upstream config.Upstream) *UpstreamResolver

NewUpstreamResolver creates new resolver instance

func (*UpstreamResolver) Configuration

func (r *UpstreamResolver) Configuration() (result []string)

Configuration return current resolver configuration

func (*UpstreamResolver) Resolve

func (r *UpstreamResolver) Resolve(request *Request) (response *Response, err error)

Resolve calls external resolver

func (UpstreamResolver) String

func (r UpstreamResolver) String() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL