Documentation ¶
Index ¶
- func Name(resolver Resolver) string
- func TestDOHUpstream(fn func(request *dns.Msg) (response *dns.Msg), ...) config.Upstream
- func TestUDPUpstream(fn func(request *dns.Msg) (response *dns.Msg)) config.Upstream
- type BlockingResolver
- func (r *BlockingResolver) BlockingStatus() api.BlockingStatus
- func (r *BlockingResolver) Configuration() (result []string)
- func (r *BlockingResolver) DisableBlocking(duration time.Duration, disableGroups []string) error
- func (r *BlockingResolver) EnableBlocking()
- func (r *BlockingResolver) RefreshLists()
- func (r *BlockingResolver) Resolve(request *Request) (*Response, error)
- type CachingResolver
- type ChainedResolver
- func NewBlockingResolver(cfg config.BlockingConfig) ChainedResolver
- func NewCachingResolver(cfg config.CachingConfig) ChainedResolver
- func NewClientNamesResolver(cfg config.ClientLookupConfig) ChainedResolver
- func NewConditionalUpstreamResolver(cfg config.ConditionalUpstreamConfig) ChainedResolver
- func NewCustomDNSResolver(cfg config.CustomDNSConfig) ChainedResolver
- func NewIPv6Checker(disable bool) ChainedResolver
- func NewMetricsResolver(cfg config.PrometheusConfig) ChainedResolver
- func NewQueryLoggingResolver(cfg config.QueryLogConfig) ChainedResolver
- func NewStatsResolver() ChainedResolver
- type ClientNamesResolver
- type ConditionalUpstreamResolver
- type CustomDNSResolver
- type IPv6Checker
- type MetricsResolver
- type NextResolver
- type ParallelBestResolver
- type QueryLoggingResolver
- type Request
- type RequestProtocol
- type Resolver
- type Response
- type ResponseType
- type StatsResolver
- type UpstreamResolver
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
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
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
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
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
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
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
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)
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
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 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
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
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
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