From cfbb5d63d5711dece57b9361c88caf58698a3cda Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E4=B8=96=E7=95=8C?= Date: Wed, 30 Apr 2025 20:00:32 +0800 Subject: [PATCH] Handle EDNS version downgrade --- dns/client.go | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/dns/client.go b/dns/client.go index 90c950b4..5d7f109d 100644 --- a/dns/client.go +++ b/dns/client.go @@ -232,10 +232,20 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m record.Header().Ttl = timeToLive } } - response.Id = messageId if !disableCache { c.storeCache(transport, question, response, timeToLive) } + response.Id = messageId + requestEDNSOpt := message.IsEdns0() + responseEDNSOpt := response.IsEdns0() + if responseEDNSOpt != nil && (requestEDNSOpt == nil || requestEDNSOpt.Version() < responseEDNSOpt.Version()) { + response.Extra = common.Filter(response.Extra, func(it dns.RR) bool { + return it.Header().Rrtype != dns.TypeOPT + }) + if requestEDNSOpt != nil { + response.SetEdns0(responseEDNSOpt.UDPSize(), responseEDNSOpt.Do()) + } + } logExchangedResponse(c.logger, ctx, response, timeToLive) return response, err }