Forráskód Böngészése

Customize UDP server address

V2Ray 10 éve
szülő
commit
99671a173f

+ 25 - 10
proxy/socks/config/json/config.go

@@ -1,6 +1,8 @@
 package json
 
 import (
+	"net"
+
 	"github.com/v2ray/v2ray-core/config"
 	"github.com/v2ray/v2ray-core/config/json"
 )
@@ -19,32 +21,45 @@ type SocksConfig struct {
 	AuthMethod string         `json:"auth"`
 	Accounts   []SocksAccount `json:"accounts"`
 	UDPEnabled bool           `json:"udp"`
+	HostIP     string         `json:"ip"`
 
 	accountMap map[string]string
+	ip         net.IP
 }
 
-func (config *SocksConfig) Initialize() {
-	config.accountMap = make(map[string]string)
-	for _, account := range config.Accounts {
-		config.accountMap[account.Username] = account.Password
+func (sc *SocksConfig) Initialize() {
+	sc.accountMap = make(map[string]string)
+	for _, account := range sc.Accounts {
+		sc.accountMap[account.Username] = account.Password
+	}
+
+	if len(sc.HostIP) > 0 {
+		sc.ip = net.ParseIP(sc.HostIP)
+		if sc.ip == nil {
+			sc.ip = net.IPv4(127, 0, 0, 1)
+		}
 	}
 }
 
-func (config *SocksConfig) IsNoAuth() bool {
-	return config.AuthMethod == AuthMethodNoAuth
+func (sc *SocksConfig) IsNoAuth() bool {
+	return sc.AuthMethod == AuthMethodNoAuth
 }
 
-func (config *SocksConfig) IsPassword() bool {
-	return config.AuthMethod == AuthMethodUserPass
+func (sc *SocksConfig) IsPassword() bool {
+	return sc.AuthMethod == AuthMethodUserPass
 }
 
-func (config *SocksConfig) HasAccount(user, pass string) bool {
-	if actualPass, found := config.accountMap[user]; found {
+func (sc *SocksConfig) HasAccount(user, pass string) bool {
+	if actualPass, found := sc.accountMap[user]; found {
 		return actualPass == pass
 	}
 	return false
 }
 
+func (sc *SocksConfig) IP() net.IP {
+	return sc.ip
+}
+
 func init() {
 	json.RegisterConfigType("socks", config.TypeInbound, func() interface{} {
 		return new(SocksConfig)

+ 1 - 2
proxy/socks/udp.go

@@ -22,8 +22,7 @@ func (server *SocksServer) ListenUDP(port uint16) error {
 		log.Error("Socks failed to listen UDP on port %d: %v", port, err)
 		return err
 	}
-	// TODO: make this configurable
-	udpAddress = v2net.IPAddress([]byte{127, 0, 0, 1}, port)
+	udpAddress = v2net.IPAddress(server.config.IP(), port)
 
 	go server.AcceptPackets(conn)
 	return nil

+ 2 - 1
release/config/vpoint_socks_vmess.json

@@ -7,7 +7,8 @@
     "protocol": "socks",
     "settings": {
       "auth": "noauth",
-      "udp": false
+      "udp": false,
+      "ip": "127.0.0.1"
     }
   },
   "outbound": {