mirror of
https://github.com/SagerNet/sing-box.git
synced 2025-06-13 21:54:13 +08:00
Merge branch 'dev-next' into origin/tls-client-auth
Signed-off-by: jose-C2OaWi <111356383+jose-C2OaWi@users.noreply.github.com>
This commit is contained in:
commit
10681a754f
@ -7,6 +7,7 @@ icon: material/alert-decagram
|
|||||||
#### 1.8.0-alpha.8
|
#### 1.8.0-alpha.8
|
||||||
|
|
||||||
* Add context to JSON decode error message **1**
|
* Add context to JSON decode error message **1**
|
||||||
|
* Reject internal fake-ip queries **2**
|
||||||
* Fixes and improvements
|
* Fixes and improvements
|
||||||
|
|
||||||
**1**:
|
**1**:
|
||||||
@ -14,6 +15,13 @@ icon: material/alert-decagram
|
|||||||
JSON parse errors will now include the current key path.
|
JSON parse errors will now include the current key path.
|
||||||
Only takes effect when compiled with Go 1.21+.
|
Only takes effect when compiled with Go 1.21+.
|
||||||
|
|
||||||
|
**2**:
|
||||||
|
|
||||||
|
All internal DNS queries now skip DNS rules with `server` type `fakeip`,
|
||||||
|
and the default DNS server can no longer be `fakeip`.
|
||||||
|
|
||||||
|
This change is intended to break incorrect usage and essentially requires no action.
|
||||||
|
|
||||||
#### 1.8.0-alpha.7
|
#### 1.8.0-alpha.7
|
||||||
|
|
||||||
* Fixes and improvements
|
* Fixes and improvements
|
||||||
|
@ -255,6 +255,9 @@ func NewRouter(
|
|||||||
}
|
}
|
||||||
defaultTransport = transports[0]
|
defaultTransport = transports[0]
|
||||||
}
|
}
|
||||||
|
if _, isFakeIP := defaultTransport.(adapter.FakeIPTransport); isFakeIP {
|
||||||
|
return nil, E.New("default DNS server cannot be fakeip")
|
||||||
|
}
|
||||||
router.defaultTransport = defaultTransport
|
router.defaultTransport = defaultTransport
|
||||||
router.transports = transports
|
router.transports = transports
|
||||||
router.transportMap = transportMap
|
router.transportMap = transportMap
|
||||||
|
@ -37,7 +37,7 @@ func (m *DNSReverseMapping) Query(address netip.Addr) (string, bool) {
|
|||||||
return domain, loaded
|
return domain, loaded
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *Router) matchDNS(ctx context.Context) (context.Context, dns.Transport, dns.DomainStrategy) {
|
func (r *Router) matchDNS(ctx context.Context, allowFakeIP bool) (context.Context, dns.Transport, dns.DomainStrategy) {
|
||||||
metadata := adapter.ContextFrom(ctx)
|
metadata := adapter.ContextFrom(ctx)
|
||||||
if metadata == nil {
|
if metadata == nil {
|
||||||
panic("no context")
|
panic("no context")
|
||||||
@ -51,7 +51,7 @@ func (r *Router) matchDNS(ctx context.Context) (context.Context, dns.Transport,
|
|||||||
r.dnsLogger.ErrorContext(ctx, "transport not found: ", detour)
|
r.dnsLogger.ErrorContext(ctx, "transport not found: ", detour)
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
if _, isFakeIP := transport.(adapter.FakeIPTransport); isFakeIP && metadata.FakeIP {
|
if _, isFakeIP := transport.(adapter.FakeIPTransport); isFakeIP && !allowFakeIP {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
r.dnsLogger.DebugContext(ctx, "match[", i, "] ", rule.String(), " => ", detour)
|
r.dnsLogger.DebugContext(ctx, "match[", i, "] ", rule.String(), " => ", detour)
|
||||||
@ -97,7 +97,7 @@ func (r *Router) Exchange(ctx context.Context, message *mDNS.Msg) (*mDNS.Msg, er
|
|||||||
}
|
}
|
||||||
metadata.Domain = fqdnToDomain(message.Question[0].Name)
|
metadata.Domain = fqdnToDomain(message.Question[0].Name)
|
||||||
}
|
}
|
||||||
ctx, transport, strategy := r.matchDNS(ctx)
|
ctx, transport, strategy := r.matchDNS(ctx, true)
|
||||||
ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout)
|
ctx, cancel := context.WithTimeout(ctx, C.DNSTimeout)
|
||||||
defer cancel()
|
defer cancel()
|
||||||
response, err = r.dnsClient.Exchange(ctx, transport, message, strategy)
|
response, err = r.dnsClient.Exchange(ctx, transport, message, strategy)
|
||||||
@ -125,7 +125,7 @@ func (r *Router) Lookup(ctx context.Context, domain string, strategy dns.DomainS
|
|||||||
r.dnsLogger.DebugContext(ctx, "lookup domain ", domain)
|
r.dnsLogger.DebugContext(ctx, "lookup domain ", domain)
|
||||||
ctx, metadata := adapter.AppendContext(ctx)
|
ctx, metadata := adapter.AppendContext(ctx)
|
||||||
metadata.Domain = domain
|
metadata.Domain = domain
|
||||||
ctx, transport, transportStrategy := r.matchDNS(ctx)
|
ctx, transport, transportStrategy := r.matchDNS(ctx, false)
|
||||||
if strategy == dns.DomainStrategyAsIS {
|
if strategy == dns.DomainStrategyAsIS {
|
||||||
strategy = transportStrategy
|
strategy = transportStrategy
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user