resolver

package
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Jun 14, 2020 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

func TestDOHUpstream

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

func TestUDPUpstream

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

Types

type BlockingResolver

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

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

func (*BlockingResolver) Configuration

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

func (*BlockingResolver) Resolve

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

type CachingResolver

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

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)

func (*CachingResolver) Resolve

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

type ChainedResolver

type ChainedResolver interface {
	Resolver
	Next(n Resolver)
	GetNext() Resolver
}

func NewBlockingResolver

func NewBlockingResolver(router *chi.Mux, cfg config.BlockingConfig) ChainedResolver

func NewCachingResolver

func NewCachingResolver(cfg config.CachingConfig) ChainedResolver

func NewClientNamesResolver

func NewClientNamesResolver(cfg config.ClientLookupConfig) ChainedResolver

func NewConditionalUpstreamResolver

func NewConditionalUpstreamResolver(cfg config.ConditionalUpstreamConfig) ChainedResolver

func NewCustomDNSResolver

func NewCustomDNSResolver(cfg config.CustomDNSConfig) 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

func NewStatsResolver

func NewStatsResolver() ChainedResolver

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)

func (*ClientNamesResolver) FlushCache

func (r *ClientNamesResolver) FlushCache()

reset client name cache

func (*ClientNamesResolver) Resolve

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

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)

func (*ConditionalUpstreamResolver) Resolve

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

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)

func (*CustomDNSResolver) Resolve

func (r *CustomDNSResolver) 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
}

func (*NextResolver) GetNext

func (r *NextResolver) GetNext() Resolver

func (*NextResolver) Next

func (r *NextResolver) Next(n 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)

func (*ParallelBestResolver) Resolve

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

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)

func (*QueryLoggingResolver) Resolve

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

type Request

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

type Resolver

type Resolver interface {
	Resolve(req *Request) (*Response, error)
	Configuration() []string
}

func Chain

func Chain(resolvers ...Resolver) Resolver

func NewParallelBestResolver

func NewParallelBestResolver(cfg config.UpstreamConfig) Resolver

func NewUpstreamResolver

func NewUpstreamResolver(upstream config.Upstream) Resolver

type Response

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

type ResponseType

type ResponseType int
const (
	RESOLVED ResponseType = iota
	CACHED
	BLOCKED
	CONDITIONAL
	CUSTOMDNS
)

func (ResponseType) String

func (r ResponseType) String() string

type StatsResolver

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

func (*StatsResolver) Configuration

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

func (*StatsResolver) Resolve

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

type UpstreamResolver

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

UpstreamResolver sends request to external DNS server

func (*UpstreamResolver) Configuration

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

func (*UpstreamResolver) Resolve

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

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