Fix: dns fallback logic

This commit is contained in:
gVisor bot 2020-03-13 00:11:54 +08:00
parent ad551c1e30
commit eb3be06859
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 { func (gf *geoipFilter) Match(ip net.IP) bool {
record, _ := mmdb.Instance().Country(ip) record, _ := mmdb.Instance().Country(ip)
return record.Country.IsoCode == "CN" || record.Country.IsoCode == "" return record.Country.IsoCode != "CN" && record.Country.IsoCode != ""
} }
type ipnetFilter struct { type ipnetFilter struct {

View file

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