diff --git a/adapter/inbound.go b/adapter/inbound.go index 505acab0e..9cd7606ca 100644 --- a/adapter/inbound.go +++ b/adapter/inbound.go @@ -130,19 +130,31 @@ func DNSResponseAddresses(response *dns.Msg) []netip.Addr { for _, rawRecord := range response.Answer { switch record := rawRecord.(type) { case *dns.A: - addresses = append(addresses, M.AddrFromIP(record.A)) + addr := M.AddrFromIP(record.A) + if addr.IsValid() { + addresses = append(addresses, addr) + } case *dns.AAAA: - addresses = append(addresses, M.AddrFromIP(record.AAAA)) + addr := M.AddrFromIP(record.AAAA) + if addr.IsValid() { + addresses = append(addresses, addr) + } case *dns.HTTPS: for _, value := range record.SVCB.Value { switch hint := value.(type) { case *dns.SVCBIPv4Hint: for _, ip := range hint.Hint { - addresses = append(addresses, M.AddrFromIP(ip).Unmap()) + addr := M.AddrFromIP(ip).Unmap() + if addr.IsValid() { + addresses = append(addresses, addr) + } } case *dns.SVCBIPv6Hint: for _, ip := range hint.Hint { - addresses = append(addresses, M.AddrFromIP(ip)) + addr := M.AddrFromIP(ip) + if addr.IsValid() { + addresses = append(addresses, addr) + } } } } diff --git a/adapter/rule.go b/adapter/rule.go index 00470f60e..2117ba45a 100644 --- a/adapter/rule.go +++ b/adapter/rule.go @@ -32,7 +32,7 @@ type RuleAction interface { func IsFinalAction(action RuleAction) bool { switch action.Type() { - case C.RuleActionTypeSniff, C.RuleActionTypeResolve: + case C.RuleActionTypeSniff, C.RuleActionTypeResolve, C.RuleActionTypeEvaluate: return false default: return true diff --git a/dns/router.go b/dns/router.go index 55433fc8c..52a87ae6d 100644 --- a/dns/router.go +++ b/dns/router.go @@ -329,7 +329,7 @@ func (r *Router) registerRuleSetCallbacks() (bool, error) { }) } r.stateAccess.Lock() - if len(r.ruleSetCallbacks) == 0 { + if !r.closing && len(r.ruleSetCallbacks) == 0 { r.ruleSetCallbacks = callbacks callbacks = nil }