Documentation
¶
Overview ¶
Package dns provides an embedded DNS server for Gopherstack that resolves synthetic AWS-style hostnames (e.g. my-cluster.abc.us-east-1.cache.amazonaws.com) back to a configured IP address (typically 127.0.0.1). It also supports per-record values for A, CNAME, and AAAA records via RegisterRecord.
Usage:
srv, err := dns.New(dns.Config{ListenAddr: ":10053", ResolveIP: "127.0.0.1"})
srv.Register("my-cluster.abc.us-east-1.cache.amazonaws.com")
srv.RegisterRecord("www.example.com", "A", []string{"1.2.3.4"})
if err := srv.Start(ctx); err != nil { ... }
defer srv.Stop()
Index ¶
Constants ¶
const DefaultListenAddr = ":10053"
DefaultListenAddr is the default UDP/TCP address the DNS server binds to.
const DefaultReadTimeout = 5 * time.Second
DefaultReadTimeout is the read timeout for the underlying DNS server.
const DefaultResolveIP = "127.0.0.1"
DefaultResolveIP is the IP address returned for every registered hostname.
const DefaultWriteTimeout = 5 * time.Second
DefaultWriteTimeout is the write timeout for the underlying DNS server.
Variables ¶
var ErrIPv4Required = errors.New("resolve IP must be an IPv4 address")
ErrIPv4Required is returned when the configured resolve IP is not an IPv4 address.
var ErrInvalidResolveIP = errors.New("invalid resolve IP")
ErrInvalidResolveIP is returned when the configured resolve IP cannot be parsed.
Functions ¶
func SyntheticHostname ¶
SyntheticHostname generates an AWS-style synthetic hostname for a resource. serviceType is one of: "cache", "rds", "redshift", "es".
Types ¶
type Config ¶
type Config struct {
// Logger is an optional structured logger.
Logger *slog.Logger
// ListenAddr is the host:port to bind (default ":10053").
ListenAddr string
// ResolveIP is the IP address returned for every registered name (default "127.0.0.1").
ResolveIP string
}
Config holds the configuration for the embedded DNS server.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server is an embedded DNS server that answers A queries for registered synthetic hostnames with a fixed IP address.
func New ¶
New creates a new Server with the given config. Zero-value Config fields are filled with defaults.
func (*Server) Deregister ¶
Deregister removes a hostname from the set the server will resolve. It clears both simple registrations (Register) and typed records (RegisterRecord). Calls are safe for concurrent use.
func (*Server) IsRegistered ¶
IsRegistered reports whether the hostname is registered.
func (*Server) Register ¶
Register adds a hostname to the set of names the server will resolve. The trailing dot required by DNS is added automatically. Hostnames are stored in lower-case so lookups are case-insensitive. Calls are safe for concurrent use.
func (*Server) RegisterRecord ¶
RegisterRecord stores per-record typed values for a hostname. recordType must be one of "A", "CNAME", "AAAA", or "ALIAS". Multiple calls with the same hostname and recordType append values. Calls are safe for concurrent use.