From a2f6a4b1545e8848ed4d8a5f5908320664d97fa7 Mon Sep 17 00:00:00 2001 From: Meo597 <197331664+Meo597@users.noreply.github.com> Date: Mon, 6 Jul 2026 07:14:42 +0800 Subject: [PATCH] remove proxySettings --- app/proxyman/config.pb.go | 33 +++------ app/proxyman/config.proto | 2 +- app/proxyman/outbound/handler.go | 60 ++--------------- common/session/session.go | 2 +- infra/conf/transport_internet.go | 18 ----- infra/conf/xray.go | 103 +++++++--------------------- proxy/freedom/freedom.go | 20 +++--- testing/scenarios/feature_test.go | 16 +++-- transport/internet/config.go | 4 -- transport/internet/config.pb.go | 108 +++++++----------------------- transport/internet/config.proto | 5 -- 11 files changed, 90 insertions(+), 281 deletions(-) diff --git a/app/proxyman/config.pb.go b/app/proxyman/config.pb.go index 8b9dfd272..37f5c6c39 100644 --- a/app/proxyman/config.pb.go +++ b/app/proxyman/config.pb.go @@ -330,7 +330,6 @@ type SenderConfig struct { // Send traffic through the given IP. Only IP is allowed. Via *net.IPOrDomain `protobuf:"bytes,1,opt,name=via,proto3" json:"via,omitempty"` StreamSettings *internet.StreamConfig `protobuf:"bytes,2,opt,name=stream_settings,json=streamSettings,proto3" json:"stream_settings,omitempty"` - ProxySettings *internet.ProxyConfig `protobuf:"bytes,3,opt,name=proxy_settings,json=proxySettings,proto3" json:"proxy_settings,omitempty"` MultiplexSettings *MultiplexingConfig `protobuf:"bytes,4,opt,name=multiplex_settings,json=multiplexSettings,proto3" json:"multiplex_settings,omitempty"` ViaCidr string `protobuf:"bytes,5,opt,name=via_cidr,json=viaCidr,proto3" json:"via_cidr,omitempty"` TargetStrategy internet.DomainStrategy `protobuf:"varint,6,opt,name=target_strategy,json=targetStrategy,proto3,enum=xray.transport.internet.DomainStrategy" json:"target_strategy,omitempty"` @@ -382,13 +381,6 @@ func (x *SenderConfig) GetStreamSettings() *internet.StreamConfig { return nil } -func (x *SenderConfig) GetProxySettings() *internet.ProxyConfig { - if x != nil { - return x.ProxySettings - } - return nil -} - func (x *SenderConfig) GetMultiplexSettings() *MultiplexingConfig { if x != nil { return x.MultiplexSettings @@ -506,14 +498,13 @@ const file_app_proxyman_config_proto_rawDesc = "" + "\x03tag\x18\x01 \x01(\tR\x03tag\x12M\n" + "\x11receiver_settings\x18\x02 \x01(\v2 .xray.common.serial.TypedMessageR\x10receiverSettings\x12G\n" + "\x0eproxy_settings\x18\x03 \x01(\v2 .xray.common.serial.TypedMessageR\rproxySettings\"\x10\n" + - "\x0eOutboundConfig\"\x9d\x03\n" + + "\x0eOutboundConfig\"\xd6\x02\n" + "\fSenderConfig\x12-\n" + "\x03via\x18\x01 \x01(\v2\x1b.xray.common.net.IPOrDomainR\x03via\x12N\n" + - "\x0fstream_settings\x18\x02 \x01(\v2%.xray.transport.internet.StreamConfigR\x0estreamSettings\x12K\n" + - "\x0eproxy_settings\x18\x03 \x01(\v2$.xray.transport.internet.ProxyConfigR\rproxySettings\x12T\n" + + "\x0fstream_settings\x18\x02 \x01(\v2%.xray.transport.internet.StreamConfigR\x0estreamSettings\x12T\n" + "\x12multiplex_settings\x18\x04 \x01(\v2%.xray.app.proxyman.MultiplexingConfigR\x11multiplexSettings\x12\x19\n" + "\bvia_cidr\x18\x05 \x01(\tR\aviaCidr\x12P\n" + - "\x0ftarget_strategy\x18\x06 \x01(\x0e2'.xray.transport.internet.DomainStrategyR\x0etargetStrategy\"\xa4\x01\n" + + "\x0ftarget_strategy\x18\x06 \x01(\x0e2'.xray.transport.internet.DomainStrategyR\x0etargetStrategyJ\x04\b\x03\x10\x04\"\xa4\x01\n" + "\x12MultiplexingConfig\x12\x18\n" + "\aenabled\x18\x01 \x01(\bR\aenabled\x12 \n" + "\vconcurrency\x18\x02 \x01(\x05R\vconcurrency\x12(\n" + @@ -548,8 +539,7 @@ var file_app_proxyman_config_proto_goTypes = []any{ (*net.IPOrDomain)(nil), // 10: xray.common.net.IPOrDomain (*internet.StreamConfig)(nil), // 11: xray.transport.internet.StreamConfig (*serial.TypedMessage)(nil), // 12: xray.common.serial.TypedMessage - (*internet.ProxyConfig)(nil), // 13: xray.transport.internet.ProxyConfig - (internet.DomainStrategy)(0), // 14: xray.transport.internet.DomainStrategy + (internet.DomainStrategy)(0), // 13: xray.transport.internet.DomainStrategy } var file_app_proxyman_config_proto_depIdxs = []int32{ 7, // 0: xray.app.proxyman.SniffingConfig.domains_excluded:type_name -> xray.common.geodata.DomainRule @@ -562,14 +552,13 @@ var file_app_proxyman_config_proto_depIdxs = []int32{ 12, // 7: xray.app.proxyman.InboundHandlerConfig.proxy_settings:type_name -> xray.common.serial.TypedMessage 10, // 8: xray.app.proxyman.SenderConfig.via:type_name -> xray.common.net.IPOrDomain 11, // 9: xray.app.proxyman.SenderConfig.stream_settings:type_name -> xray.transport.internet.StreamConfig - 13, // 10: xray.app.proxyman.SenderConfig.proxy_settings:type_name -> xray.transport.internet.ProxyConfig - 6, // 11: xray.app.proxyman.SenderConfig.multiplex_settings:type_name -> xray.app.proxyman.MultiplexingConfig - 14, // 12: xray.app.proxyman.SenderConfig.target_strategy:type_name -> xray.transport.internet.DomainStrategy - 13, // [13:13] is the sub-list for method output_type - 13, // [13:13] is the sub-list for method input_type - 13, // [13:13] is the sub-list for extension type_name - 13, // [13:13] is the sub-list for extension extendee - 0, // [0:13] is the sub-list for field type_name + 6, // 10: xray.app.proxyman.SenderConfig.multiplex_settings:type_name -> xray.app.proxyman.MultiplexingConfig + 13, // 11: xray.app.proxyman.SenderConfig.target_strategy:type_name -> xray.transport.internet.DomainStrategy + 12, // [12:12] is the sub-list for method output_type + 12, // [12:12] is the sub-list for method input_type + 12, // [12:12] is the sub-list for extension type_name + 12, // [12:12] is the sub-list for extension extendee + 0, // [0:12] is the sub-list for field type_name } func init() { file_app_proxyman_config_proto_init() } diff --git a/app/proxyman/config.proto b/app/proxyman/config.proto index 8ccb5132a..7a0387147 100644 --- a/app/proxyman/config.proto +++ b/app/proxyman/config.proto @@ -57,7 +57,7 @@ message SenderConfig { // Send traffic through the given IP. Only IP is allowed. xray.common.net.IPOrDomain via = 1; xray.transport.internet.StreamConfig stream_settings = 2; - xray.transport.internet.ProxyConfig proxy_settings = 3; + reserved 3; MultiplexingConfig multiplex_settings = 4; string via_cidr = 5; xray.transport.internet.DomainStrategy target_strategy = 6; diff --git a/app/proxyman/outbound/handler.go b/app/proxyman/outbound/handler.go index 2b9b0c2be..adc61ff0f 100644 --- a/app/proxyman/outbound/handler.go +++ b/app/proxyman/outbound/handler.go @@ -16,7 +16,6 @@ import ( "github.com/xtls/xray-core/common/errors" "github.com/xtls/xray-core/common/mux" "github.com/xtls/xray-core/common/net" - "github.com/xtls/xray-core/common/net/cnc" "github.com/xtls/xray-core/common/serial" "github.com/xtls/xray-core/common/session" "github.com/xtls/xray-core/core" @@ -27,8 +26,6 @@ import ( "github.com/xtls/xray-core/transport" "github.com/xtls/xray-core/transport/internet" "github.com/xtls/xray-core/transport/internet/stat" - "github.com/xtls/xray-core/transport/internet/tls" - "github.com/xtls/xray-core/transport/pipe" "google.golang.org/protobuf/proto" ) @@ -64,7 +61,6 @@ type Handler struct { streamSettings *internet.MemoryStreamConfig proxyConfig proto.Message proxy proxy.Outbound - outboundManager outbound.Manager mux *mux.ClientManager xudp *mux.ClientManager udp443 string @@ -78,7 +74,6 @@ func NewHandler(ctx context.Context, config *core.OutboundHandlerConfig) (outbou uplinkCounter, downlinkCounter := getStatCounter(v, config.Tag) h := &Handler{ tag: config.Tag, - outboundManager: v.GetFeature(outbound.ManagerType()).(outbound.Manager), uplinkCounter: uplinkCounter, downlinkCounter: downlinkCounter, } @@ -277,53 +272,16 @@ func (h *Handler) ResolveStrategy() internet.DomainStrategy { return internet.DomainStrategy_AS_IS } -func (h *Handler) UsesProxySettings() bool { - if h.senderSettings != nil && h.senderSettings.ProxySettings.HasTag() { - return true - } +func (h *Handler) UsesDialerProxy() bool { return h.streamSettings != nil && h.streamSettings.SocketSettings != nil && len(h.streamSettings.SocketSettings.DialerProxy) > 0 } // Dial implements internet.Dialer. func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connection, error) { - if h.senderSettings != nil { - - if h.senderSettings.ProxySettings.HasTag() { - - tag := h.senderSettings.ProxySettings.Tag - handler := h.outboundManager.GetHandler(tag) - if handler != nil { - errors.LogDebug(ctx, "proxying to ", tag, " for dest ", dest) - outbounds := session.OutboundsFromContext(ctx) - ctx = session.ContextWithOutbounds(ctx, append(outbounds, &session.Outbound{ - Target: dest, - Tag: tag, - })) // add another outbound in session ctx - opts := pipe.OptionsFromContext(ctx) - uplinkReader, uplinkWriter := pipe.New(opts...) - downlinkReader, downlinkWriter := pipe.New(opts...) - - go handler.Dispatch(ctx, &transport.Link{Reader: uplinkReader, Writer: downlinkWriter}) - conn := cnc.NewConnection(cnc.ConnectionInputMulti(uplinkWriter), cnc.ConnectionOutputMulti(downlinkReader)) - - if config := tls.ConfigFromStreamSettings(h.streamSettings); config != nil { - tlsConfig := config.GetTLSConfig(tls.WithDestination(dest)) - conn = tls.Client(conn, tlsConfig) - } - - return h.getStatCouterConnection(conn), nil - } - - errors.LogError(ctx, "failed to get outbound handler with tag: ", tag) - return nil, errors.New("failed to get outbound handler with tag: " + tag) - } - - if h.senderSettings.Via != nil { - outbounds := session.OutboundsFromContext(ctx) - ob := outbounds[len(outbounds)-1] - h.SetOutboundGateway(ctx, ob) - } - + if h.senderSettings != nil && h.senderSettings.Via != nil { + outbounds := session.OutboundsFromContext(ctx) + ob := outbounds[len(outbounds)-1] + h.SetOutboundGateway(ctx, ob) } if conn, err := h.getUoTConnection(ctx, dest); err != os.ErrInvalid { @@ -343,14 +301,13 @@ func (h *Handler) Dial(ctx context.Context, dest net.Destination) (stat.Connecti } func (h *Handler) SetOutboundGateway(ctx context.Context, ob *session.Outbound) { - if ob.Gateway == nil && h.senderSettings != nil && h.senderSettings.Via != nil && !h.senderSettings.ProxySettings.HasTag() && (h.streamSettings.SocketSettings == nil || len(h.streamSettings.SocketSettings.DialerProxy) == 0) { + if ob.Gateway == nil && h.senderSettings != nil && h.senderSettings.Via != nil && !h.UsesDialerProxy() { var domain string addr := h.senderSettings.Via.AsAddress() domain = h.senderSettings.Via.GetDomain() switch { case h.senderSettings.ViaCidr != "": ob.Gateway = ParseRandomIP(addr, h.senderSettings.ViaCidr) - case domain == "origin": if inbound := session.InboundFromContext(ctx); inbound != nil { if inbound.Local.IsValid() && inbound.Local.Address.Family().IsIP() { @@ -365,12 +322,9 @@ func (h *Handler) SetOutboundGateway(ctx context.Context, ob *session.Outbound) errors.LogDebug(ctx, "use inbound source ip as sendthrough: ", inbound.Source.Address.String()) } } - //case addr.Family().IsDomain(): - default: + default: // case addr.Family().IsDomain(): ob.Gateway = addr - } - } } diff --git a/common/session/session.go b/common/session/session.go index b5f163ff1..674f44372 100644 --- a/common/session/session.go +++ b/common/session/session.go @@ -70,7 +70,7 @@ type Outbound struct { Tag string // Name of the outbound proxy that handles the connection. Name string - // Unused. Conn is actually internet.Connection. May be nil. It is currently nil for outbound with proxySettings + // Unused. Conn is actually internet.Connection. May be nil. Conn net.Conn // CanSpliceCopy is a property for this connection // 1 = can, 2 = after processing protocol info should be able to, 3 = cannot diff --git a/infra/conf/transport_internet.go b/infra/conf/transport_internet.go index 7bd481652..1707cd813 100644 --- a/infra/conf/transport_internet.go +++ b/infra/conf/transport_internet.go @@ -2197,21 +2197,3 @@ func (c *StreamConfig) Build() (*internet.StreamConfig, error) { return config, nil } - -type ProxyConfig struct { - Tag string `json:"tag"` - - // TransportLayerProxy: For compatibility. - TransportLayerProxy bool `json:"transportLayer"` -} - -// Build implements Buildable. -func (v *ProxyConfig) Build() (*internet.ProxyConfig, error) { - if v.Tag == "" { - return nil, errors.New("Proxy tag is not set.") - } - return &internet.ProxyConfig{ - Tag: v.Tag, - TransportLayerProxy: v.TransportLayerProxy, - }, nil -} diff --git a/infra/conf/xray.go b/infra/conf/xray.go index 8b978e965..ee870bf19 100644 --- a/infra/conf/xray.go +++ b/infra/conf/xray.go @@ -216,23 +216,17 @@ type OutboundDetourConfig struct { Tag string `json:"tag"` Settings *json.RawMessage `json:"settings"` StreamSetting *StreamConfig `json:"streamSettings"` - ProxySettings *ProxyConfig `json:"proxySettings"` + ProxySettings *json.RawMessage `json:"proxySettings"` MuxSettings *MuxConfig `json:"mux"` TargetStrategy string `json:"targetStrategy"` } -func (c *OutboundDetourConfig) checkChainProxyConfig() error { - if c.StreamSetting == nil || c.ProxySettings == nil || c.StreamSetting.SocketSettings == nil { - return nil - } - if len(c.ProxySettings.Tag) > 0 && len(c.StreamSetting.SocketSettings.DialerProxy) > 0 { - return errors.New("proxySettings.tag is conflicted with sockopt.dialerProxy").AtWarning() - } - return nil -} - // Build implements Buildable. func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { + if c.ProxySettings != nil { + return nil, errors.PrintRemovedFeatureError(`outbound "proxySettings"`, `"streamSettings.sockopt.dialerProxy"`) + } + senderSettings := &proxyman.SenderConfig{} switch strings.ToLower(c.TargetStrategy) { case "asis", "": @@ -260,9 +254,6 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { default: return nil, errors.New("unsupported target domain strategy: ", c.TargetStrategy) } - if err := c.checkChainProxyConfig(); err != nil { - return nil, err - } if c.SendThrough != nil { address := ParseSendThough(c.SendThrough) @@ -288,26 +279,6 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { senderSettings.StreamSettings = ss } - if c.ProxySettings != nil { - ps, err := c.ProxySettings.Build() - if err != nil { - return nil, errors.New("invalid outbound detour proxy settings").Base(err) - } - if ps.TransportLayerProxy { - if senderSettings.StreamSettings != nil { - if senderSettings.StreamSettings.SocketSettings != nil { - senderSettings.StreamSettings.SocketSettings.DialerProxy = ps.Tag - } else { - senderSettings.StreamSettings.SocketSettings = &internet.SocketConfig{DialerProxy: ps.Tag} - } - } else { - senderSettings.StreamSettings = &internet.StreamConfig{SocketSettings: &internet.SocketConfig{DialerProxy: ps.Tag}} - } - ps = nil - } - senderSettings.ProxySettings = ps - } - if c.MuxSettings != nil { ms, err := c.MuxSettings.Build() if err != nil { @@ -331,19 +302,13 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { if fc, ok := ts.(*freedom.Config); ok && fc.DomainStrategy != internet.DomainStrategy_AS_IS { errors.PrintDeprecatedFeatureWarning("freedom.domainStrategy", "sockopt.domainStrategy or targetStrategy") - if c.ProxySettings != nil && !c.ProxySettings.TransportLayerProxy { - if senderSettings.TargetStrategy == internet.DomainStrategy_AS_IS { - senderSettings.TargetStrategy = fc.DomainStrategy - } - } else { - if senderSettings.StreamSettings == nil { - senderSettings.StreamSettings = &internet.StreamConfig{} - } - if senderSettings.StreamSettings.SocketSettings == nil { - senderSettings.StreamSettings.SocketSettings = &internet.SocketConfig{} - } - senderSettings.StreamSettings.SocketSettings.DomainStrategy = fc.DomainStrategy + if senderSettings.StreamSettings == nil { + senderSettings.StreamSettings = &internet.StreamConfig{} } + if senderSettings.StreamSettings.SocketSettings == nil { + senderSettings.StreamSettings.SocketSettings = &internet.SocketConfig{} + } + senderSettings.StreamSettings.SocketSettings.DomainStrategy = fc.DomainStrategy } if fc, ok := rawConfig.(*FreedomConfig); ok && (fc.PrivacyGuard == nil || *fc.PrivacyGuard) { @@ -354,41 +319,23 @@ func (c *OutboundDetourConfig) Build() (*core.OutboundHandlerConfig, error) { senderSettings.StreamSettings.SocketSettings = &internet.SocketConfig{} } if fc.PrivacyGuard == nil { - if c.ProxySettings != nil && !c.ProxySettings.TransportLayerProxy { - if senderSettings.TargetStrategy == internet.DomainStrategy_AS_IS { - senderSettings.TargetStrategy = internet.DomainStrategy_USE_IP46 - } - } else { - if senderSettings.TargetStrategy == internet.DomainStrategy_AS_IS && - senderSettings.StreamSettings.SocketSettings.DomainStrategy == internet.DomainStrategy_AS_IS { - senderSettings.StreamSettings.SocketSettings.DomainStrategy = internet.DomainStrategy_USE_IP46 - } + if senderSettings.TargetStrategy == internet.DomainStrategy_AS_IS && + senderSettings.StreamSettings.SocketSettings.DomainStrategy == internet.DomainStrategy_AS_IS { + senderSettings.StreamSettings.SocketSettings.DomainStrategy = internet.DomainStrategy_USE_IP46 } } else if *fc.PrivacyGuard { - if c.ProxySettings != nil && !c.ProxySettings.TransportLayerProxy { - if senderSettings.TargetStrategy != internet.DomainStrategy_USE_IP4 && - senderSettings.TargetStrategy != internet.DomainStrategy_USE_IP46 && - senderSettings.TargetStrategy != internet.DomainStrategy_FORCE_IP4 && - senderSettings.TargetStrategy != internet.DomainStrategy_FORCE_IP46 { - if senderSettings.TargetStrategy != internet.DomainStrategy_AS_IS { - errors.LogWarning(context.Background(), `The "freedom" outbound "privacyGuard" overrides the existing "targetStrategy". Please update your config(s) if this is unintended.`) - } - senderSettings.TargetStrategy = internet.DomainStrategy_USE_IP46 - } - } else { - if senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_USE_IP4 && - senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_USE_IP46 && - senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_FORCE_IP4 && - senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_FORCE_IP46 { - if senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_AS_IS { - errors.LogWarning(context.Background(), `The "freedom" outbound "privacyGuard" overrides the existing "sockopt.domainStrategy". Please update your config(s) if this is unintended.`) - } - senderSettings.StreamSettings.SocketSettings.DomainStrategy = internet.DomainStrategy_USE_IP46 - } - if senderSettings.TargetStrategy != internet.DomainStrategy_AS_IS { - errors.LogWarning(context.Background(), `The "freedom" outbound "privacyGuard" overrides the existing "targetStrategy". Please update your config(s) if this is unintended.`) - senderSettings.TargetStrategy = internet.DomainStrategy_AS_IS + if senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_USE_IP4 && + senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_USE_IP46 && + senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_FORCE_IP4 && + senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_FORCE_IP46 { + if senderSettings.StreamSettings.SocketSettings.DomainStrategy != internet.DomainStrategy_AS_IS { + errors.LogWarning(context.Background(), `The "freedom" outbound "privacyGuard" overrides the existing "sockopt.domainStrategy". Please update your config(s) if this is unintended.`) } + senderSettings.StreamSettings.SocketSettings.DomainStrategy = internet.DomainStrategy_USE_IP46 + } + if senderSettings.TargetStrategy != internet.DomainStrategy_AS_IS { + errors.LogWarning(context.Background(), `The "freedom" outbound "privacyGuard" overrides the existing "targetStrategy". Please update your config(s) if this is unintended.`) + senderSettings.TargetStrategy = internet.DomainStrategy_AS_IS } } } diff --git a/proxy/freedom/freedom.go b/proxy/freedom/freedom.go index dddde6da1..fb1e46f11 100644 --- a/proxy/freedom/freedom.go +++ b/proxy/freedom/freedom.go @@ -41,8 +41,8 @@ func init() { if handler, ok := session.FullHandlerFromContext(ctx).(handlerWithResolveStrategy); ok { h.resolveStrategy = handler.ResolveStrategy() } - if handler, ok := session.FullHandlerFromContext(ctx).(handlerWithProxySettings); ok { - h.usesProxySettings = handler.UsesProxySettings() + if handler, ok := session.FullHandlerFromContext(ctx).(handlerWithDialerProxy); ok { + h.usesDialerProxy = handler.UsesDialerProxy() } if err := core.RequireFeatures(ctx, func(pm policy.Manager) error { return h.Init(config.(*Config), pm) @@ -98,8 +98,8 @@ type handlerWithResolveStrategy interface { ResolveStrategy() internet.DomainStrategy } -type handlerWithProxySettings interface { - UsesProxySettings() bool +type handlerWithDialerProxy interface { + UsesDialerProxy() bool } type FinalRule struct { @@ -112,11 +112,11 @@ type FinalRule struct { // Handler handles Freedom connections. type Handler struct { - policyManager policy.Manager - config *Config - finalRules []*FinalRule - resolveStrategy internet.DomainStrategy - usesProxySettings bool + policyManager policy.Manager + config *Config + finalRules []*FinalRule + resolveStrategy internet.DomainStrategy + usesDialerProxy bool } func buildFinalRule(config *FinalRuleConfig) (*FinalRule, error) { @@ -361,7 +361,7 @@ func (h *Handler) Process(ctx context.Context, link *transport.Link, dialer inte return h.blackhole(ctx, input, output, blockedRule, blockedDest) } if destination.Address.Family().IsDomain() && (defaultRule != nil || len(h.finalRules) > 0) { - if h.usesProxySettings { + if h.usesDialerProxy { errors.LogInfo(ctx, "skipping final rule check for proxied remote endpoint, original target: ", destination) } else { // SRV/TXT, lookup failed diff --git a/testing/scenarios/feature_test.go b/testing/scenarios/feature_test.go index 0b6dd7cb5..fa1ff3564 100644 --- a/testing/scenarios/feature_test.go +++ b/testing/scenarios/feature_test.go @@ -92,7 +92,7 @@ func TestPassiveConnection(t *testing.T) { } } -func TestProxy(t *testing.T) { +func TestDialerProxy(t *testing.T) { tcpServer := tcp.Server{ MsgProcessor: xor, } @@ -187,8 +187,10 @@ func TestProxy(t *testing.T) { }, }), SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{ - ProxySettings: &internet.ProxyConfig{ - Tag: "proxy", + StreamSettings: &internet.StreamConfig{ + SocketSettings: &internet.SocketConfig{ + DialerProxy: "proxy", + }, }, }), }, @@ -218,7 +220,7 @@ func TestProxy(t *testing.T) { } } -func TestProxyOverKCP(t *testing.T) { +func TestDialerProxyOverKCP(t *testing.T) { tcpServer := tcp.Server{ MsgProcessor: xor, } @@ -321,11 +323,11 @@ func TestProxyOverKCP(t *testing.T) { }, }), SenderSettings: serial.ToTypedMessage(&proxyman.SenderConfig{ - ProxySettings: &internet.ProxyConfig{ - Tag: "proxy", - }, StreamSettings: &internet.StreamConfig{ ProtocolName: "mkcp", + SocketSettings: &internet.SocketConfig{ + DialerProxy: "proxy", + }, }, }), }, diff --git a/transport/internet/config.go b/transport/internet/config.go index 0a93fe04b..df03a6ef9 100644 --- a/transport/internet/config.go +++ b/transport/internet/config.go @@ -91,10 +91,6 @@ func (c *StreamConfig) HasSecuritySettings() bool { return len(c.SecuritySettings) > 0 } -func (c *ProxyConfig) HasTag() bool { - return c != nil && len(c.Tag) > 0 -} - func (m SocketConfig_TProxyMode) IsEnabled() bool { return m != SocketConfig_Off } diff --git a/transport/internet/config.pb.go b/transport/internet/config.pb.go index ee696b43b..bbdd653dd 100644 --- a/transport/internet/config.pb.go +++ b/transport/internet/config.pb.go @@ -206,7 +206,7 @@ func (x SocketConfig_TProxyMode) Number() protoreflect.EnumNumber { // Deprecated: Use SocketConfig_TProxyMode.Descriptor instead. func (SocketConfig_TProxyMode) EnumDescriptor() ([]byte, []int) { - return file_transport_internet_config_proto_rawDescGZIP(), []int{6, 0} + return file_transport_internet_config_proto_rawDescGZIP(), []int{5, 0} } type TransportConfig struct { @@ -582,58 +582,6 @@ func (x *QuicParams) GetMaxIncomingStreams() int64 { return 0 } -type ProxyConfig struct { - state protoimpl.MessageState `protogen:"open.v1"` - Tag string `protobuf:"bytes,1,opt,name=tag,proto3" json:"tag,omitempty"` - TransportLayerProxy bool `protobuf:"varint,2,opt,name=transportLayerProxy,proto3" json:"transportLayerProxy,omitempty"` - unknownFields protoimpl.UnknownFields - sizeCache protoimpl.SizeCache -} - -func (x *ProxyConfig) Reset() { - *x = ProxyConfig{} - mi := &file_transport_internet_config_proto_msgTypes[4] - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - ms.StoreMessageInfo(mi) -} - -func (x *ProxyConfig) String() string { - return protoimpl.X.MessageStringOf(x) -} - -func (*ProxyConfig) ProtoMessage() {} - -func (x *ProxyConfig) ProtoReflect() protoreflect.Message { - mi := &file_transport_internet_config_proto_msgTypes[4] - if x != nil { - ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) - if ms.LoadMessageInfo() == nil { - ms.StoreMessageInfo(mi) - } - return ms - } - return mi.MessageOf(x) -} - -// Deprecated: Use ProxyConfig.ProtoReflect.Descriptor instead. -func (*ProxyConfig) Descriptor() ([]byte, []int) { - return file_transport_internet_config_proto_rawDescGZIP(), []int{4} -} - -func (x *ProxyConfig) GetTag() string { - if x != nil { - return x.Tag - } - return "" -} - -func (x *ProxyConfig) GetTransportLayerProxy() bool { - if x != nil { - return x.TransportLayerProxy - } - return false -} - type CustomSockopt struct { state protoimpl.MessageState `protogen:"open.v1"` System string `protobuf:"bytes,1,opt,name=system,proto3" json:"system,omitempty"` @@ -648,7 +596,7 @@ type CustomSockopt struct { func (x *CustomSockopt) Reset() { *x = CustomSockopt{} - mi := &file_transport_internet_config_proto_msgTypes[5] + mi := &file_transport_internet_config_proto_msgTypes[4] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -660,7 +608,7 @@ func (x *CustomSockopt) String() string { func (*CustomSockopt) ProtoMessage() {} func (x *CustomSockopt) ProtoReflect() protoreflect.Message { - mi := &file_transport_internet_config_proto_msgTypes[5] + mi := &file_transport_internet_config_proto_msgTypes[4] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -673,7 +621,7 @@ func (x *CustomSockopt) ProtoReflect() protoreflect.Message { // Deprecated: Use CustomSockopt.ProtoReflect.Descriptor instead. func (*CustomSockopt) Descriptor() ([]byte, []int) { - return file_transport_internet_config_proto_rawDescGZIP(), []int{5} + return file_transport_internet_config_proto_rawDescGZIP(), []int{4} } func (x *CustomSockopt) GetSystem() string { @@ -753,7 +701,7 @@ type SocketConfig struct { func (x *SocketConfig) Reset() { *x = SocketConfig{} - mi := &file_transport_internet_config_proto_msgTypes[6] + mi := &file_transport_internet_config_proto_msgTypes[5] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -765,7 +713,7 @@ func (x *SocketConfig) String() string { func (*SocketConfig) ProtoMessage() {} func (x *SocketConfig) ProtoReflect() protoreflect.Message { - mi := &file_transport_internet_config_proto_msgTypes[6] + mi := &file_transport_internet_config_proto_msgTypes[5] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -778,7 +726,7 @@ func (x *SocketConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use SocketConfig.ProtoReflect.Descriptor instead. func (*SocketConfig) Descriptor() ([]byte, []int) { - return file_transport_internet_config_proto_rawDescGZIP(), []int{6} + return file_transport_internet_config_proto_rawDescGZIP(), []int{5} } func (x *SocketConfig) GetMark() int32 { @@ -940,7 +888,7 @@ type HappyEyeballsConfig struct { func (x *HappyEyeballsConfig) Reset() { *x = HappyEyeballsConfig{} - mi := &file_transport_internet_config_proto_msgTypes[7] + mi := &file_transport_internet_config_proto_msgTypes[6] ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) ms.StoreMessageInfo(mi) } @@ -952,7 +900,7 @@ func (x *HappyEyeballsConfig) String() string { func (*HappyEyeballsConfig) ProtoMessage() {} func (x *HappyEyeballsConfig) ProtoReflect() protoreflect.Message { - mi := &file_transport_internet_config_proto_msgTypes[7] + mi := &file_transport_internet_config_proto_msgTypes[6] if x != nil { ms := protoimpl.X.MessageStateOf(protoimpl.Pointer(x)) if ms.LoadMessageInfo() == nil { @@ -965,7 +913,7 @@ func (x *HappyEyeballsConfig) ProtoReflect() protoreflect.Message { // Deprecated: Use HappyEyeballsConfig.ProtoReflect.Descriptor instead. func (*HappyEyeballsConfig) Descriptor() ([]byte, []int) { - return file_transport_internet_config_proto_rawDescGZIP(), []int{7} + return file_transport_internet_config_proto_rawDescGZIP(), []int{6} } func (x *HappyEyeballsConfig) GetPrioritizeIpv6() bool { @@ -1040,10 +988,7 @@ const file_transport_internet_config_proto_rawDesc = "" + " \x01(\x03R\x0emaxIdleTimeout\x12*\n" + "\x11keep_alive_period\x18\v \x01(\x03R\x0fkeepAlivePeriod\x12;\n" + "\x1adisable_path_mtu_discovery\x18\f \x01(\bR\x17disablePathMtuDiscovery\x120\n" + - "\x14max_incoming_streams\x18\r \x01(\x03R\x12maxIncomingStreams\"Q\n" + - "\vProxyConfig\x12\x10\n" + - "\x03tag\x18\x01 \x01(\tR\x03tag\x120\n" + - "\x13transportLayerProxy\x18\x02 \x01(\bR\x13transportLayerProxy\"\x93\x01\n" + + "\x14max_incoming_streams\x18\r \x01(\x03R\x12maxIncomingStreams\"\x93\x01\n" + "\rCustomSockopt\x12\x16\n" + "\x06system\x18\x01 \x01(\tR\x06system\x12\x18\n" + "\anetwork\x18\x02 \x01(\tR\anetwork\x12\x14\n" + @@ -1127,7 +1072,7 @@ func file_transport_internet_config_proto_rawDescGZIP() []byte { } var file_transport_internet_config_proto_enumTypes = make([]protoimpl.EnumInfo, 3) -var file_transport_internet_config_proto_msgTypes = make([]protoimpl.MessageInfo, 8) +var file_transport_internet_config_proto_msgTypes = make([]protoimpl.MessageInfo, 7) var file_transport_internet_config_proto_goTypes = []any{ (DomainStrategy)(0), // 0: xray.transport.internet.DomainStrategy (AddressPortStrategy)(0), // 1: xray.transport.internet.AddressPortStrategy @@ -1136,28 +1081,27 @@ var file_transport_internet_config_proto_goTypes = []any{ (*StreamConfig)(nil), // 4: xray.transport.internet.StreamConfig (*UdpHop)(nil), // 5: xray.transport.internet.UdpHop (*QuicParams)(nil), // 6: xray.transport.internet.QuicParams - (*ProxyConfig)(nil), // 7: xray.transport.internet.ProxyConfig - (*CustomSockopt)(nil), // 8: xray.transport.internet.CustomSockopt - (*SocketConfig)(nil), // 9: xray.transport.internet.SocketConfig - (*HappyEyeballsConfig)(nil), // 10: xray.transport.internet.HappyEyeballsConfig - (*serial.TypedMessage)(nil), // 11: xray.common.serial.TypedMessage - (*net.IPOrDomain)(nil), // 12: xray.common.net.IPOrDomain + (*CustomSockopt)(nil), // 7: xray.transport.internet.CustomSockopt + (*SocketConfig)(nil), // 8: xray.transport.internet.SocketConfig + (*HappyEyeballsConfig)(nil), // 9: xray.transport.internet.HappyEyeballsConfig + (*serial.TypedMessage)(nil), // 10: xray.common.serial.TypedMessage + (*net.IPOrDomain)(nil), // 11: xray.common.net.IPOrDomain } var file_transport_internet_config_proto_depIdxs = []int32{ - 11, // 0: xray.transport.internet.TransportConfig.settings:type_name -> xray.common.serial.TypedMessage - 12, // 1: xray.transport.internet.StreamConfig.address:type_name -> xray.common.net.IPOrDomain + 10, // 0: xray.transport.internet.TransportConfig.settings:type_name -> xray.common.serial.TypedMessage + 11, // 1: xray.transport.internet.StreamConfig.address:type_name -> xray.common.net.IPOrDomain 3, // 2: xray.transport.internet.StreamConfig.transport_settings:type_name -> xray.transport.internet.TransportConfig - 11, // 3: xray.transport.internet.StreamConfig.security_settings:type_name -> xray.common.serial.TypedMessage - 11, // 4: xray.transport.internet.StreamConfig.udpmasks:type_name -> xray.common.serial.TypedMessage - 11, // 5: xray.transport.internet.StreamConfig.tcpmasks:type_name -> xray.common.serial.TypedMessage + 10, // 3: xray.transport.internet.StreamConfig.security_settings:type_name -> xray.common.serial.TypedMessage + 10, // 4: xray.transport.internet.StreamConfig.udpmasks:type_name -> xray.common.serial.TypedMessage + 10, // 5: xray.transport.internet.StreamConfig.tcpmasks:type_name -> xray.common.serial.TypedMessage 6, // 6: xray.transport.internet.StreamConfig.quic_params:type_name -> xray.transport.internet.QuicParams - 9, // 7: xray.transport.internet.StreamConfig.socket_settings:type_name -> xray.transport.internet.SocketConfig + 8, // 7: xray.transport.internet.StreamConfig.socket_settings:type_name -> xray.transport.internet.SocketConfig 5, // 8: xray.transport.internet.QuicParams.udp_hop:type_name -> xray.transport.internet.UdpHop 2, // 9: xray.transport.internet.SocketConfig.tproxy:type_name -> xray.transport.internet.SocketConfig.TProxyMode 0, // 10: xray.transport.internet.SocketConfig.domain_strategy:type_name -> xray.transport.internet.DomainStrategy - 8, // 11: xray.transport.internet.SocketConfig.customSockopt:type_name -> xray.transport.internet.CustomSockopt + 7, // 11: xray.transport.internet.SocketConfig.customSockopt:type_name -> xray.transport.internet.CustomSockopt 1, // 12: xray.transport.internet.SocketConfig.address_port_strategy:type_name -> xray.transport.internet.AddressPortStrategy - 10, // 13: xray.transport.internet.SocketConfig.happy_eyeballs:type_name -> xray.transport.internet.HappyEyeballsConfig + 9, // 13: xray.transport.internet.SocketConfig.happy_eyeballs:type_name -> xray.transport.internet.HappyEyeballsConfig 14, // [14:14] is the sub-list for method output_type 14, // [14:14] is the sub-list for method input_type 14, // [14:14] is the sub-list for extension type_name @@ -1176,7 +1120,7 @@ func file_transport_internet_config_proto_init() { GoPackagePath: reflect.TypeOf(x{}).PkgPath(), RawDescriptor: unsafe.Slice(unsafe.StringData(file_transport_internet_config_proto_rawDesc), len(file_transport_internet_config_proto_rawDesc)), NumEnums: 3, - NumMessages: 8, + NumMessages: 7, NumExtensions: 0, NumServices: 0, }, diff --git a/transport/internet/config.proto b/transport/internet/config.proto index c139111aa..fbd37f171 100644 --- a/transport/internet/config.proto +++ b/transport/internet/config.proto @@ -86,11 +86,6 @@ message QuicParams { int64 max_incoming_streams = 13; } -message ProxyConfig { - string tag = 1; - bool transportLayerProxy = 2; -} - message CustomSockopt { string system = 1; string network = 2;