Fix DNS reverse mapping domain and lifetime

This commit is contained in:
世界 committed 2026-11-08 13:03:55 +00:00
1 parent f1a71152ba
commit 7a9660846b
1 file changed
+12 -2
+12 -2
View File
@@ -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)
}
}
}