resolver
packageThis package is not in the latest version of its module.
Details
Validgo.mod file
The Go module system was introduced in Go 1.11 and is the official dependency management solution for Go.
Redistributable license
Redistributable licenses place minimal restrictions on how software can be used, modified, and redistributed.
Tagged version
Modules with tagged versions give importers more predictable builds.
Stable version
When a project reaches major version v1 it is considered stable.
- Learn more about best practices
Repository
Links
Documentation¶
Overview¶
Package resolver implements a stub DNS resolver that can also serverecords out of an internal local zone.
Index¶
- func ShouldUseRoutes(knobs *controlknobs.Knobs) bool
- func WriteDNSResolver(w *bufio.Writer, r *dnstype.Resolver)
- func WriteDNSResolvers(w *bufio.Writer, resolvers []*dnstype.Resolver)
- func WriteIPPorts(w *bufio.Writer, vv []netip.AddrPort)
- func WriteRoutes(w *bufio.Writer, routes map[dnsname.FQDN][]*dnstype.Resolver)
- type Config
- type ForwardLinkSelector
- type Resolver
- func (r *Resolver) Close()
- func (r *Resolver) GetUpstreamResolvers(name dnsname.FQDN) []*dnstype.Resolver
- func (r *Resolver) HandlePeerDNSQuery(ctx context.Context, q []byte, from netip.AddrPort, ...) (res []byte, err error)
- func (r *Resolver) Query(ctx context.Context, bs []byte, family string, from netip.AddrPort) ([]byte, error)
- func (r *Resolver) SetConfig(cfg Config) error
- func (r *Resolver) TestOnlySetHook(hook func(Config))
Constants¶
This section is empty.
Variables¶
This section is empty.
Functions¶
funcShouldUseRoutes¶added inv1.84.0
func ShouldUseRoutes(knobs *controlknobs.Knobs)bool
ShouldUseRoutes reports whether the DNS resolver should consider routes when dialingupstream nameservers via TCP.
If true, routes should be considered (tsdial.Dialer.UserDial), otherwise deferto the system routes (tsdial.Dialer.SystemDial).
TODO(nickkhyl): Updatetsdial.Dialer to reuse the bart.Table we create in net/tstun.Wrapperto avoid having two bart tables in memory, especially on iOS. Once that's done,we can get rid of the nodeAttr/control knob and always use UserDial for DNS.
See tailscale/tailscale#12027.
funcWriteDNSResolver¶added inv1.16.0
WriteDNSResolver writes r to w.
funcWriteDNSResolvers¶added inv1.16.0
WriteDNSResolvers writes resolvers to w.
funcWriteIPPorts¶added inv1.12.0
WriteIPPorts writes vv to w.
Types¶
typeConfig¶
type Config struct {// Routes is a map of DNS name suffix to the resolvers to use for// queries within that suffix.// Queries only match the most specific suffix.// To register a "default route", add an entry for ".".Routes map[dnsname.FQDN][]*dnstype.Resolver// LocalHosts is a map of FQDNs to corresponding IPs.Hosts map[dnsname.FQDN][]netip.Addr// LocalDomains is a list of DNS name suffixes that should not be// routed to upstream resolvers.LocalDomains []dnsname.FQDN}Config is a resolver configuration.Given a Config, queries are resolved in the following order:If the query is an exact match for an entry in LocalHosts, return that.Else if the query suffix matches an entry in LocalDomains, return NXDOMAIN.Else forward the query to the most specific matching entry in Routes.Else return SERVFAIL.
func (*Config)RoutesRequireNoCustomResolvers¶added inv1.68.0
RoutesRequireNoCustomResolvers returns true if this resolver.Config only contains routesthat do not specify a set of custom resolver(s), i.e. they can be resolved by the localupstream DNS resolver.
func (*Config)WriteToBufioWriter¶added inv1.12.0
WriteToBufioWriter write a debug version of c for logs to w, omittingspammy stuff like *.arpa entries and replacing it with a total count.
typeForwardLinkSelector¶added inv1.10.0
typeResolver¶
type Resolver struct {// contains filtered or unexported fields}Resolver is a DNS resolver for nodes on the Tailscale network,associating them with domain names of the form <mynode>.<mydomain>.<root>.If it is asked to resolve a domain that is not of that form,it delegates to upstream nameservers if any are set.
funcNew¶
func New(logflogger.Logf, linkSelForwardLinkSelector, dialer *tsdial.Dialer, health *health.Tracker, knobs *controlknobs.Knobs) *Resolver
New returns a new resolver.dialer and health must be non-nil.
func (*Resolver)Close¶
func (r *Resolver) Close()
Close shuts down the resolver and ensures poll goroutines have exited.The Resolver cannot be used again after Close is called.
func (*Resolver)GetUpstreamResolvers¶added inv1.76.0
GetUpstreamResolvers returns the resolvers that would be used to resolvethe given FQDN.
func (*Resolver)HandlePeerDNSQuery¶added inv1.54.0
func (r *Resolver) HandlePeerDNSQuery(ctxcontext.Context, q []byte, fromnetip.AddrPort, allowName func(namestring)bool) (res []byte, errerror)
HandlePeerDNSQuery handles a DNS query that arrived from a peervia the peerapi's DoH server. This is used when the localnode is being an exit node or an app connector.
The provided allowName callback is whether a DNS query for a name(as found by parsing q) is allowed.
In most (all?) cases, err will be nil. A bogus DNS query q willstill result in a response DNS packet (saying there's a failure)and a nil error.TODO: figure out if we even need an error result.