Skip to content

Commit f98a3a4

Browse files
committed
Treat requests with OPT extra but no options as simple requests
1 parent b14ceca commit f98a3a4

File tree

1 file changed

+7
-2
lines changed

1 file changed

+7
-2
lines changed

dns/client.go

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import (
1919
"github.com/sagernet/sing/contrab/freelru"
2020
"github.com/sagernet/sing/contrab/maphash"
2121

22-
dns "github.com/miekg/dns"
22+
"github.com/miekg/dns"
2323
)
2424

2525
var (
@@ -116,9 +116,14 @@ func (c *Client) Exchange(ctx context.Context, transport adapter.DNSTransport, m
116116
if clientSubnet.IsValid() {
117117
message = SetClientSubnet(message, clientSubnet)
118118
}
119+
119120
isSimpleRequest := len(message.Question) == 1 &&
120121
len(message.Ns) == 0 &&
121-
len(message.Extra) == 0 &&
122+
(len(message.Extra) == 0 || len(message.Extra) == 1 &&
123+
message.Extra[0].Header().Rrtype == dns.TypeOPT &&
124+
message.Extra[0].Header().Class > 0 &&
125+
message.Extra[0].Header().Ttl == 0 &&
126+
len(message.Extra[0].(*dns.OPT).Option) == 0) &&
122127
!options.ClientSubnet.IsValid()
123128
disableCache := !isSimpleRequest || c.disableCache || options.DisableCache
124129
if !disableCache {

0 commit comments

Comments
 (0)