package pancheri import ( "github.com/miekg/dns" "github.com/sirupsen/logrus" ) type Resolver struct { client *dns.Client upstream string } func NewResolver(upstream string) *Resolver { return &Resolver{ client: new(dns.Client), upstream: upstream, } } func (r *Resolver) Resolve(domain string, qtype uint16) (*dns.Msg, error) { logrus.WithFields(logrus.Fields{ "domain": domain, "qtype": qtype, }).Trace("performing upstream resolution") m := new(dns.Msg) m.SetQuestion(dns.Fqdn(domain), qtype) m.RecursionDesired = true in, _, err := r.client.Exchange(m, r.upstream) if err != nil { return nil, err } return in, nil }