github.com/chenbh/concourse/v6@v6.4.2/worker/workercmd/dns.go (about) 1 package workercmd 2 3 import ( 4 "fmt" 5 6 "github.com/miekg/dns" 7 ) 8 9 type DNSConfig struct { 10 Enable bool `long:"enable" description:"Enable proxy DNS server."` 11 } 12 13 func (config DNSConfig) Server() (*dns.Server, error) { 14 resolvConf, err := dns.ClientConfigFromFile("/etc/resolv.conf") 15 if err != nil { 16 return nil, err 17 } 18 19 var client dns.Client 20 mux := dns.NewServeMux() 21 mux.HandleFunc(".", func(w dns.ResponseWriter, r *dns.Msg) { 22 for _, server := range resolvConf.Servers { 23 response, _, err := client.Exchange(r, fmt.Sprintf("%s:%s", server, resolvConf.Port)) 24 if err == nil { 25 response.Compress = true 26 _ = w.WriteMsg(response) 27 break 28 } 29 } 30 31 if err != nil { 32 var m *dns.Msg 33 m.SetRcode(r, dns.RcodeRefused) 34 _ = w.WriteMsg(m) 35 } 36 }) 37 38 return &dns.Server{ 39 Addr: ":53", 40 Net: "udp", 41 Handler: mux, 42 }, nil 43 }