mirror of
https://github.com/xjasonlyu/tun2socks.git
synced 2025-11-01 20:42:32 +08:00
add backendDNS opt
This commit is contained in:
@@ -55,6 +55,7 @@ type CmdArgs struct {
|
|||||||
FakeDNSAddr *string
|
FakeDNSAddr *string
|
||||||
FakeDNSHosts *string
|
FakeDNSHosts *string
|
||||||
HijackDNS *string
|
HijackDNS *string
|
||||||
|
BackendDNS *string
|
||||||
|
|
||||||
// Session Statistics Monitor
|
// Session Statistics Monitor
|
||||||
EnableMonitor *bool
|
EnableMonitor *bool
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ package main
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"flag"
|
"flag"
|
||||||
|
"strings"
|
||||||
|
|
||||||
"github.com/xjasonlyu/tun2socks/component/fakedns"
|
"github.com/xjasonlyu/tun2socks/component/fakedns"
|
||||||
"github.com/xjasonlyu/tun2socks/log"
|
"github.com/xjasonlyu/tun2socks/log"
|
||||||
@@ -15,6 +16,7 @@ func init() {
|
|||||||
args.FakeIPRange = flag.String("fakeIPRange", "198.18.0.0/15", "Fake IP CIDR range for DNS")
|
args.FakeIPRange = flag.String("fakeIPRange", "198.18.0.0/15", "Fake IP CIDR range for DNS")
|
||||||
args.FakeDNSHosts = flag.String("fakeDNSHosts", "", "DNS hosts mapping, e.g. 'example.com=1.1.1.1,example.net=2.2.2.2'")
|
args.FakeDNSHosts = flag.String("fakeDNSHosts", "", "DNS hosts mapping, e.g. 'example.com=1.1.1.1,example.net=2.2.2.2'")
|
||||||
args.HijackDNS = flag.String("hijackDNS", "", "Hijack the DNS query to get a fake ip, e.g. '*:53' or '8.8.8.8:53,8.8.4.4:53'")
|
args.HijackDNS = flag.String("hijackDNS", "", "Hijack the DNS query to get a fake ip, e.g. '*:53' or '8.8.8.8:53,8.8.4.4:53'")
|
||||||
|
args.BackendDNS = flag.String("backendDNS", "8.8.8.8:53", "Backend DNS to resolve !TypeA or !ClassINET query. (must support tcp)")
|
||||||
|
|
||||||
registerInitFn(func() {
|
registerInitFn(func() {
|
||||||
if *args.EnableFakeDNS {
|
if *args.EnableFakeDNS {
|
||||||
@@ -26,6 +28,7 @@ func init() {
|
|||||||
|
|
||||||
// Set fakeDNS variables
|
// Set fakeDNS variables
|
||||||
fakedns.ServeAddr = *args.FakeDNSAddr
|
fakedns.ServeAddr = *args.FakeDNSAddr
|
||||||
|
fakedns.BackendDNS = strings.Split(*args.BackendDNS, ",")
|
||||||
|
|
||||||
// Start fakeDNS server
|
// Start fakeDNS server
|
||||||
if err := fakeDNS.Start(); err != nil {
|
if err := fakeDNS.Start(); err != nil {
|
||||||
|
|||||||
@@ -11,20 +11,28 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
nameserver = "8.8.8.8:53"
|
BackendDNS = []string{}
|
||||||
)
|
)
|
||||||
|
|
||||||
func dnsExchange(r *D.Msg) *D.Msg {
|
func dnsExchange(r *D.Msg) (msg *D.Msg) {
|
||||||
|
defer func() {
|
||||||
|
if msg == nil {
|
||||||
|
// empty DNS response
|
||||||
|
rr := &D.A{}
|
||||||
|
rr.Hdr = D.RR_Header{Name: r.Question[0].Name, Rrtype: D.TypeA, Class: D.ClassINET, Ttl: dnsDefaultTTL}
|
||||||
|
msg = r.Copy()
|
||||||
|
msg.Answer = []D.RR{rr}
|
||||||
|
setMsgTTL(msg, dnsDefaultTTL)
|
||||||
|
}
|
||||||
|
}()
|
||||||
|
|
||||||
c := new(D.Client)
|
c := new(D.Client)
|
||||||
c.Net = "tcp"
|
c.Net = "tcp"
|
||||||
msg, _, err := c.Exchange(r, nameserver)
|
for _, dns := range BackendDNS {
|
||||||
if err != nil {
|
msg, _, _ = c.Exchange(r, dns)
|
||||||
// empty DNS response
|
if msg != nil {
|
||||||
rr := &D.A{}
|
break
|
||||||
rr.Hdr = D.RR_Header{Name: r.Question[0].Name, Rrtype: D.TypeA, Class: D.ClassINET, Ttl: dnsDefaultTTL}
|
}
|
||||||
msg = r.Copy()
|
|
||||||
msg.Answer = []D.RR{rr}
|
|
||||||
setMsgTTL(msg, dnsDefaultTTL)
|
|
||||||
}
|
}
|
||||||
return msg
|
return msg
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user