dns

package
v1.3.0 Latest Latest
Warning

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

Go to latest
Published: Aug 3, 2026 License: MIT Imports: 10 Imported by: 0

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

View Source
const DefaultListenAddr = ":10053"

DefaultListenAddr is the default UDP/TCP address the DNS server binds to.

View Source
const DefaultReadTimeout = 5 * time.Second

DefaultReadTimeout is the read timeout for the underlying DNS server.

View Source
const DefaultResolveIP = "127.0.0.1"

DefaultResolveIP is the IP address returned for every registered hostname.

View Source
const DefaultWriteTimeout = 5 * time.Second

DefaultWriteTimeout is the write timeout for the underlying DNS server.

Variables

View Source
var ErrIPv4Required = errors.New("resolve IP must be an IPv4 address")

ErrIPv4Required is returned when the configured resolve IP is not an IPv4 address.

View Source
var ErrInvalidResolveIP = errors.New("invalid resolve IP")

ErrInvalidResolveIP is returned when the configured resolve IP cannot be parsed.

Functions

func SyntheticHostname

func SyntheticHostname(resourceID, randomSuffix, region, serviceType string) string

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

func New(cfg Config) (*Server, error)

New creates a new Server with the given config. Zero-value Config fields are filled with defaults.

func (*Server) Deregister

func (s *Server) Deregister(hostname string)

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

func (s *Server) IsRegistered(hostname string) bool

IsRegistered reports whether the hostname is registered.

func (*Server) Register

func (s *Server) Register(hostname string)

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

func (s *Server) RegisterRecord(hostname, recordType string, values []string)

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.

func (*Server) Start

func (s *Server) Start(ctx context.Context) error

Start launches the DNS server in the background. It returns once both the UDP and TCP servers are ready to accept queries. Call Stop or cancel ctx to shut down.

func (*Server) Stop

func (s *Server) Stop() error

Stop shuts down both the UDP and TCP servers.

Jump to

Keyboard shortcuts

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