dns

package
v0.59.2 Latest Latest
Warning

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

Go to latest
Published: Oct 2, 2025 License: BSD-3-Clause Imports: 57 Imported by: 0

Documentation

Index

Constants

View Source
const (
	PriorityMgmtCache = 150
	PriorityLocal     = 100
	PriorityDNSRoute  = 75
	PriorityUpstream  = 50
	PriorityDefault   = 1
	PriorityFallback  = -100
)
View Source
const (
	UpstreamTimeout = 4 * time.Second
	// ClientTimeout is the timeout for the dns.Client.
	// Set longer than UpstreamTimeout to ensure context timeout takes precedence
	ClientTimeout = 5 * time.Second
)
View Source
const (
	DefaultPort = 53
)

Variables

This section is empty.

Functions

func ExchangeWithFallback added in v0.40.1

func ExchangeWithFallback(ctx context.Context, client *dns.Client, r *dns.Msg, upstream string) (*dns.Msg, time.Duration, error)

ExchangeWithFallback exchanges a DNS message with the upstream server. It first tries to use UDP, and if it is truncated, it falls back to TCP. If the passed context is nil, this will use Exchange instead of ExchangeContext.

func FormatPeerStatus added in v0.56.1

func FormatPeerStatus(peerState *peer.State) string

FormatPeerStatus formats peer connection status information for debugging DNS timeouts

func GenerateRequestID added in v0.47.2

func GenerateRequestID() string

func GetClientPrivate added in v0.47.0

func GetClientPrivate(ip netip.Addr, interfaceName string, dialTimeout time.Duration) (*dns.Client, error)

func SetCurrentMTU added in v0.56.1

func SetCurrentMTU(mtu uint16)

Types

type DefaultServer added in v0.10.7

type DefaultServer struct {
	// contains filtered or unexported fields
}

DefaultServer dns server object

func NewDefaultServer added in v0.10.7

func NewDefaultServer(ctx context.Context, config DefaultServerConfig) (*DefaultServer, error)

NewDefaultServer returns a new dns server

func NewDefaultServerIos added in v0.25.0

func NewDefaultServerIos(
	ctx context.Context,
	wgInterface WGIface,
	iosDnsManager IosDnsManager,
	statusRecorder *peer.Status,
	disableSys bool,
) *DefaultServer

NewDefaultServerIos returns a new dns server. It optimized for ios

func NewDefaultServerPermanentUpstream added in v0.21.9

func NewDefaultServerPermanentUpstream(
	ctx context.Context,
	wgInterface WGIface,
	hostsDnsList []netip.AddrPort,
	config nbdns.Config,
	listener listener.NetworkChangeListener,
	statusRecorder *peer.Status,
	disableSys bool,
) *DefaultServer

NewDefaultServerPermanentUpstream returns a new dns server. It optimized for mobile systems

func (*DefaultServer) DeregisterHandler added in v0.35.0

func (s *DefaultServer) DeregisterHandler(domains domain.List, priority int)

DeregisterHandler deregisters the handler for the given domains with the given priority.

func (*DefaultServer) DnsIP added in v0.21.2

func (s *DefaultServer) DnsIP() netip.Addr

DnsIP returns the DNS resolver server IP address

When kernel space interface used it return real DNS server listener IP address For bind interface, fake DNS resolver address returned (second last IP address from Nebird network)

func (*DefaultServer) Initialize added in v0.21.4

func (s *DefaultServer) Initialize() (err error)

Initialize instantiate host manager and the dns service

func (*DefaultServer) OnUpdatedHostDNSServer added in v0.21.9

func (s *DefaultServer) OnUpdatedHostDNSServer(hostsDnsList []netip.AddrPort)

OnUpdatedHostDNSServer update the DNS servers addresses for root zones It will be applied if the mgm server do not enforce DNS settings for root zone

func (*DefaultServer) PopulateManagementDomain added in v0.56.1

func (s *DefaultServer) PopulateManagementDomain(mgmtURL *url.URL) error

PopulateManagementDomain populates the DNS cache with management domain

func (*DefaultServer) ProbeAvailability added in v0.25.5

func (s *DefaultServer) ProbeAvailability()

ProbeAvailability tests each upstream group's servers for availability and deactivates the group if no server responds

func (*DefaultServer) RegisterHandler added in v0.35.0

