From 83b8cdd600692ce97f2f7d111ca53f3cb238ea34 Mon Sep 17 00:00:00 2001 From: uoosef Date: Tue, 29 Aug 2023 17:06:33 +0330 Subject: [PATCH] add udp config support --- cmd/core/core.go | 12 ++++++++---- config.json | 33 ++++++++++++++++++++++++++------- server/server.go | 2 +- transport/transport.go | 4 ++-- transport/ws.go | 2 +- 5 files changed, 38 insertions(+), 15 deletions(-) diff --git a/cmd/core/core.go b/cmd/core/core.go index 7537e96..601afdf 100644 --- a/cmd/core/core.go +++ b/cmd/core/core.go @@ -35,7 +35,11 @@ type Config struct { EnableDNSFragmentation bool `mapstructure:"EnableDNSFragmentation"` RemoteDNSAddr string `mapstructure:"RemoteDNSAddr"` BindAddress string `mapstructure:"BindAddress"` + UDPBindAddress string `mapstructure:"UDPBindAddress"` ChunksLengthBeforeSni [2]int `mapstructure:"ChunksLengthBeforeSni"` + UDPReadTimeout int `mapstructure:"UDPReadTimeout"` + UDPWriteTimeout int `mapstructure:"UDPWriteTimeout"` + UDPLinkIdleTimeout int64 `mapstructure:"UDPLinkIdleTimeout"` SniChunksLength [2]int `mapstructure:"SniChunksLength"` ChunksLengthAfterSni [2]int `mapstructure:"ChunksLengthAfterSni"` DelayBetweenChunks [2]int `mapstructure:"DelayBetweenChunks"` @@ -72,9 +76,9 @@ func RunServer(config *Config, captureCTRLC bool) error { BindAddress: config.BindAddress, Dialer: dialer_, Logger: appLogger, - ReadTimeout: 300, - WriteTimeout: 300, - LinkIdleTimeout: 300, + ReadTimeout: config.UDPReadTimeout, + WriteTimeout: config.UDPWriteTimeout, + LinkIdleTimeout: config.UDPLinkIdleTimeout, EstablishedTunnels: make(map[string]*transport.EstablishedTunnel), ShortClientID: utils.ShortID(6), } @@ -85,7 +89,7 @@ func RunServer(config *Config, captureCTRLC bool) error { Logger: appLogger, Dialer: dialer_, BufferPool: bufferpool.NewPool(32 * 1024), - UDPBind: "20.1.1.18:0", + UDPBind: config.UDPBindAddress, Tunnel: wsTunnel, } diff --git a/config.json b/config.json index 7c17770..3e7fac6 100644 --- a/config.json +++ b/config.json @@ -1,17 +1,32 @@ { "TLSHeaderLength": 5, "TLSPaddingEnabled": false, - "TLSPaddingSize": [40, 80], + "TLSPaddingSize": [ + 40, + 80 + ], "RemoteDNSAddr": "https://yarp.lefolgoc.net/dns-query", "EnableDNSFragmentation": false, "DnsCacheTTL": 3000000, "DnsRequestTimeout": 10, "BindAddress": "0.0.0.0:8085", - "ChunksLengthBeforeSni": [2000, 2000], - "SniChunksLength": [5, 10], - "ChunksLengthAfterSni": [2000, 2000], - "DelayBetweenChunks": [10, 20], - "WorkerAddress": "https://uoosef-worker.uoosef.workers.dev/dns-query", + "ChunksLengthBeforeSni": [ + 2000, + 2000 + ], + "SniChunksLength": [ + 5, + 10 + ], + "ChunksLengthAfterSni": [ + 2000, + 2000 + ], + "DelayBetweenChunks": [ + 10, + 20 + ], + "WorkerAddress": "https://.workers.dev/dns-query", "WorkerIPPortAddress": "104.17.196.93:2096", "WorkerEnabled": true, "WorkerDNSOnly": false, @@ -21,5 +36,9 @@ "Domain": "yarp.lefolgoc.net", "IP": "5.39.88.20" } - ] + ], + "UDPBindAddress": "0.0.0.0", + "UDPReadTimeout": 120, + "UDPWriteTimeout": 120, + "UDPLinkIdleTimeout": 120 } \ No newline at end of file diff --git a/server/server.go b/server/server.go index 0eee0a8..218bb46 100644 --- a/server/server.go +++ b/server/server.go @@ -397,7 +397,7 @@ func (s *Server) resolveDestination(ctx context.Context, req *socks5.Request) (s // sendChunks sends chunks from bepass to dst func (s *Server) sendChunks(dst io.Writer, src io.Reader, shouldSplit bool, wg *sync.WaitGroup) { defer wg.Done() - dataBuffer := make([]byte, 256*1024) + dataBuffer := make([]byte, 32*1024) for index := 0; ; index++ { bytesRead, err := src.Read(dataBuffer) diff --git a/transport/transport.go b/transport/transport.go index 913cb70..c0ca3f1 100644 --- a/transport/transport.go +++ b/transport/transport.go @@ -101,14 +101,14 @@ func (t *Transport) Handle(network string, w io.Writer, req *socks5.Request) err } func (t *Transport) Copy(reader io.Reader, writer io.Writer) error { - buf := make([]byte, 256*1024) + buf := make([]byte, 32*1024) _, err := io.CopyBuffer(writer, reader, buf[:cap(buf)]) return err } func (t *Transport) TunnelUDP(w io.Writer, req *socks5.Request) error { - udpAddr, err := net.ResolveUDPAddr("udp", "192.168.12.2:0") + udpAddr, err := net.ResolveUDPAddr("udp", t.UDPBind+":0") // connect to remote server via ws bindLn, err := net.ListenUDP("udp", udpAddr) if err != nil { diff --git a/transport/ws.go b/transport/ws.go index 14f4c77..fc7516b 100644 --- a/transport/ws.go +++ b/transport/ws.go @@ -145,7 +145,7 @@ func (w *WSTunnel) PersistentDial(tunnelEndpoint string, bindWriteChannel chan U //1- unpack the message //2- find the channel that message should write on //3- write the message on that channel - rawPacket := make([]byte, 256*1024) + rawPacket := make([]byte, 32*1024) n, err := conn.Read(rawPacket) if n < 2 && err == nil { continue