UDS: Keep valid source addr (#4325)

Fixes https://github.com/XTLS/Xray-core/issues/4324
This commit is contained in:
风扇滑翔翼 2025-01-26 19:08:36 +08:00 committed by GitHub
parent 5679d717ee
commit 3a7a78ff3a
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -2,6 +2,7 @@ package inbound
import (
"context"
"strings"
"sync"
"sync/atomic"
"time"
@ -463,9 +464,19 @@ func (w *dsWorker) callback(conn stat.Connection) {
WriteCounter: w.downlinkCounter,
}
}
// For most of time, unix obviously have no source addr. But if we leave it empty, it will cause panic.
// So we use gateway as source for log.
// However, there are some special situations where a valid source address might be available.
// Such as the source address parsed from X-Forwarded-For in websocket.
// In that case, we keep it.
var source net.Destination
if !strings.Contains(conn.RemoteAddr().String(), "unix") {
source = net.DestinationFromAddr(conn.RemoteAddr())
} else {
source = net.UnixDestination(w.address)
}
ctx = session.ContextWithInbound(ctx, &session.Inbound{
// Unix have no source addr, so we use gateway as source for log.
Source: net.UnixDestination(w.address),
Source: source,
Gateway: net.UnixDestination(w.address),
Tag: w.tag,
Conn: conn,