Skip to content
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Commit de09945

Browse files
committedMar 14, 2025··
fix: solve the problem that DNS dialer will not perform switching introduced by #649
1 parent 2edc2d3 commit de09945

File tree

1 file changed

+9
-4
lines changed

1 file changed

+9
-4
lines changed
 

‎control/dns_control.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ type DnsController struct {
7979
dnsCacheMu sync.Mutex
8080
dnsCache map[string]*DnsCache
8181
dnsForwarderCacheMu sync.Mutex
82-
dnsForwarderCache map[string]DnsForwarder
82+
dnsForwarderCache map[dnsForwarderKey]DnsForwarder
8383
}
8484

8585
func parseIpVersionPreference(prefer int) (uint16, error) {
@@ -117,7 +117,7 @@ func NewDnsController(routing *dns.Dns, option *DnsControllerOption) (c *DnsCont
117117
dnsCacheMu: sync.Mutex{},
118118
dnsCache: make(map[string]*DnsCache),
119119
dnsForwarderCacheMu: sync.Mutex{},
120-
dnsForwarderCache: make(map[string]DnsForwarder),
120+
dnsForwarderCache: make(map[dnsForwarderKey]DnsForwarder),
121121
}, nil
122122
}
123123

@@ -346,6 +346,11 @@ type dialArgument struct {
346346
mptcp bool
347347
}
348348

349+
type dnsForwarderKey struct {
350+
upstreamName string
351+
dialArgument dialArgument
352+
}
353+
349354
func (c *DnsController) Handle_(dnsMessage *dnsmessage.Msg, req *udpRequest) (err error) {
350355
if c.log.IsLevelEnabled(logrus.TraceLevel) && len(dnsMessage.Question) > 0 {
351356
q := dnsMessage.Question[0]
@@ -562,14 +567,14 @@ func (c *DnsController) dialSend(invokingDepth int, req *udpRequest, data []byte
562567

563568
// get forwarder from cache
564569
c.dnsForwarderCacheMu.Lock()
565-
forwarder, ok := c.dnsForwarderCache[upstreamName]
570+
forwarder, ok := c.dnsForwarderCache[dnsForwarderKey{upstreamName: upstreamName, dialArgument: *dialArgument}]
566571
if !ok {
567572
forwarder, err = newDnsForwarder(upstream, *dialArgument)
568573
if err != nil {
569574
c.dnsForwarderCacheMu.Unlock()
570575
return err
571576
}
572-
c.dnsForwarderCache[upstreamName] = forwarder
577+
c.dnsForwarderCache[dnsForwarderKey{upstreamName: upstreamName, dialArgument: *dialArgument}] = forwarder
573578
}
574579
c.dnsForwarderCacheMu.Unlock()
575580

0 commit comments

Comments
 (0)
Please sign in to comment.