dns: add dnsalwaystcp config. #49

This commit is contained in:
nadoo 2018-08-26 22:36:14 +08:00
parent 2f239d60f1
commit 529786acf6
4 changed files with 12 additions and 12 deletions

View File

@ -50,6 +50,7 @@ func confInit() {
flag.StringVar(&conf.RulesDir, "rules-dir", "", "rule file folder") flag.StringVar(&conf.RulesDir, "rules-dir", "", "rule file folder")
flag.StringVar(&conf.DNS, "dns", "", "dns forwarder server listen address") flag.StringVar(&conf.DNS, "dns", "", "dns forwarder server listen address")
flag.BoolVar(&conf.DNSConfig.AlwaysTCP, "dnsalwaystcp", false, "always use tcp to query upstream dns servers no matter there's a forwarder or not")
flag.StringSliceUniqVar(&conf.DNSConfig.Servers, "dnsserver", []string{"8.8.8.8:53"}, "remote dns server") flag.StringSliceUniqVar(&conf.DNSConfig.Servers, "dnsserver", []string{"8.8.8.8:53"}, "remote dns server")
flag.IntVar(&conf.DNSConfig.Timeout, "dnstimeout", 3, "timeout value used in multiple dnsservers switch(seconds)") flag.IntVar(&conf.DNSConfig.Timeout, "dnstimeout", 3, "timeout value used in multiple dnsservers switch(seconds)")
flag.IntVar(&conf.DNSConfig.MaxTTL, "dnsmaxttl", 1800, "maximum TTL value for entries in the CACHE(seconds)") flag.IntVar(&conf.DNSConfig.MaxTTL, "dnsmaxttl", 1800, "maximum TTL value for entries in the CACHE(seconds)")

View File

@ -23,6 +23,7 @@ type Config struct {
MaxTTL int MaxTTL int
MinTTL int MinTTL int
Records []string Records []string
AlwaysTCP bool
} }
// Client is a dns client struct // Client is a dns client struct
@ -133,7 +134,7 @@ func (c *Client) exchange(qname string, reqBytes []byte, preferTCP bool) (server
} }
// If client uses udp and no forwarders specified, use udp // If client uses udp and no forwarders specified, use udp
if !preferTCP && dialer.Addr() == "DIRECT" { if !preferTCP && !c.config.AlwaysTCP && dialer.Addr() == "DIRECT" {
network = "udp" network = "udp"
} }

View File

@ -89,7 +89,7 @@ func (f *Forwarder) Dial(network, addr string) (c net.Conn, err error) {
f.IncFailures() f.IncFailures()
if f.Failures() >= f.MaxFailures() { if f.Failures() >= f.MaxFailures() {
f.Disable() f.Disable()
log.F("[forwarder] %s reaches maxfailures, set to disabled", f.addr) log.F("[forwarder] %s reaches maxfailures, set to DISABLED", f.addr)
} }
} }

View File

@ -165,16 +165,14 @@ func (d *Dialer) onStatusChanged(fwdr *proxy.Forwarder) {
defer d.mu.Unlock() defer d.mu.Unlock()
if fwdr.Enabled() { if fwdr.Enabled() {
log.F("[strategy] %s changed from Disabled to Enabled ", fwdr.Addr()) log.F("[strategy] %s changed status from Disabled to Enabled ", fwdr.Addr())
if fwdr.Priority() == d.Priority() { if fwdr.Priority() == d.Priority() {
d.available = append(d.available, fwdr) d.available = append(d.available, fwdr)
} else if fwdr.Priority() > d.Priority() { } else if fwdr.Priority() > d.Priority() {
d.initAvailable() d.initAvailable()
} }
} } else {
log.F("[strategy] %s changed status from Enabled to Disabled", fwdr.Addr())
if !fwdr.Enabled() {
log.F("[strategy] %s changed from Enabled to Disabled", fwdr.Addr())
for i, f := range d.available { for i, f := range d.available {
if f == fwdr { if f == fwdr {
d.available[i], d.available = d.available[len(d.available)-1], d.available[:len(d.available)-1] d.available[i], d.available = d.available[len(d.available)-1], d.available[:len(d.available)-1]