From 3b6a2bc56ece70098b80a408c83535e388b5c942 Mon Sep 17 00:00:00 2001
From: Toby <tobyxdd@gmail.com>
Date: Wed, 21 Apr 2021 17:08:01 -0700
Subject: [PATCH] Use correct address for packets from localRelayConn

---
 pkg/socks5/server.go | 9 ++++++---
 1 file changed, 6 insertions(+), 3 deletions(-)

diff --git a/pkg/socks5/server.go b/pkg/socks5/server.go
index 99771a4..6b8925f 100644
--- a/pkg/socks5/server.go
+++ b/pkg/socks5/server.go
@@ -327,10 +327,13 @@ func (s *Server) udpServer(clientConn *net.UDPConn, localRelayConn *net.UDPConn,
 				go func() {
 					buf := make([]byte, udpBufferSize)
 					for {
-						n, _, err := localRelayConn.ReadFrom(buf)
+						n, from, err := localRelayConn.ReadFrom(buf)
 						if n > 0 {
-							d := socks5.NewDatagram(socks5.ATYPIPv4,
-								[]byte{0x00, 0x00, 0x00, 0x00}, []byte{0x00, 0x00}, buf[:n])
+							atyp, addr, port, err := socks5.ParseAddress(from.String())
+							if err != nil {
+								continue
+							}
+							d := socks5.NewDatagram(atyp, addr, port, buf[:n])
 							_, _ = clientConn.WriteToUDP(d.Bytes(), clientAddr)
 						}
 						if err != nil {