dns

package
v0.1.6 Latest Latest
Warning

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

Go to latest
Published: Mar 29, 2026 License: AGPL-3.0 Imports: 14 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func BootstrapZone added in v0.1.3

func BootstrapZone(ctx context.Context, client *PowerDNSClient, dnsCfg config.DNSConfig, publicHostname string, logger *slog.Logger) error

BootstrapZone ensures the DNS zone exists in PowerDNS, creating it if necessary. Retries with exponential backoff since PowerDNS may not be ready yet.

Types

type CNAMEResolver added in v0.1.1

type CNAMEResolver interface {
	Resolve(ctx context.Context, domain string) (string, error)
}

CNAMEResolver resolves CNAME records for a given domain.

type DNSCNAMEResolver added in v0.1.1

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

DNSCNAMEResolver queries CNAME records directly using miekg/dns.

func NewDNSCNAMEResolver added in v0.1.1

func NewDNSCNAMEResolver(resolver string, timeout time.Duration) *DNSCNAMEResolver

NewDNSCNAMEResolver creates a CNAME resolver. If resolver is empty, it reads the system's /etc/resolv.conf to determine the default DNS server.

func (*DNSCNAMEResolver) Resolve added in v0.1.1

func (r *DNSCNAMEResolver) Resolve(ctx context.Context, domain string) (string, error)

type PowerDNSClient

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

func NewPowerDNSClient

func NewPowerDNSClient(cfg config.PowerDNSConfig, logger *slog.Logger) *PowerDNSClient

func (*PowerDNSClient) CreateZone added in v0.1.3

func (c *PowerDNSClient) CreateZone(ctx context.Context, zone, baseDomain, primaryNS string, nameservers []string, relayHostname string) error

CreateZone creates a new zone with SOA, NS, and wildcard CNAME records. primaryNS is the SOA MNAME (the zone master / hidden primary). nameservers are the NS records that resolvers use (may differ from primaryNS in hidden-primary mode). Returns nil if the zone already exists (409 Conflict).

func (*PowerDNSClient) DeleteARecords

func (c *PowerDNSClient) DeleteARecords(ctx context.Context, zone, name string) error

DeleteARecords removes all A records for a name.

func (*PowerDNSClient) DeleteTXTRecord

func (c *PowerDNSClient) DeleteTXTRecord(ctx context.Context, zone, name string) error

DeleteTXTRecord removes a TXT record.

func (*PowerDNSClient) GetZone added in v0.1.3

func (c *PowerDNSClient) GetZone(ctx context.Context, zone string) (bool, error)

GetZone checks if a zone exists in PowerDNS. Returns true if it exists.

func (*PowerDNSClient) Healthy

func (c *PowerDNSClient) Healthy(ctx context.Context) error

Healthy checks if the PowerDNS API is reachable.

func (*PowerDNSClient) SetARecords

func (c *PowerDNSClient) SetARecords(ctx context.Context, zone, name string, ips []string, ttl int) error

SetARecords replaces all A records for a name with the given IPs.

func (*PowerDNSClient) SetRelayRecords

func (c *PowerDNSClient) SetRelayRecords(ctx context.Context, zone, name string, ipv4, ipv6 []string, ttl int) error

SetRelayRecords atomically replaces A and AAAA records for the relay hostname. Empty slices cause the corresponding record type to be deleted.

func (*PowerDNSClient) SetTXTRecord

func (c *PowerDNSClient) SetTXTRecord(ctx context.Context, zone, name, value string, ttl int) error

SetTXTRecord creates or replaces a TXT record.

type Proxy added in v0.1.3

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

Proxy forwards DNS traffic from a listen address to an upstream address.

func NewProxy added in v0.1.3

func NewProxy(listenAddr, upstreamAddr string, logger *slog.Logger) *Proxy

NewProxy creates a DNS proxy that forwards traffic from listenAddr to upstreamAddr.

func (*Proxy) Close added in v0.1.3

func (p *Proxy) Close()

Close shuts down the proxy and waits for all goroutines to finish.

func (*Proxy) Start added in v0.1.3

func (p *Proxy) Start(ctx context.Context) error

Start begins listening on UDP and TCP for DNS traffic.

type RRSet

type RRSet struct {
	Name       string   `json:"name"`
	Type       string   `json:"type"`
	TTL        int      `json:"ttl"`
	ChangeType string   `json:"changetype"`
	Records    []Record `json:"records"`
}

RRSet represents a PowerDNS resource record set.

type Record

type Record struct {
	Content  string `json:"content"`
	Disabled bool   `json:"disabled"`
}

Jump to

Keyboard shortcuts

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