@@ -56,15 +56,16 @@ func (r *Router) matchDNS(ctx context.Context, allowFakeIP bool, index int) (con
56
56
r .dnsLogger .ErrorContext (ctx , "transport not found: " , detour )
57
57
continue
58
58
}
59
- if _ , isFakeIP := transport .(adapter.FakeIPTransport ); isFakeIP && ! allowFakeIP {
59
+ _ , isFakeIP := transport .(adapter.FakeIPTransport )
60
+ if isFakeIP && ! allowFakeIP {
60
61
continue
61
62
}
62
63
displayRuleIndex := ruleIndex
63
64
if index != - 1 {
64
65
displayRuleIndex += index + 1
65
66
}
66
67
r .dnsLogger .DebugContext (ctx , "match[" , displayRuleIndex , "] " , rule .String (), " => " , detour )
67
- if rule .DisableCache () {
68
+ if ( isFakeIP && ! r . dnsIndependentCache ) || rule .DisableCache () {
68
69
ctx = dns .ContextWithDisableCache (ctx , true )
69
70
}
70
71
if rewriteTTL := rule .RewriteTTL (); rewriteTTL != nil {
@@ -93,9 +94,10 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
93
94
r .dnsLogger .DebugContext (ctx , "exchange " , formatQuestion (message .Question [0 ].String ()))
94
95
}
95
96
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
99
101
)
100
102
response , cached = r .dnsClient .ExchangeCache (ctx , message )
101
103
if ! cached {
@@ -112,7 +114,6 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
112
114
metadata .Domain = fqdnToDomain (message .Question [0 ].Name )
113
115
}
114
116
var (
115
- transport dns.Transport
116
117
strategy dns.DomainStrategy
117
118
rule adapter.DNSRule
118
119
ruleIndex int
@@ -158,17 +159,22 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
158
159
break
159
160
}
160
161
}
162
+ if err != nil {
163
+ return nil , err
164
+ }
161
165
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
+ }
168
174
}
169
175
}
170
176
}
171
- return response , err
177
+ return response , nil
172
178
}
173
179
174
180
func (r * Router ) Lookup (ctx context.Context , domain string , strategy dns.DomainStrategy ) ([]netip.Addr , error ) {
0 commit comments