Fix bypass with outbound not bypassing in pre-match
Some checks are pending
Build / Calculate version (push) Waiting to run
Build / Build binary (push) Blocked by required conditions
Build / Build binary-1 (push) Blocked by required conditions
Build / Build binary-2 (push) Blocked by required conditions
Build / Build binary-3 (push) Blocked by required conditions
Build / Build binary-4 (push) Blocked by required conditions
Build / Build binary-5 (push) Blocked by required conditions
Build / Build binary-6 (push) Blocked by required conditions
Build / Build binary-7 (push) Blocked by required conditions
Build / Build binary-8 (push) Blocked by required conditions
Build / Build binary-9 (push) Blocked by required conditions
Build / Build binary-10 (push) Blocked by required conditions
Build / Build binary-11 (push) Blocked by required conditions
Build / Build binary-12 (push) Blocked by required conditions
Build / Build binary-13 (push) Blocked by required conditions
Build / Build binary-14 (push) Blocked by required conditions
Build / Build binary-15 (push) Blocked by required conditions
Build / Build binary-16 (push) Blocked by required conditions
Build / Build binary-17 (push) Blocked by required conditions
Build / Build binary-18 (push) Blocked by required conditions
Build / Build binary-19 (push) Blocked by required conditions
Build / Build binary-20 (push) Blocked by required conditions
Build / Build binary-21 (push) Blocked by required conditions
Build / Build binary-22 (push) Blocked by required conditions
Build / Build binary-23 (push) Blocked by required conditions
Build / Build binary-24 (push) Blocked by required conditions
Build / Build binary-25 (push) Blocked by required conditions
Build / Build binary-26 (push) Blocked by required conditions
Build / Build binary-27 (push) Blocked by required conditions
Build / Build binary-28 (push) Blocked by required conditions
Build / Build binary-29 (push) Blocked by required conditions
Build / Build binary-30 (push) Blocked by required conditions
Build / Build binary-31 (push) Blocked by required conditions
Build / Build binary-32 (push) Blocked by required conditions
Build / Build binary-33 (push) Blocked by required conditions
Build / Build binary-34 (push) Blocked by required conditions
Build / Build binary-35 (push) Blocked by required conditions
Build / Build binary-36 (push) Blocked by required conditions
Build / Build binary-37 (push) Blocked by required conditions
Build / Build Darwin binaries (push) Blocked by required conditions
Build / Build Darwin binaries-1 (push) Blocked by required conditions
Build / Build Darwin binaries-2 (push) Blocked by required conditions
Build / Build Windows binaries (push) Blocked by required conditions
Build / Build Windows binaries-1 (push) Blocked by required conditions
Build / Build Windows binaries-2 (push) Blocked by required conditions
Build / Build Android library (386) (push) Blocked by required conditions
Build / Build Android library (amd64) (push) Blocked by required conditions
Build / Build Android library (arm) (push) Blocked by required conditions
Build / Build Android library (arm64) (push) Blocked by required conditions
Build / Build Android (other) (push) Blocked by required conditions
Build / Build Android (other-legacy) (push) Blocked by required conditions
Build / Publish Android (push) Blocked by required conditions
Build / Build Windows client (arm64) (push) Blocked by required conditions
Build / Build Windows client (x64) (push) Blocked by required conditions
Build / Build Windows client (x86) (push) Blocked by required conditions
Build / Build Linux client (arm64) (push) Blocked by required conditions
Build / Build Linux client (armv7l) (push) Blocked by required conditions
Build / Build Linux client (x64) (push) Blocked by required conditions
Build / Build Apple library (ios-arm64) (push) Blocked by required conditions
Build / Build Apple library (macos-amd64) (push) Blocked by required conditions
Build / Build Apple library (macos-arm64) (push) Blocked by required conditions
Build / Build Apple library (tvos-arm64) (push) Blocked by required conditions
Build / Build Apple release clients (push) Blocked by required conditions
Build / Build Apple release clients-1 (push) Blocked by required conditions
Build / Build Apple App Store clients (push) Blocked by required conditions
Build / Build Apple App Store clients-1 (push) Blocked by required conditions
Build / Build Apple App Store clients-2 (push) Blocked by required conditions
Build / Upload builds (push) Blocked by required conditions
Build / Cache GC (push) Blocked by required conditions

This commit is contained in:
世界 2026-09-08 16:27:29 +08:00
parent 6364d9a5f1
commit f909997082
No known key found for this signature in database
GPG key ID: CD109927C34A63C4
4 changed files with 18 additions and 6 deletions

View file

