|
|
@@ -39,10 +39,10 @@ var addrParser = protocol.NewAddressParser(
|
|
|
)
|
|
|
|
|
|
type ServerSession struct {
|
|
|
- config *ServerConfig
|
|
|
- address net.Address
|
|
|
- port net.Port
|
|
|
- clientAddress net.Address
|
|
|
+ config *ServerConfig
|
|
|
+ address net.Address
|
|
|
+ port net.Port
|
|
|
+ localAddress net.Address
|
|
|
}
|
|
|
|
|
|
func (s *ServerSession) handshake4(cmd byte, reader io.Reader, writer io.Writer) (*protocol.RequestHeader, error) {
|
|
|
@@ -192,14 +192,11 @@ func (s *ServerSession) handshake5(nMethod byte, reader io.Reader, writer io.Wri
|
|
|
//nolint:gocritic // Use if else chain for clarity
|
|
|
if request.Command == protocol.RequestCommandUDP {
|
|
|
if s.config.Address != nil {
|
|
|
- // Use configured IP as remote address in the response to UdpAssociate
|
|
|
+ // Use configured IP as remote address in the response to UDP Associate
|
|
|
responseAddress = s.config.Address.AsAddress()
|
|
|
- } else if s.clientAddress == net.LocalHostIP || s.clientAddress == net.LocalHostIPv6 {
|
|
|
- // For localhost clients use loopback IP
|
|
|
- responseAddress = s.clientAddress
|
|
|
} else {
|
|
|
- // For non-localhost clients use inbound listening address
|
|
|
- responseAddress = s.address
|
|
|
+ // Use conn.LocalAddr() IP as remote address in the response by default
|
|
|
+ responseAddress = s.localAddress
|
|
|
}
|
|
|
}
|
|
|
if err := writeSocks5Response(writer, statusSuccess, responseAddress, responsePort); err != nil {
|