From 8d32bca7424823a1a848939d9d399f10a3add34f Mon Sep 17 00:00:00 2001 From: wweir Date: Wed, 21 Jul 2021 17:51:48 +0800 Subject: [PATCH] change dns solution config --- cmd/sower/main.go | 12 +++++++----- router/dns.go | 3 +-- router/router.go | 4 +++- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/cmd/sower/main.go b/cmd/sower/main.go index a6f1ac2..e234df6 100644 --- a/cmd/sower/main.go +++ b/cmd/sower/main.go @@ -26,14 +26,14 @@ var ( conf = struct { Remote struct { - Type string `default:"sower" usage:"remote proxy protocol, sower/trojan"` + Type string `default:"sower" required:"true" usage:"remote proxy protocol, sower/trojan"` Addr string `required:"true" usage:"remote proxy address, eg: proxy.com"` Password string `required:"true" usage:"remote proxy password"` } DNS struct { Disable bool `usage:"disable DNS proxy"` - Serve string `usage:"dns server ip, default all, eg: 127.0.0.1"` + Serve string `default:"127.0.0.1" required:"true" usage:"dns server ip"` Fallback string `default:"223.5.5.5" usage:"fallback dns server"` } Socks5 struct { @@ -90,7 +90,7 @@ func init() { func main() { proxtDial := GenProxyDial(conf.Remote.Type, conf.Remote.Addr, conf.Remote.Password) - r := router.NewRouter(conf.DNS.Fallback, conf.Router.Country.MMDB, proxtDial) + r := router.NewRouter(conf.DNS.Serve, conf.DNS.Fallback, conf.Router.Country.MMDB, proxtDial) r.SetRules(conf.Router.Block.Rules, conf.Router.Direct.Rules, conf.Router.Proxy.Rules, conf.Router.Country.Rules) @@ -112,8 +112,10 @@ func main() { } go ServeHTTPS(lnHTTPS, r) - log.Info().Msg("DNS proxy started") - if err := dns.ListenAndServe(conf.DNS.Serve, "udp", r); err != nil { + log.Info(). + Str("ip", conf.DNS.Serve). + Msg("DNS proxy started") + if err := dns.ListenAndServe(net.JoinHostPort(conf.DNS.Serve, "53"), "udp", r); err != nil { log.Fatal().Err(err).Msg("serve dns") } }() diff --git a/router/dns.go b/router/dns.go index 773c4d8..48452d1 100644 --- a/router/dns.go +++ b/router/dns.go @@ -30,8 +30,7 @@ func (r *Router) ServeDNS(w dns.ResponseWriter, req *dns.Msg) { case r.directRule.Match(domain): case r.proxyRule.Match(domain): - host, _, _ := net.SplitHostPort(w.LocalAddr().String()) - w.WriteMsg(r.dnsProxyA(domain, net.ParseIP(host), req)) + w.WriteMsg(r.dnsProxyA(domain, r.dns.serveIP, req)) return } diff --git a/router/router.go b/router/router.go index 9c1fdc8..5e7e265 100644 --- a/router/router.go +++ b/router/router.go @@ -33,6 +33,7 @@ type Router struct { dns struct { fallbackDNS string + serveIP net.IP dns.Client connCh chan *dns.Conn } @@ -43,12 +44,13 @@ type Router struct { } } -func NewRouter(fallbackDNS, mmdbFile string, proxyDial ProxyDialFn) *Router { +func NewRouter(serveIP, fallbackDNS, mmdbFile string, proxyDial ProxyDialFn) *Router { r := Router{ ProxyDial: proxyDial, cache: mem.New(time.Hour), // TODO: config } + r.dns.serveIP = net.ParseIP(serveIP) r.dns.fallbackDNS = fallbackDNS r.dns.connCh = make(chan *dns.Conn, 1) go r.dialDNSConn()