func (s *DefaultServer) RegisterHandler(domains domain.List, handler dns.Handler, priority int)

RegisterHandler registers a handler for the given domains with the given priority. Any previously registered handler for the same domain and priority will be replaced.

func (*DefaultServer) SearchDomains added in v0.24.3

func (s *DefaultServer) SearchDomains() []string

func (*DefaultServer) Stop added in v0.10.7

func (s *DefaultServer) Stop()

Stop stops the server

func (*DefaultServer) UpdateDNSServer added in v0.10.7

func (s *DefaultServer) UpdateDNSServer(serial uint64, update nbdns.Config) error

UpdateDNSServer processes an update received from the management service

func (*DefaultServer) UpdateServerConfig added in v0.56.1

func (s *DefaultServer) UpdateServerConfig(domains dnsconfig.ServerDomains) error

type DefaultServerConfig added in v0.56.1

type DefaultServerConfig struct {
	WgInterface    WGIface
	CustomAddress  string
	StatusRecorder *peer.Status
	StateManager   *statemanager.Manager
	DisableSys     bool
}

DefaultServerConfig holds configuration parameters for NewDefaultServer

type DomainConfig added in v0.25.0

type DomainConfig struct {
	Disabled  bool   `json:"disabled"`
	Domain    string `json:"domain"`
	MatchOnly bool   `json:"matchOnly"`
}

type HandlerChain added in v0.35.0

type HandlerChain struct {
	// contains filtered or unexported fields
}

HandlerChain represents a prioritized chain of DNS handlers

func NewHandlerChain added in v0.35.0

func NewHandlerChain() *HandlerChain

func (*HandlerChain) AddHandler added in v0.35.0

func (c *HandlerChain) AddHandler(pattern string, handler dns.Handler, priority int)

AddHandler adds a new handler to the chain, replacing any existing handler with the same pattern and priority

func (*HandlerChain) RemoveHandler added in v0.35.0

func (c *HandlerChain) RemoveHandler(pattern string, priority int)

RemoveHandler removes a handler for the given pattern and priority

func (*HandlerChain) ServeDNS added in v0.35.0

func (c *HandlerChain) ServeDNS(w dns.ResponseWriter, r *dns.Msg)

type HandlerEntry added in v0.35.0

type HandlerEntry struct {
	Handler         dns.Handler
	Priority        int
	Pattern         string
	OrigPattern     string
	IsWildcard      bool
	MatchSubdomains bool
}

type HostDNSConfig added in v0.25.0

type HostDNSConfig struct {
	Domains    []DomainConfig `json:"domains"`
	RouteAll   bool           `json:"routeAll"`
	ServerIP   netip.Addr     `json:"serverIP"`
	ServerPort int            `json:"serverPort"`
}

type IosDnsManager added in v0.25.0

type IosDnsManager interface {
	ApplyDns(string)
}

IosDnsManager is a dns manager interface for iOS

type MockServer added in v0.10.7

type MockServer struct {
	InitializeFunc         func() error
	StopFunc               func()
	UpdateDNSServerFunc    func(serial uint64, update nbdns.Config) error
	RegisterHandlerFunc    func(domain.List, dns.Handler, int)
	DeregisterHandlerFunc  func(domain.List, int)
	UpdateServerConfigFunc func(domains dnsconfig.ServerDomains) error
}

MockServer is the mock instance of a dns server

func (*MockServer) DeregisterHandler added in v0.35.0

func (m *MockServer) DeregisterHandler(domains domain.List, priority int)

func (*MockServer) DnsIP added in v0.21.2

func (m *MockServer) DnsIP() netip.Addr

func (*MockServer) Initialize added in v0.21.4

func (m *MockServer) Initialize() error

Initialize mock implementation of Initialize from Server interface

func (*MockServer) OnUpdatedHostDNSServer added in v0.21.9

func (m *MockServer) OnUpdatedHostDNSServer(addrs []netip.AddrPort)

func (*MockServer) PopulateManagementDomain added in v0.56.1

func (m *MockServer) PopulateManagementDomain(mgmtURL *url.URL) error

func (*MockServer) ProbeAvailability added in v0.25.5

func (m *MockServer) ProbeAvailability()

ProbeAvailability mocks implementation of ProbeAvailability from the Server interface

func (*MockServer) RegisterHandler added in v0.35.0

func (m *MockServer) RegisterHandler(domains domain.List, handler dns.Handler, priority int)

