Xray-core
Xray-core copied to clipboard
acceptProxyProtocol + gRPC 源IP不更新
使用 caddy 反代 xray, 启用 proxy_protocol 传递客户端IP地址。
观察 xray 的输出日志,可以发现源IP固定为第一次连接的客户端IP,不会随客户端网络切换发生变化。
客户端 gRPC 设置
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "duckduckgo",
"idle_timeout": 60,
"initial_windows_size": 32768
},
"security": "tls",
"tlsSettings": {
"allowInsecure": false,
"serverName": "*.*.*",
"fingerprint": "edge"
}
}
服务端 gRPC 设置
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "duckduckgo"
},
"sockopt": {
"acceptProxyProtocol": true
}
}
Caddy 反代 gRPC
@duckduckgo {
protocol grpc
path /duckduckgo/*
}
reverse_proxy @duckduckgo 127.0.0.1:8080 {
transport http {
proxy_protocol v2
versions h2c
}
}
观察 xray 的输出日志,可以发现源IP固定为第一次连接的客户端IP,不会随客户端网络切换发生变化。
按理来说客户端切换网络后 TCP 会断,会开一条新的 TCP,~~请再测几次确定该问题确实存在~~
~~反直觉,先关了~~
按理来说客户端切换网络后 TCP 会断,会开一条新的 TCP,~请再测几次确定该问题确实存在~
我配合 trojan / vless 测试均复现
@r06ertray 不加caddy会不会出现问题 如果不加没问题 可能需要抓包检查一下发出proxy protocol有没有问题
可以用X-Forwarded-For
头传递源ip(proxy protocol只在建立tcp连接时传递,应该是h2多路复用导致的问题?)
@r06ertray 不加caddy会不会出现问题 如果不加没问题 可能需要抓包检查一下发出proxy protocol有没有问题
不会配置 nginx
xray直接监听端口 不用caddy或者Nginx
如果问题存在的话,只有一种可能,就是 Caddy 复用了到 Xray 服务端的连接,~~但这样会导致所有用户都成了同一个 IP 吧~~
xray直接监听端口 不用caddy或者Nginx
单独使用 xray 测试了以下两种方案,源IP均正常更新
1、不使用反代,直接配置 TLS
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "duckduckgo"
},
"security": "tls",
"tlsSettings": {
"rejectUnknownSni": true,
"alpn": [
"h2"
],
"certificates": [
{
"certificateFile": "/path/to/cert.pem",
"keyFile": "/path/to/key.pem"
}
]
}
}
2、借用其他的 inbound,fallback 到 gRPC
"fallbacks": [
{
"dest": 8080,
"xver": 2
}
]
"streamSettings": {
"network": "grpc",
"grpcSettings": {
"serviceName": "duckduckgo"
},
"sockopt": {
"acceptProxyProtocol": true
}
}