Skip to content

Commit fb86e9c

Browse files
PuerNyanekohasekai
authored andcommitted
Always disable cache for fake-ip DNS transport if independent_cache disabled
1 parent abdfe05 commit fb86e9c

File tree

2 files changed

+21
-13
lines changed

2 files changed

+21
-13
lines changed

route/router.go

+2
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ type Router struct {
7070
geositeCache map[string]adapter.Rule
7171
needFindProcess bool
7272
dnsClient *dns.Client
73+
dnsIndependentCache bool
7374
defaultDomainStrategy dns.DomainStrategy
7475
dnsRules []adapter.DNSRule
7576
ruleSets []adapter.RuleSet
@@ -123,6 +124,7 @@ func NewRouter(
123124
geositeOptions: common.PtrValueOrDefault(options.Geosite),
124125
geositeCache: make(map[string]adapter.Rule),
125126
needFindProcess: hasRule(options.Rules, isProcessRule) || hasDNSRule(dnsOptions.Rules, isProcessDNSRule) || options.FindProcess,
127+
dnsIndependentCache: dnsOptions.IndependentCache,
126128
defaultDetour: options.Final,
127129
defaultDomainStrategy: dns.DomainStrategy(dnsOptions.Strategy),
128130
autoDetectInterface: options.AutoDetectInterface,

route/router_dns.go

+19-13
Original file line numberDiff line numberDiff line change
@@ -56,15 +56,16 @@ func (r *Router) matchDNS(ctx context.Context, allowFakeIP bool, index int) (con
5656
r.dnsLogger.ErrorContext(ctx, "transport not found: ", detour)
5757
continue
5858
}
59-
if _, isFakeIP := transport.(adapter.FakeIPTransport); isFakeIP && !allowFakeIP {
59+
_, isFakeIP := transport.(adapter.FakeIPTransport)
60+
if isFakeIP && !allowFakeIP {
6061
continue
6162
}
6263
displayRuleIndex := ruleIndex
6364
if index != -1 {
6465
displayRuleIndex += index + 1
6566
}
6667
r.dnsLogger.DebugContext(ctx, "match[", displayRuleIndex, "] ", rule.String(), " => ", detour)
67-
if rule.DisableCache() {
68+
if (isFakeIP && !r.dnsIndependentCache) || rule.DisableCache() {
6869
ctx = dns.ContextWithDisableCache(ctx, true)
6970
}
7071
if rewriteTTL := rule.RewriteTTL(); rewriteTTL != nil {
@@ -93,9 +94,10 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
9394
r.dnsLogger.DebugContext(ctx, "exchange ", formatQuestion(message.Question[0].String()))
9495
}
9596
var (
96-
response *mDNS.Msg
97-
cached bool
98-
err error
97+
response *mDNS.Msg
98+
cached bool
99+
transport dns.Transport
100+
err error
99101
)
100102
response, cached = r.dnsClient.ExchangeCache(ctx, message)
101103
if !cached {
@@ -112,7 +114,6 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
112114
metadata.Domain = fqdnToDomain(message.Question[0].Name)
113115
}
114116
var (
115-
transport dns.Transport
116117
strategy dns.DomainStrategy
117118
rule adapter.DNSRule
118119
ruleIndex int
@@ -158,17 +159,22 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
158159
break
159160
}
160161
}
162+
if err != nil {
163+
return nil, err
164+
}
161165
if r.dnsReverseMapping != nil && len(message.Question) > 0 && response != nil && len(response.Answer) > 0 {
162-
for _, answer := range response.Answer {
163-
switch record := answer.(type) {
164-
case *mDNS.A:
165-
r.dnsReverseMapping.Save(M.AddrFromIP(record.A), fqdnToDomain(record.Hdr.Name), int(record.Hdr.Ttl))
166-
case *mDNS.AAAA:
167-
r.dnsReverseMapping.Save(M.AddrFromIP(record.AAAA), fqdnToDomain(record.Hdr.Name), int(record.Hdr.Ttl))
166+
if _, isFakeIP := transport.(adapter.FakeIPTransport); !isFakeIP {
167+
for _, answer := range response.Answer {
168+
switch record := answer.(type) {
169+
case *mDNS.A:
170+
r.dnsReverseMapping.Save(M.AddrFromIP(record.A), fqdnToDomain(record.Hdr.Name), int(record.Hdr.Ttl))
171+
case *mDNS.AAAA:
172+
r.dnsReverseMapping.Save(M.AddrFromIP(record.AAAA), fqdnToDomain(record.Hdr.Name), int(record.Hdr.Ttl))
173+
}
168174
}
169175
}
170176
}
171-
return response, err
177+
return response, nil
172178
}
173179

174180
func (r *Router) Lookup(ctx context.Context, domain string, strategy dns.DomainStrategy) ([]netip.Addr, error) {

0 commit comments

Comments
 (0)