Browse Source

shadowsockets fullcone inbound support

Shelikhoo 3 years ago
parent
commit
e28ef6a47d

+ 2 - 0
proxy/shadowsocks/config.proto

@@ -9,6 +9,7 @@ option java_multiple_files = true;
 import "common/net/network.proto";
 import "common/protocol/user.proto";
 import "common/protocol/server_spec.proto";
+import "common/net/packetaddr/config.proto";
 
 message Account {
   string password = 1;
@@ -31,6 +32,7 @@ message ServerConfig {
   bool udp_enabled = 1 [deprecated = true];
   v2ray.core.common.protocol.User user = 2;
   repeated v2ray.core.common.net.Network network = 3;
+  v2ray.core.net.packetaddr.PacketAddrType packet_encoding = 4;
 }
 
 message ClientConfig {

+ 16 - 2
proxy/shadowsocks/server.go

@@ -2,6 +2,7 @@ package shadowsocks
 
 import (
 	"context"
+	"github.com/v2fly/v2ray-core/v5/common/net/packetaddr"
 	"time"
 
 	core "github.com/v2fly/v2ray-core/v5"
@@ -70,10 +71,23 @@ func (s *Server) Process(ctx context.Context, network net.Network, conn internet
 }
 
 func (s *Server) handlerUDPPayload(ctx context.Context, conn internet.Connection, dispatcher routing.Dispatcher) error {
-	udpServer := udp.NewSplitDispatcher(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
+	udpDispatcherConstructor := udp.NewSplitDispatcher
+	switch s.config.PacketEncoding {
+	case packetaddr.PacketAddrType_None:
+		break
+	case packetaddr.PacketAddrType_Packet:
+		packetAddrDispatcherFactory := udp.NewPacketAddrDispatcherCreator(ctx)
+		udpDispatcherConstructor = packetAddrDispatcherFactory.NewPacketAddrDispatcher
+	}
+
+	udpServer := udpDispatcherConstructor(dispatcher, func(ctx context.Context, packet *udp_proto.Packet) {
 		request := protocol.RequestHeaderFromContext(ctx)
 		if request == nil {
-			return
+			request = &protocol.RequestHeader{
+				Port:    packet.Source.Port,
+				Address: packet.Source.Address,
+				User:    s.user,
+			}
 		}
 
 		payload := packet.Payload

+ 2 - 0
proxy/shadowsocks/simplified/config.proto

@@ -8,6 +8,7 @@ option java_multiple_files = true;
 
 import "common/protoext/extensions.proto";
 import "common/net/address.proto";
+import "common/net/packetaddr/config.proto";
 
 message ServerConfig{
   option (v2ray.core.common.protoext.message_opt).type = "inbound";
@@ -16,6 +17,7 @@ message ServerConfig{
   string method = 1;
   string password = 2;
   string network = 3;
+  v2ray.core.net.packetaddr.PacketAddrType packet_encoding = 4;
 }
 
 message ClientConfig {