@ -93,7 +93,11 @@ func JudgeFlow(router Router, inbound string, inboundType string, network uint8,
case PreMatchDrop:
return tun.FlowVerdict{Action: tun.ActionDrop}
case PreMatchBypass:
return tun.FlowVerdict{Action: tun.ActionBypass}
port, isPort := result.Outbound.(tun.Port)
if !isPort {
return tun.FlowVerdict{Action: tun.ActionBypass}
}
return tun.FlowVerdict{Action: tun.ActionBypass, Port: port, UDPTimeout: result.UDPTimeout, NewTracker: result.NewTracker}
case PreMatchHijackDNS:
return tun.FlowVerdict{Action: tun.ActionHijackDNS}
default:

2
go.mod
View file

@ -55,7 +55,7 @@ require (
github.com/sagernet/sing-shadowsocks2 v0.2.1
github.com/sagernet/sing-shadowtls v0.2.1
github.com/sagernet/sing-snell v0.0.0-20260829071736-20f2eaec77c3
github.com/sagernet/sing-tun v0.9.1-0.20260902150428-1bd9bb8b83e8
github.com/sagernet/sing-tun v0.9.1
github.com/sagernet/sing-usbip v0.0.0-20260817040617-28bd42667eca
github.com/sagernet/sing-vmess v0.2.8
github.com/sagernet/smux v1.5.50-sing-box-mod.1

4
go.sum
View file

@ -338,8 +338,8 @@ github.com/sagernet/sing-shadowtls v0.2.1 h1:ZiHZdnEnP+YS73NMsxiZmIFCwNd0M4k7PkG
github.com/sagernet/sing-shadowtls v0.2.1/go.mod h1:sWqKnGlMipCHaGsw1sTTlimyUpgzP4WP3pjhCsYt9oA=
github.com/sagernet/sing-snell v0.0.0-20260829071736-20f2eaec77c3 h1:wjEw0lmCSC+oqh7GD4rbMB/dk7+hZ2VopUj4xM5/Jrc=
github.com/sagernet/sing-snell v0.0.0-20260829071736-20f2eaec77c3/go.mod h1:et8Lws4f5QbOrY65DmjevHGup3mijJkhswkto6cwciM=
github.com/sagernet/sing-tun v0.9.1-0.20260902150428-1bd9bb8b83e8 h1:2BKKMS9mkNV+rgWospnRbyFYDapYFEgq/1RJnp9gNtE=
github.com/sagernet/sing-tun v0.9.1-0.20260902150428-1bd9bb8b83e8/go.mod h1:3EgPst7agntRO7D6GOsiZ1l9FoqdLeuWmKT5TnWkmf0=
github.com/sagernet/sing-tun v0.9.1 h1:eyz5ae+vTlLXMCfeKiNureMihMaP8QAABoHuplQj31A=
github.com/sagernet/sing-tun v0.9.1/go.mod h1:3EgPst7agntRO7D6GOsiZ1l9FoqdLeuWmKT5TnWkmf0=
github.com/sagernet/sing-usbip v0.0.0-20260817040617-28bd42667eca h1:5wA+IE0Fq1CGVLOgSpm0gKKZ03HzugcJ2JyhmDqeX6A=
github.com/sagernet/sing-usbip v0.0.0-20260817040617-28bd42667eca/go.mod h1:ADAZZU85MnM91XNhd2TdZRTaIbA7RjTZuQ1KCHcUbNg=
github.com/sagernet/sing-vmess v0.2.8 h1:xd5nnDOMlC76RgrLksS4jlk3eMt3c3CvQY3NsjWPWeI=

View file

@ -392,7 +392,15 @@ func (r *Router) PreMatch(metadata adapter.InboundContext, firstPacket []byte) a
}
return adapter.PreMatchResult{Action: adapter.PreMatchBypass}
}
return r.preMatchFlow(ctx, &metadata, packetDestination, currentRule, action.Outbound)
if metadata.Destination.IsDomain() || metadata.Destination != packetDestination {
return r.preMatchFlow(ctx, &metadata, packetDestination, currentRule, action.Outbound)
}
result := r.preMatchFlow(ctx, &metadata, packetDestination, currentRule, action.Outbound)
if result.Action != adapter.PreMatchFlow {
return adapter.PreMatchResult{Action: adapter.PreMatchBypass}
}
result.Action = adapter.PreMatchBypass
return result
case *R.RuleActionReject:
rejectErr := action.Error(r.ctx)
if errors.Is(rejectErr, R.ErrDrop) {
@ -512,9 +520,9 @@ func (r *Router) preMatchFlow(ctx context.Context, metadata *adapter.InboundCont
} else if metadata.Destination != packetDestination {
result.Destination = metadata.Destination.AddrPort()
}
r.logger.InfoContext(ctx, "pre-match: forward ", metadata.Network, " connection from ", metadata.Source.AddrString(), " to ", metadata.Destination.AddrString(), " via outbound/", outbound.Type(), "[", outbound.Tag(), "]")
metadataCopy := *metadata
result.NewTracker = func() tun.FlowTracker {
r.logger.InfoContext(ctx, "pre-match: forward ", metadataCopy.Network, " connection from ", metadataCopy.Source.AddrString(), " to ", metadataCopy.Destination.AddrString(), " via outbound/", outbound.Type(), "[", outbound.Tag(), "]")
flowTrackers := make([]tun.FlowTracker, 0, len(r.trackers)+1)
flowTrackers = append(flowTrackers, newFlowLogger(ctx, r.logger, metadataCopy, outbound))
for _, tracker := range r.trackers {