From ac04c445bd09541cc9c35a120ee01d8a177a4d83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=A3=8E=E6=89=87=E6=BB=91=E7=BF=94=E7=BF=BC?= Date: Tue, 23 Jun 2026 19:48:17 +0800 Subject: [PATCH] DNS: Fix unexpected TTL clamp (#6363) Fixes https://github.com/XTLS/Xray-core/issues/6359 --- app/dns/dnscommon.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/app/dns/dnscommon.go b/app/dns/dnscommon.go index d16316b88..5ffae51be 100644 --- a/app/dns/dnscommon.go +++ b/app/dns/dnscommon.go @@ -198,9 +198,14 @@ func parseResponse(payload []byte) (*IPRecord, error) { ipRecord := &IPRecord{ ReqID: h.ID, RCode: h.RCode, - Expire: now.Add(time.Second * dns_feature.DefaultTTL), RawHeader: &h, } + defer func() { + // set to default TTL if no valid TTL is found + if ipRecord.Expire.IsZero() { + ipRecord.Expire = now.Add(time.Second * dns_feature.DefaultTTL) + } + }() L: for { @@ -217,7 +222,7 @@ L: ttl = 1 } expire := now.Add(time.Duration(ttl) * time.Second) - if ipRecord.Expire.After(expire) { + if ipRecord.Expire.IsZero() || ipRecord.Expire.After(expire) { ipRecord.Expire = expire }