resolver

package
v0.1.4 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2021 License: Apache-2.0 Imports: 36 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 NewCnameResolver

func NewCnameResolver(cfg config.CnameConfig) ChainedResolver

NewCnameResolver resturns a new restriction resolver

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 CnameResolver

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

func (*CnameResolver) Configuration

func (cr *CnameResolver) Configuration() (result []string)

Configuration returns the string representation of the configuration

func (*CnameResolver) Resolve

func (cr *CnameResolver) Resolve(req *Request) (*Response, error)

Resolve requested domain and looks if it's part of any restriction

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