Fix: dns fallback logic

This commit is contained in:
Dreamacro 2020-03-13 00:11:54 +08:00
parent b263095533
commit 9471d80785
2 changed files with 3 additions and 4 deletions

View file

@ -14,7 +14,7 @@ type geoipFilter struct{}
func (gf *geoipFilter) Match(ip net.IP) bool {
record, _ := mmdb.Instance().Country(ip)
return record.Country.IsoCode == "CN" || record.Country.IsoCode == ""
return record.Country.IsoCode != "CN" && record.Country.IsoCode != ""
}
type ipnetFilter struct {

View file

@ -197,8 +197,7 @@ func (r *Resolver) fallbackExchange(m *D.Msg) (msg *D.Msg, err error) {
res := <-msgCh
if res.Error == nil {
if ips := r.msgToIP(res.Msg); len(ips) != 0 {
if r.shouldFallback(ips[0]) {
go func() { <-fallbackMsg }()
if !r.shouldFallback(ips[0]) {
msg = res.Msg
err = res.Error
return msg, err
@ -258,7 +257,7 @@ func (r *Resolver) msgToIP(msg *D.Msg) []net.IP {
}
func (r *Resolver) asyncExchange(client []dnsClient, msg *D.Msg) <-chan *result {
ch := make(chan *result)
ch := make(chan *result, 1)
go func() {
res, err := r.batchExchange(client, msg)
ch <- &result{Msg: res, Error: err}