func (*MockServer) SearchDomains added in v0.24.3

func (m *MockServer) SearchDomains() []string

func (*MockServer) Stop added in v0.10.7

func (m *MockServer) Stop()

Stop mock implementation of Stop from Server interface

func (*MockServer) UpdateDNSServer added in v0.10.7

func (m *MockServer) UpdateDNSServer(serial uint64, update nbdns.Config) error

UpdateDNSServer mock implementation of UpdateDNSServer from Server interface

func (*MockServer) UpdateServerConfig added in v0.56.1

func (m *MockServer) UpdateServerConfig(domains dnsconfig.ServerDomains) error

type ReadyListener added in v0.21.9

type ReadyListener interface {
	OnReady()
}

ReadyListener is a notification mechanism what indicate the server is ready to handle host dns address changes

type ResponseWriterChain added in v0.35.0

type ResponseWriterChain struct {
	dns.ResponseWriter
	// contains filtered or unexported fields
}

ResponseWriterChain wraps a dns.ResponseWriter to track if handler wants to continue chain

func (*ResponseWriterChain) GetOrigPattern added in v0.35.0

func (w *ResponseWriterChain) GetOrigPattern() string

GetOrigPattern returns the original pattern of the handler that wrote the response

func (*ResponseWriterChain) WriteMsg added in v0.35.0

func (w *ResponseWriterChain) WriteMsg(m *dns.Msg) error

type Server

type Server interface {
	RegisterHandler(domains domain.List, handler dns.Handler, priority int)
	DeregisterHandler(domains domain.List, priority int)
	Initialize() error
	Stop()
	DnsIP() netip.Addr
	UpdateDNSServer(serial uint64, update nbdns.Config) error
	OnUpdatedHostDNSServer(addrs []netip.AddrPort)
	SearchDomains() []string
	ProbeAvailability()
	UpdateServerConfig(domains dnsconfig.ServerDomains) error
	PopulateManagementDomain(mgmtURL *url.URL) error
}

Server is a dns server interface

func GetServerDns added in v0.21.9

func GetServerDns() (Server, error)

GetServerDns export the DNS server instance in static way. It used by the Mobile client

type ServiceViaMemory added in v0.28.7

type ServiceViaMemory struct {
	// contains filtered or unexported fields
}

func NewServiceViaMemory added in v0.28.7

func NewServiceViaMemory(wgIface WGIface) *ServiceViaMemory

func (*ServiceViaMemory) DeregisterMux added in v0.28.7

func (s *ServiceViaMemory) DeregisterMux(pattern string)

func (*ServiceViaMemory) Listen added in v0.28.7

func (s *ServiceViaMemory) Listen() error

func (*ServiceViaMemory) RegisterMux added in v0.28.7

func (s *ServiceViaMemory) RegisterMux(pattern string, handler dns.Handler)

func (*ServiceViaMemory) RuntimeIP added in v0.28.7

func (s *ServiceViaMemory) RuntimeIP() netip.Addr

func (*ServiceViaMemory) RuntimePort added in v0.28.7

func (s *ServiceViaMemory) RuntimePort() int

func (*ServiceViaMemory) Stop added in v0.28.7

func (s *ServiceViaMemory) Stop()

type ShutdownState added in v0.30.3

type ShutdownState struct {
	ManagerType osManagerType
	DNSAddress  netip.Addr
	WgIface     string
}

func (*ShutdownState) Cleanup added in v0.30.3

func (s *ShutdownState) Cleanup() error

func (*ShutdownState) Name added in v0.30.3

func (s *ShutdownState) Name() string

type SubdomainMatcher added in v0.35.0

type SubdomainMatcher interface {
	dns.Handler
	MatchSubdomains() bool
}

type SystemDNSSettings added in v0.28.5

type SystemDNSSettings struct {
	Domains    []string
	ServerIP   netip.Addr
	ServerPort int
}

type UpstreamResolver added in v0.25.0

type UpstreamResolver interface {
	// contains filtered or unexported methods
}

type WGIface added in v0.21.9

type WGIface interface {
	Name() string
	Address() wgaddr.Address
	ToInterface() *net.Interface
	IsUserspaceBind() bool
	GetFilter() device.PacketFilter
	GetDevice() *device.FilteredDevice
}

WGIface defines subset methods of interface required for manager

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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