mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2024-12-30 02:37:01 +00:00
update fakedns backend DNS opt
This commit is contained in:
+5
-1
@@ -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)
|
||||
}
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user