mirror of
https://github.com/tailscale/tailscale.git
synced 2024-12-01 22:15:51 +00:00
9502b515f1
We currently plumb full URLs for DNS resolvers from the control server down to the client. But when we pass the values into the net/dns package, we throw away any URL that isn't a bare IP. This commit continues the plumbing, and gets the URL all the way to the built in forwarder. (It stops before plumbing URLs into the OS configurations that can handle them.) For #2596 Signed-off-by: David Crawshaw <crawshaw@tailscale.com>
33 lines
1.2 KiB
Go
33 lines
1.2 KiB
Go
// Copyright (c) 2021 Tailscale Inc & AUTHORS All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// Package dnstype defines types for working with DNS.
|
|
package dnstype
|
|
|
|
//go:generate go run tailscale.com/cmd/cloner --type=Resolver --clonefunc=true --output=dnstype_clone.go
|
|
|
|
import "inet.af/netaddr"
|
|
|
|
// Resolver is the configuration for one DNS resolver.
|
|
type Resolver struct {
|
|
// Addr is the address of the DNS resolver, one of:
|
|
// - A plain IP address for a "classic" UDP+TCP DNS resolver
|
|
// - [TODO] "tls://resolver.com" for DNS over TCP+TLS
|
|
// - [TODO] "https://resolver.com/query-tmpl" for DNS over HTTPS
|
|
Addr string `json:",omitempty"`
|
|
|
|
// BootstrapResolution is an optional suggested resolution for the
|
|
// DoT/DoH resolver, if the resolver URL does not reference an IP
|
|
// address directly.
|
|
// BootstrapResolution may be empty, in which case clients should
|
|
// look up the DoT/DoH server using their local "classic" DNS
|
|
// resolver.
|
|
BootstrapResolution []netaddr.IP `json:",omitempty"`
|
|
}
|
|
|
|
// ResolverFromIP defines a Resolver for ip on port 53.
|
|
func ResolverFromIP(ip netaddr.IP) Resolver {
|
|
return Resolver{Addr: netaddr.IPPortFrom(ip, 53).String()}
|
|
}
|