update fakedns backend DNS opt

This commit is contained in:
Jason
2019-08-19 17:45:19 +08:00
parent 3fb9601109
commit 9792ef0b97
3 changed files with 19 additions and 12 deletions

View File

@@ -19,11 +19,15 @@ func init() {
registerInitFn(func() {
if *args.EnableFakeDNS {
var err error
fakeDNS, err = fakedns.NewResolver(*args.FakeDNSAddr, *args.Hosts, *args.BackendDNS)
fakeDNS, err = fakedns.NewResolver(*args.FakeDNSAddr, *args.Hosts)
if err != nil {
log.Fatalf("Create fake DNS server failed: %v", err)
}
// Register backend DNS
fakedns.RegisterDNS(*args.BackendDNS)
// Start FakeDNS
if err := fakeDNS.Start(); err != nil {
log.Fatalf("Start fake DNS failed: %v", err)
}

View File

@@ -12,7 +12,13 @@ import (
F "github.com/xjasonlyu/tun2socks/common/fakeip"
)
func dnsExchange(backendDNS []string, r *D.Msg) (msg *D.Msg) {
var backendDNS []string
func RegisterDNS(dns string) {
backendDNS = append(backendDNS, strings.Split(dns, ",")...)
}
func dnsExchange(r *D.Msg) (msg *D.Msg) {
defer func() {
if msg == nil {
// empty DNS response
@@ -37,7 +43,7 @@ func dnsExchange(backendDNS []string, r *D.Msg) (msg *D.Msg) {
return msg
}
func resolve(hosts *T.Trie, pool *F.Pool, backendDNS []string, r *D.Msg) (msg *D.Msg) {
func resolve(hosts *T.Trie, pool *F.Pool, r *D.Msg) (msg *D.Msg) {
defer func() {
if msg != nil {
msg.SetReply(r)
@@ -50,7 +56,7 @@ func resolve(hosts *T.Trie, pool *F.Pool, backendDNS []string, r *D.Msg) (msg *D
q := r.Question[0]
if q.Qtype != D.TypeA || q.Qclass != D.ClassINET {
return dnsExchange(backendDNS, r)
return dnsExchange(r)
}
return fakeResolve(pool, r)
@@ -113,9 +119,9 @@ func hostResolve(hosts *T.Trie, r *D.Msg) *D.Msg {
return msg
}
func newHandler(hosts *T.Trie, pool *F.Pool, backendDNS []string) handler {
func newHandler(hosts *T.Trie, pool *F.Pool) handler {
return func(w D.ResponseWriter, r *D.Msg) {
msg := resolve(hosts, pool, backendDNS, r)
msg := resolve(hosts, pool, r)
w.WriteMsg(msg)
return
}

View File

@@ -25,7 +25,6 @@ const (
type handler = D.HandlerFunc
type Resolver struct {
b []string
h handler
p *F.Pool
t *T.Trie
@@ -88,7 +87,7 @@ func (r *Resolver) Resolve(request []byte) ([]byte, error) {
return nil, errors.New("cannot handle dns query: invalid question length")
}
msg := resolve(r.t, r.p, r.b, req)
msg := resolve(r.t, r.p, req)
if msg == nil {
return nil, errors.New("cannot resolve dns query: msg is nil")
}
@@ -99,7 +98,7 @@ func (r *Resolver) Resolve(request []byte) ([]byte, error) {
return resp, nil
}
func NewResolver(a, h, b string) (*Resolver, error) {
func NewResolver(a, h string) (*Resolver, error) {
_, ipnet, _ := net.ParseCIDR(dnsFakeIPRange)
pool, err := F.New(ipnet, dnsCacheSize)
@@ -124,10 +123,8 @@ func NewResolver(a, h, b string) (*Resolver, error) {
return tree
}(h)
backendDNS := strings.Split(b, ",")
handler := newHandler(tree, pool, backendDNS)
handler := newHandler(tree, pool)
return &Resolver{
b: backendDNS,
h: handler,
p: pool,
t: tree,