mirror of
https://github.com/SagerNet/sing-box.git
synced 2026-11-10 21:21:02 +08:00
Fix DNS reverse mapping domain and lifetime
This commit is contained in:
1 file changed
+12
-2
+12
-2
@@ -1121,13 +1121,23 @@ func (r *Router) prepareExchange(ctx context.Context, message *mDNS.Msg) (*dnsEx
|
||||
func (r *Router) recordReverseMapping(message *mDNS.Msg, response *mDNS.Msg, transport adapter.DNSTransport) {
|
||||
if r.dnsReverseMapping != nil && len(message.Question) > 0 && response != nil && len(response.Answer) > 0 {
|
||||
if transport == nil || transport.Type() != C.DNSTypeFakeIP {
|
||||
domain := FqdnToDomain(message.Question[0].Name)
|
||||
for _, answer := range response.Answer {
|
||||
var address netip.Addr
|
||||
switch record := answer.(type) {
|
||||
case *mDNS.A:
|
||||
r.dnsReverseMapping.AddWithLifetime(M.AddrFromIP(record.A), FqdnToDomain(record.Hdr.Name), time.Duration(record.Hdr.Ttl)*time.Second)
|
||||
address = M.AddrFromIP(record.A)
|
||||
case *mDNS.AAAA:
|
||||
r.dnsReverseMapping.AddWithLifetime(M.AddrFromIP(record.AAAA), FqdnToDomain(record.Hdr.Name), time.Duration(record.Hdr.Ttl)*time.Second)
|
||||
address = M.AddrFromIP(record.AAAA)
|
||||
default:
|
||||
continue
|
||||
}
|
||||
lifetime := time.Duration(max(answer.Header().Ttl, 1)) * time.Second
|
||||
mappedDomain, expireAt, loaded := r.dnsReverseMapping.GetWithLifetime(address)
|
||||
if loaded && mappedDomain == domain && time.Until(expireAt) >= lifetime {
|
||||
continue
|
||||
}
|
||||
r.dnsReverseMapping.AddWithLifetime(address, domain, lifetime)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user