mirror of
				https://github.com/xjasonlyu/tun2socks.git
				synced 2025-10-31 12:06:37 +08:00 
			
		
		
		
	update fakedns backend DNS opt
This commit is contained in:
		| @@ -19,11 +19,15 @@ func init() { | |||||||
| 	registerInitFn(func() { | 	registerInitFn(func() { | ||||||
| 		if *args.EnableFakeDNS { | 		if *args.EnableFakeDNS { | ||||||
| 			var err error | 			var err error | ||||||
| 			fakeDNS, err = fakedns.NewResolver(*args.FakeDNSAddr, *args.Hosts, *args.BackendDNS) | 			fakeDNS, err = fakedns.NewResolver(*args.FakeDNSAddr, *args.Hosts) | ||||||
| 			if err != nil { | 			if err != nil { | ||||||
| 				log.Fatalf("Create fake DNS server failed: %v", err) | 				log.Fatalf("Create fake DNS server failed: %v", err) | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
|  | 			// Register backend DNS | ||||||
|  | 			fakedns.RegisterDNS(*args.BackendDNS) | ||||||
|  |  | ||||||
|  | 			// Start FakeDNS | ||||||
| 			if err := fakeDNS.Start(); err != nil { | 			if err := fakeDNS.Start(); err != nil { | ||||||
| 				log.Fatalf("Start fake DNS failed: %v", err) | 				log.Fatalf("Start fake DNS failed: %v", err) | ||||||
| 			} | 			} | ||||||
|   | |||||||
| @@ -12,7 +12,13 @@ import ( | |||||||
| 	F "github.com/xjasonlyu/tun2socks/common/fakeip" | 	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() { | 	defer func() { | ||||||
| 		if msg == nil { | 		if msg == nil { | ||||||
| 			// empty DNS response | 			// empty DNS response | ||||||
| @@ -37,7 +43,7 @@ func dnsExchange(backendDNS []string, r *D.Msg) (msg *D.Msg) { | |||||||
| 	return 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() { | 	defer func() { | ||||||
| 		if msg != nil { | 		if msg != nil { | ||||||
| 			msg.SetReply(r) | 			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] | 	q := r.Question[0] | ||||||
| 	if q.Qtype != D.TypeA || q.Qclass != D.ClassINET { | 	if q.Qtype != D.TypeA || q.Qclass != D.ClassINET { | ||||||
| 		return dnsExchange(backendDNS, r) | 		return dnsExchange(r) | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	return fakeResolve(pool, r) | 	return fakeResolve(pool, r) | ||||||
| @@ -113,9 +119,9 @@ func hostResolve(hosts *T.Trie, r *D.Msg) *D.Msg { | |||||||
| 	return 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) { | 	return func(w D.ResponseWriter, r *D.Msg) { | ||||||
| 		msg := resolve(hosts, pool, backendDNS, r) | 		msg := resolve(hosts, pool, r) | ||||||
| 		w.WriteMsg(msg) | 		w.WriteMsg(msg) | ||||||
| 		return | 		return | ||||||
| 	} | 	} | ||||||
|   | |||||||
| @@ -25,7 +25,6 @@ const ( | |||||||
| type handler = D.HandlerFunc | type handler = D.HandlerFunc | ||||||
|  |  | ||||||
| type Resolver struct { | type Resolver struct { | ||||||
| 	b []string |  | ||||||
| 	h handler | 	h handler | ||||||
| 	p *F.Pool | 	p *F.Pool | ||||||
| 	t *T.Trie | 	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") | 		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 { | 	if msg == nil { | ||||||
| 		return nil, errors.New("cannot resolve dns query: msg is 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 | 	return resp, nil | ||||||
| } | } | ||||||
|  |  | ||||||
| func NewResolver(a, h, b string) (*Resolver, error) { | func NewResolver(a, h string) (*Resolver, error) { | ||||||
| 	_, ipnet, _ := net.ParseCIDR(dnsFakeIPRange) | 	_, ipnet, _ := net.ParseCIDR(dnsFakeIPRange) | ||||||
|  |  | ||||||
| 	pool, err := F.New(ipnet, dnsCacheSize) | 	pool, err := F.New(ipnet, dnsCacheSize) | ||||||
| @@ -124,10 +123,8 @@ func NewResolver(a, h, b string) (*Resolver, error) { | |||||||
| 		return tree | 		return tree | ||||||
| 	}(h) | 	}(h) | ||||||
|  |  | ||||||
| 	backendDNS := strings.Split(b, ",") | 	handler := newHandler(tree, pool) | ||||||
| 	handler := newHandler(tree, pool, backendDNS) |  | ||||||
| 	return &Resolver{ | 	return &Resolver{ | ||||||
| 		b:         backendDNS, |  | ||||||
| 		h:         handler, | 		h:         handler, | ||||||
| 		p:         pool, | 		p:         pool, | ||||||
| 		t:         tree, | 		t:         tree, | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user
	 Jason
					Jason