Versions in this module Expand all Collapse all v0 v0.1.1 Dec 6, 2024 Changes in this version + const QueryPaddingBlockSize + const ResponsePaddingBlockSize + var BuildNumber string = "64" + var BuildTime string = "Tue Dec 3 08:54:08 UTC 2024" + var BuildVersion string = "v0.1.84" + var DTLSPort string = DoTPort + var DoHPort string = "443" + var DoQPort string = "8853" + var DoTPort string = "853" + var DohQuicPort string = "1443" + var Log = logrus.New() + var PlainDNSPort = "53" + func AddressWithDefault(addr, defaultPort string) string + func AnswerShuffleRandom(msg *dns.Msg) + func AnswerShuffleRoundRobin(msg *dns.Msg) + func DTLSClientConfig(caFile, crtFile, keyFile string) (*dtls.Config, error) + func DTLSServerConfig(caFile, crtFile, keyFile string, mutualTLS bool) (*dtls.Config, error) + func ECSModifierDelete(id string, q *dns.Msg, ci ClientInfo) + func NewMemoryBackend(opt MemoryBackendOptions) *memoryBackend + func NewNetDialer(r Resolver) *net.Dialer + func NewNetResolver(r Resolver) *net.Resolver + func NewRedisBackend(opt RedisBackendOptions) *redisBackend + func NewRequestDedup(id string, resolver Resolver) *requestDedup + func NewRoute(name, class string, types, weekdays []string, ...) (*route, error) + func TLSClientConfig(caFile, crtFile, keyFile, serverName string) (*tls.Config, error) + func TLSServerConfig(caFile, crtFile, keyFile string, mutualTLS bool) (*tls.Config, error) + func TTLSelectAverage(r *TTLModifier, a *dns.Msg) bool + func TTLSelectFirst(r *TTLModifier, a *dns.Msg) bool + func TTLSelectHighest(r *TTLModifier, a *dns.Msg) bool + func TTLSelectLast(r *TTLModifier, a *dns.Msg) bool + func TTLSelectLowest(r *TTLModifier, a *dns.Msg) bool + func TTLSelectRandom(r *TTLModifier, a *dns.Msg) bool + type AdminListener struct + func NewAdminListener(id, addr string, opt AdminListenerOptions) (*AdminListener, error) + func (s *AdminListener) Start() error + func (s *AdminListener) Stop() error + func (s *AdminListener) String() string + type AdminListenerOptions struct + TLSConfig *tls.Config + Transport string + type AnswerShuffleFunc func(*dns.Msg) + type Blocklist struct + func NewBlocklist(id string, resolver Resolver, opt BlocklistOptions) (*Blocklist, error) + func (r *Blocklist) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Blocklist) String() string + type BlocklistDB interface + Match func(q dns.Question) (ip []net.IP, names []string, m *BlocklistMatch, matched bool) + Reload func() (BlocklistDB, error) + type BlocklistLoader interface + Load func() ([]string, error) + type BlocklistMatch struct + List string + Rule string + func (m *BlocklistMatch) GetList() string + func (m *BlocklistMatch) GetRule() string + type BlocklistMetrics struct + func NewBlocklistMetrics(id string) *BlocklistMetrics + type BlocklistOptions struct + AllowListResolver Resolver + AllowlistDB BlocklistDB + AllowlistRefresh time.Duration + BlocklistDB BlocklistDB + BlocklistRefresh time.Duration + BlocklistResolver Resolver + EDNS0EDETemplate *EDNS0EDETemplate + type Cache struct + func NewCache(id string, resolver Resolver, opt CacheOptions) *Cache + func (r *Cache) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Cache) String() string + type CacheBackend interface + Close func() error + Flush func() + Lookup func(q *dns.Msg) (answer *dns.Msg, prefetchEligible bool, ok bool) + Size func() int + Store func(query *dns.Msg, item *cacheAnswer) + type CacheMetrics struct + type CacheOptions struct + Backend CacheBackend + CacheRcodeMaxTTL map[int]uint32 + Capacity int + FlushQuery string + GCPeriod time.Duration + HardenBelowNXDOMAIN bool + NegativeTTL uint32 + PrefetchEligible uint32 + PrefetchTrigger uint32 + ShuffleAnswerFunc AnswerShuffleFunc + type CidrDB struct + func NewCidrDB(name string, loader BlocklistLoader) (*CidrDB, error) + func (m *CidrDB) Close() error + func (m *CidrDB) Match(ip net.IP) (*BlocklistMatch, bool) + func (m *CidrDB) Reload() (IPBlocklistDB, error) + func (m *CidrDB) String() string + type ClientBlocklist struct + func NewClientBlocklist(id string, resolver Resolver, opt ClientBlocklistOptions) (*ClientBlocklist, error) + func (r *ClientBlocklist) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ClientBlocklist) String() string + type ClientBlocklistOptions struct + BlocklistDB IPBlocklistDB + BlocklistRefresh time.Duration + BlocklistResolver Resolver + type ClientInfo struct + DoHPath string + Listener string + SourceIP net.IP + TLSServerName string + type DNSClient struct + func NewDNSClient(id, endpoint, network string, opt DNSClientOptions) (*DNSClient, error) + func (d *DNSClient) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (d *DNSClient) String() string + type DNSClientOptions struct + Dialer Dialer + LocalAddr net.IP + QueryTimeout time.Duration + UDPSize uint16 + type DNSDialer interface + Dial func(address string) (*dns.Conn, error) + type DNSListener struct + func NewDNSListener(id, addr, net string, opt ListenOptions, resolver Resolver) *DNSListener + func (s DNSListener) Start() error + func (s DNSListener) String() string + type DTLSClient struct + func NewDTLSClient(id, endpoint string, opt DTLSClientOptions) (*DTLSClient, error) + func (d *DTLSClient) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (d *DTLSClient) String() string + type DTLSClientOptions struct + BootstrapAddr string + DTLSConfig *dtls.Config + LocalAddr net.IP + QueryTimeout time.Duration + UDPSize uint16 + type DTLSListener struct + func NewDTLSListener(id, addr string, opt DTLSListenerOptions, resolver Resolver) *DTLSListener + func (s *DTLSListener) Start() error + func (s *DTLSListener) Stop() error + func (s *DTLSListener) String() string + type DTLSListenerOptions struct + DTLSConfig *dtls.Config + type Dialer interface + Dial func(net string, address string) (net.Conn, error) + type DoHClient struct + func NewDoHClient(id, endpoint string, opt DoHClientOptions) (*DoHClient, error) + func (d *DoHClient) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (d *DoHClient) ResolveGET(q *dns.Msg) (*dns.Msg, error) + func (d *DoHClient) ResolvePOST(q *dns.Msg) (*dns.Msg, error) + func (d *DoHClient) String() string + type DoHClientOptions struct + BootstrapAddr string + Dialer Dialer + LocalAddr net.IP + Method string + QueryTimeout time.Duration + TLSConfig *tls.Config + Transport string + Use0RTT bool + type DoHListener struct + func NewDoHListener(id, addr string, opt DoHListenerOptions, resolver Resolver) (*DoHListener, error) + func (s *DoHListener) Start() error + func (s *DoHListener) Stop() error + func (s *DoHListener) String() string + type DoHListenerMetrics struct + func NewDoHListenerMetrics(id string) *DoHListenerMetrics + type DoHListenerOptions struct + HTTPProxyNet *net.IPNet + NoTLS bool + TLSConfig *tls.Config + Transport string + type DoTClient struct + func NewDoTClient(id, endpoint string, opt DoTClientOptions) (*DoTClient, error) + func (d *DoTClient) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (d *DoTClient) String() string + type DoTClientOptions struct + BootstrapAddr string + Dialer Dialer + LocalAddr net.IP + QueryTimeout time.Duration + TLSConfig *tls.Config + type DoTListener struct + func NewDoTListener(id, addr string, opt DoTListenerOptions, resolver Resolver) *DoTListener + func (s DoTListener) Start() error + func (s DoTListener) Stop() error + func (s DoTListener) String() string + type DoTListenerOptions struct + TLSConfig *tls.Config + type DomainDB struct + func NewDomainDB(name string, loader BlocklistLoader) (*DomainDB, error) + func (m *DomainDB) Match(q dns.Question) ([]net.IP, []string, *BlocklistMatch, bool) + func (m *DomainDB) Reload() (BlocklistDB, error) + func (m *DomainDB) String() string + type DropResolver struct + func NewDropResolver(id string) *DropResolver + func (r *DropResolver) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *DropResolver) String() string + type ECSModifier struct + func NewECSModifier(id string, resolver Resolver, f ECSModifierFunc) (*ECSModifier, error) + func (r *ECSModifier) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ECSModifier) String() string + type ECSModifierFunc func(id string, q *dns.Msg, ci ClientInfo) + func ECSModifierAdd(addr net.IP, prefix4, prefix6 uint8) ECSModifierFunc + func ECSModifierAddIfMissing(addr net.IP, prefix4, prefix6 uint8) ECSModifierFunc + func ECSModifierPrivacy(prefix4, prefix6 uint8) ECSModifierFunc + type EDNS0EDEInput struct + type EDNS0EDETemplate struct + func NewEDNS0EDETemplate(infoCode uint16, extraText string) (*EDNS0EDETemplate, error) + func (t *EDNS0EDETemplate) Apply(msg *dns.Msg, in EDNS0EDEInput) error + type EDNS0Modifier struct + func NewEDNS0Modifier(id string, resolver Resolver, f EDNS0ModifierFunc) (*EDNS0Modifier, error) + func (r *EDNS0Modifier) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *EDNS0Modifier) String() string + type EDNS0ModifierFunc func(q *dns.Msg, ci ClientInfo) + func EDNS0ModifierAdd(code uint16, data []byte) EDNS0ModifierFunc + func EDNS0ModifierDelete(code uint16) EDNS0ModifierFunc + type FailBack struct + func NewFailBack(id string, opt FailBackOptions, resolvers ...Resolver) *FailBack + func (r *FailBack) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *FailBack) String() string + type FailBackOptions struct + ResetAfter time.Duration + ServfailError bool + type FailRotate struct + func NewFailRotate(id string, opt FailRotateOptions, resolvers ...Resolver) *FailRotate + func (r *FailRotate) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *FailRotate) String() string + type FailRotateOptions struct + ServfailError bool + type FailRouterMetrics struct + func NewFailRouterMetrics(id string, available int) *FailRouterMetrics + type Fastest struct + func NewFastest(id string, resolvers ...Resolver) *Fastest + func (r *Fastest) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Fastest) String() string + type FastestTCP struct + func NewFastestTCP(id string, resolver Resolver, opt FastestTCPOptions) *FastestTCP + func (r *FastestTCP) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *FastestTCP) String() string + type FastestTCPOptions struct + Port int + SuccessTTLMin uint32 + WaitAll bool + type FileLoader struct + func NewFileLoader(filename string, opt FileLoaderOptions) *FileLoader + func (l *FileLoader) Load() (rules []string, err error) + type FileLoaderOptions struct + AllowFailure bool + type GenericDNSClient struct + Dialer Dialer + LocalAddr net.IP + Net string + TLSConfig *tls.Config + Timeout time.Duration + func (d GenericDNSClient) Dial(address string) (*dns.Conn, error) + type GeoIPDB struct + func NewGeoIPDB(name string, loader BlocklistLoader, geoDBFile string) (*GeoIPDB, error) + func (m *GeoIPDB) Close() error + func (m *GeoIPDB) Match(ip net.IP) (*BlocklistMatch, bool) + func (m *GeoIPDB) Reload() (IPBlocklistDB, error) + func (m *GeoIPDB) String() string + type HTTPLoader struct + func NewHTTPLoader(url string, opt HTTPLoaderOptions) *HTTPLoader + func (l *HTTPLoader) Load() (rules []string, err error) + type HTTPLoaderOptions struct + AllowFailure bool + CacheDir string + type HostsDB struct + func NewHostsDB(name string, loader BlocklistLoader) (*HostsDB, error) + func (m *HostsDB) Match(q dns.Question) ([]net.IP, []string, *BlocklistMatch, bool) + func (m *HostsDB) Reload() (BlocklistDB, error) + func (m *HostsDB) String() string + type IPBlocklistDB interface + Close func() error + Match func(ip net.IP) (*BlocklistMatch, bool) + Reload func() (IPBlocklistDB, error) + type ListenOptions struct + AllowedNet []*net.IPNet + type Listener interface + Start func() error + type ListenerMetrics struct + func NewListenerMetrics(base string, id string) *ListenerMetrics + type MemoryBackendOptions struct + Capacity int + Filename string + GCPeriod time.Duration + SaveInterval time.Duration + type MultiDB struct + func NewMultiDB(dbs ...BlocklistDB) (MultiDB, error) + func (m MultiDB) Match(q dns.Question) ([]net.IP, []string, *BlocklistMatch, bool) + func (m MultiDB) Reload() (BlocklistDB, error) + func (m MultiDB) String() string + type MultiIPDB struct + func NewMultiIPDB(dbs ...IPBlocklistDB) (MultiIPDB, error) + func (m MultiIPDB) Close() error + func (m MultiIPDB) Match(ip net.IP) (*BlocklistMatch, bool) + func (m MultiIPDB) Reload() (IPBlocklistDB, error) + func (m MultiIPDB) String() string + type Pipeline struct + func NewPipeline(id string, addr string, client DNSDialer, timeout time.Duration) *Pipeline + func (c *Pipeline) Resolve(q *dns.Msg) (*dns.Msg, error) + type QueryTimeoutError struct + func (e QueryTimeoutError) Error() string + type Random struct + func NewRandom(id string, opt RandomOptions, resolvers ...Resolver) *Random + func (r *Random) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Random) String() string + type RandomOptions struct + ResetAfter time.Duration + ServfailError bool + type RateLimiter struct + func NewRateLimiter(id string, resolver Resolver, opt RateLimiterOptions) *RateLimiter + func (r *RateLimiter) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *RateLimiter) String() string + type RateLimiterMetrics struct + type RateLimiterOptions struct + LimitResolver Resolver + Prefix4 uint8 + Prefix6 uint8 + Requests uint + Window uint + type RedisBackendOptions struct + KeyPrefix string + RedisOptions redis.Options + type RegexpDB struct + func NewRegexpDB(name string, loader BlocklistLoader) (*RegexpDB, error) + func (m *RegexpDB) Match(q dns.Question) ([]net.IP, []string, *BlocklistMatch, bool) + func (m *RegexpDB) Reload() (BlocklistDB, error) + func (m *RegexpDB) String() string + type Replace struct + func NewReplace(id string, resolver Resolver, list ...ReplaceOperation) (*Replace, error) + func (r *Replace) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Replace) String() string + type ReplaceOperation struct + From string + To string + type Resolver interface + Resolve func(*dns.Msg, ClientInfo) (*dns.Msg, error) + type ResponseBlocklistIP struct + func NewResponseBlocklistIP(id string, resolver Resolver, opt ResponseBlocklistIPOptions) (*ResponseBlocklistIP, error) + func (r *ResponseBlocklistIP) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ResponseBlocklistIP) String() string + type ResponseBlocklistIPOptions struct + BlocklistDB IPBlocklistDB + BlocklistRefresh time.Duration + BlocklistResolver Resolver + EDNS0EDETemplate *EDNS0EDETemplate + Filter bool + Inverted bool + type ResponseBlocklistName struct + func NewResponseBlocklistName(id string, resolver Resolver, opt ResponseBlocklistNameOptions) (*ResponseBlocklistName, error) + func (r *ResponseBlocklistName) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ResponseBlocklistName) String() string + type ResponseBlocklistNameOptions struct + BlocklistDB BlocklistDB + BlocklistRefresh time.Duration + BlocklistResolver Resolver + EDNS0EDETemplate *EDNS0EDETemplate + Inverted bool + type ResponseCollapse struct + func NewResponseCollapse(id string, resolver Resolver, opt ResponseCollapseOptions) *ResponseCollapse + func (r *ResponseCollapse) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ResponseCollapse) String() string + type ResponseCollapseOptions struct + NullRCode int + type ResponseMinimize struct + func NewResponseMinimize(id string, resolver Resolver) *ResponseMinimize + func (r *ResponseMinimize) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *ResponseMinimize) String() string + type RoundRobin struct + func NewRoundRobin(id string, resolvers ...Resolver) *RoundRobin + func (r *RoundRobin) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *RoundRobin) String() string + type Router struct + func NewRouter(id string) *Router + func (r *Router) Add(routes ...*route) + func (r *Router) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Router) String() string + type RouterMetrics struct + func NewRouterMetrics(id string, available int) *RouterMetrics + type Socks5Dialer struct + func NewSocks5Dialer(addr string, opt Socks5DialerOptions) *Socks5Dialer + func (d *Socks5Dialer) Dial(network string, address string) (net.Conn, error) + type Socks5DialerOptions struct + LocalAddr net.IP + Password string + ResolveLocal bool + TCPTimeout time.Duration + UDPTimeout time.Duration + Username string + type StaticLoader struct + func NewStaticLoader(rules []string) *StaticLoader + func (l *StaticLoader) Load() ([]string, error) + type StaticResolver struct + func NewStaticResolver(id string, opt StaticResolverOptions) (*StaticResolver, error) + func (r *StaticResolver) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *StaticResolver) String() string + type StaticResolverOptions struct + Answer []string + EDNS0EDETemplate *EDNS0EDETemplate + Extra []string + NS []string + RCode int + Truncate bool + type StaticTemplateResolver struct + func NewStaticTemplateResolver(id string, opt StaticResolverOptions) (*StaticTemplateResolver, error) + func (r *StaticTemplateResolver) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *StaticTemplateResolver) String() string + type Syslog struct + func NewSyslog(id string, resolver Resolver, opt SyslogOptions) *Syslog + func (r *Syslog) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *Syslog) String() string + type SyslogOptions struct + Address string + LogRequest bool + LogResponse bool + Network string + Priority int + Tag string + Verbose bool + type TTLModifier struct + func NewTTLModifier(id string, resolver Resolver, opt TTLModifierOptions) *TTLModifier + func (r *TTLModifier) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *TTLModifier) String() string + type TTLModifierOptions struct + MaxTTL uint32 + MinTTL uint32 + SelectFunc TTLSelectFunc + type TTLSelectFunc func(*TTLModifier, *dns.Msg) bool + type Template struct + func NewTemplate(text string) (*Template, error) + func (t *Template) Apply(input templateInput) (string, error) + type TimeOfDay struct + func (t *TimeOfDay) String() string + type TruncateRetry struct + func NewTruncateRetry(id string, resolver, retryResolver Resolver, opt TruncateRetryOptions) *TruncateRetry + func (r *TruncateRetry) Resolve(q *dns.Msg, ci ClientInfo) (*dns.Msg, error) + func (r *TruncateRetry) String() string + type TruncateRetryOptions struct