@@ -79,7 +79,7 @@ type DnsController struct {
79
79
dnsCacheMu sync.Mutex
80
80
dnsCache map [string ]* DnsCache
81
81
dnsForwarderCacheMu sync.Mutex
82
- dnsForwarderCache map [string ]DnsForwarder
82
+ dnsForwarderCache map [dnsForwarderKey ]DnsForwarder
83
83
}
84
84
85
85
func parseIpVersionPreference (prefer int ) (uint16 , error ) {
@@ -117,7 +117,7 @@ func NewDnsController(routing *dns.Dns, option *DnsControllerOption) (c *DnsCont
117
117
dnsCacheMu : sync.Mutex {},
118
118
dnsCache : make (map [string ]* DnsCache ),
119
119
dnsForwarderCacheMu : sync.Mutex {},
120
- dnsForwarderCache : make (map [string ]DnsForwarder ),
120
+ dnsForwarderCache : make (map [dnsForwarderKey ]DnsForwarder ),
121
121
}, nil
122
122
}
123
123
@@ -346,6 +346,11 @@ type dialArgument struct {
346
346
mptcp bool
347
347
}
348
348
349
+ type dnsForwarderKey struct {
350
+ upstreamName string
351
+ dialArgument dialArgument
352
+ }
353
+
349
354
func (c * DnsController ) Handle_ (dnsMessage * dnsmessage.Msg , req * udpRequest ) (err error ) {
350
355
if c .log .IsLevelEnabled (logrus .TraceLevel ) && len (dnsMessage .Question ) > 0 {
351
356
q := dnsMessage .Question [0 ]
@@ -562,14 +567,14 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
562
567
563
568
// get forwarder from cache
564
569
c .dnsForwarderCacheMu .Lock ()
565
- forwarder , ok := c .dnsForwarderCache [upstreamName ]
570
+ forwarder , ok := c .dnsForwarderCache [dnsForwarderKey { upstreamName : upstreamName , dialArgument : * dialArgument } ]
566
571
if ! ok {
567
572
forwarder , err = newDnsForwarder (upstream , * dialArgument )
568
573
if err != nil {
569
574
c .dnsForwarderCacheMu .Unlock ()
570
575
return err
571
576
}
572
- c .dnsForwarderCache [upstreamName ] = forwarder
577
+ c .dnsForwarderCache [dnsForwarderKey { upstreamName : upstreamName , dialArgument : * dialArgument } ] = forwarder
573
578
}
574
579
c .dnsForwarderCacheMu .Unlock ()
575
580
0 commit comments