Sockopt config: Add trustedXForwardedFor (for XHTTP, WS, HU inbounds) (#5331)

Fixes https://github.com/XTLS/Xray-core/pull/5101#issuecomment-3404979909
This commit is contained in:
RPRX
2025-11-23 01:09:49 +00:00
committed by GitHub
parent d41840132a
commit 2969a189e6
8 changed files with 119 additions and 67 deletions
+13 -1
View File
@@ -20,6 +20,7 @@ type server struct {
config *Config
addConn internet.ConnHandler
innnerListener net.Listener
socketSettings *internet.SocketConfig
}
func (s *server) Close() error {
@@ -70,7 +71,17 @@ func (s *server) Handle(conn net.Conn) (stat.Connection, error) {
return nil, err
}
forwardedAddrs := http_proto.ParseXForwardedFor(req.Header)
var forwardedAddrs []net.Address
if s.socketSettings != nil && len(s.socketSettings.TrustedXForwardedFor) > 0 {
for _, key := range s.socketSettings.TrustedXForwardedFor {
if len(req.Header.Values(key)) > 0 {
forwardedAddrs = http_proto.ParseXForwardedFor(req.Header)
break
}
}
} else {
forwardedAddrs = http_proto.ParseXForwardedFor(req.Header)
}
remoteAddr := conn.RemoteAddr()
if len(forwardedAddrs) > 0 && forwardedAddrs[0].Family().IsIP() {
remoteAddr = &net.TCPAddr{
@@ -141,6 +152,7 @@ func ListenHTTPUpgrade(ctx context.Context, address net.Address, port net.Port,
config: transportConfiguration,
addConn: addConn,
innnerListener: listener,
socketSettings: streamSettings.SocketSettings,
}
go serverInstance.keepAccepting()
return serverInstance, nil