Closed LearZhou closed 3 years ago
我都是用 haproxy+ws+tls 只用443, vmess vless 用不同path, 运作完全正常。 您可否提供 haproxy.cfg 和 v2 config.json 看看。
part of server side config.json:
"inbounds": [
{
"port": 10000,
"listen": "0.0.0.0",
"protocol": "vmess",
"settings": {
"clients": [
{
"id": "...",
"level": 0,
"alterId": 64
}
]
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/v2rayWeb"
}
}
},
{
"port": 10001,
"listen": "0.0.0.0",
"protocol": "vless",
"settings": {
"clients": [
{
"id": "...",
"flow": "",
"level": 0
}
],
"decryption": "none"
},
"streamSettings": {
"network": "ws",
"security": "none",
"wsSettings": {
"path": "/v2rayVLESS"
}
}
}
],
part of my haproxy configuration:
frontend main
bind 127.0.0.1:443 ssl crt /etc/ssl/.../combined.pem accept-proxy
mode http
option forwardfor
acl host_webserver hdr_beg(Host) -i example.com
http-request allow if host_webserver
http-request deny
## routing based on Host Path
use_backend vmess if { path -m beg /v2rayWeb }
use_backend vless if { path -m beg /v2rayVLESS }
## routing based on websocket protocol header
acl hdr_connection_upgrade hdr(Connection) -i upgrade
acl hdr_upgrade_websocket hdr(Upgrade) -i websocket
use_backend vmess if hdr_connection_upgrade hdr_upgrade_websocket
default_backend webserver_81
As you can see, the 'use_backend vmess if hdr_connection_upgrade hdr_upgrade_websocket' is the only route to vmess after switched to websocket, yet it still works well. I thought it will have to be 'use_backend vless if hdr_connection_upgrade hdr_upgrade_websocket' to make it work and didn't know how.
VLESS 的 UDP over TCP 在某些情况下存在问题,可能会在下个版本中修复。
無從分辨應該發到VLESS還是Vmess所在的那個本地端口,只能一律發到Vmess所在端口。
这里指的是?
這個配置是從官方用nginx做的示例配置轉過來的,其中有一個是,當數據流轉向WebSocket時有一個轉換的判斷,這裡如何根據path來判斷應當發到Vmess還是VLESS的監聽端口?這個用HaProxy如何配置這點不是太清楚,在配置增加VLESS之前,僅用Vmess+ws+tls是沒有問題的。
有两点先想了解清楚
可试试以下haproxy.cfg
## routing based on Host Path
use_backend vmess if { path -i -m str /v2rayWeb } ## -i 是區分大小寫, str 是要完全匹配
use_backend vless if { path -i -m str /v2rayVLESS } ## -i 是區分大小寫, str 是要完全匹配
## routing based on websocket protocol header
## acl hdr_connection_upgrade hdr(Connection) -i upgrade ## 暂时停用
## acl hdr_upgrade_websocket hdr(Upgrade) -i websocket ## 暂时停用
## use_backend vmess if hdr_connection_upgrade hdr_upgrade_websocket ## 暂时停用
default_backend webserver_81
补充: 如个是 beg, V2abc 是等同 V2abcde 如个是 str, V2abc 是不等同 V2abcde
haproxy acl 可参考以下网址 https://www.haproxy.com/blog/introduction-to-haproxy-acls/
多謝@kingwilliam的提示。回答您的問題如下:
根據您提的幾點,我做了幾個對比測試,發現啟用HaProxy的websocket探測,能加快v2ray的響應速度,以下是修正後的部分配置:
frontend main
bind 127.0.0.1:443 ssl crt /etc/ssl/.../combined.pem accept-proxy
mode http
option forwardfor
acl host_webserver hdr_beg(Host) -i example.com
http-request allow if host_webserver
http-request deny
acl pathVmess path -m str /v2rayWeb
acl pathVless path -m str /v2rayVLESS
## routing based on Host Path
#use_backend vmess if pathVmess
#use_backend vless if pathVless
## routing based on websocket protocol header
acl is_websocket hdr(Connection) -i upgrade
acl is_websocket hdr(Upgrade) -i websocket
use_backend vmess if is_websocket pathVmess
use_backend vless if is_websocket pathVless
#default_backend webserver_81
use_backend webserver_81 unless pathVmess || pathVless
這種方式是在探測到websocket之後再根據path轉發到v2ray服務,好處應該有:
另外,@rprx:
發現使用vmess+ws+tls時,若客戶端配置沒有mux,UDP請求仍可能有延遲;不知能否確認vmess也有類似問題,但沒有vless嚴重?
@rprx:
剛才我在vmess+ws+tls的配置下,做了對比測試,發現沒有加入mux的客戶端配置,確實可能會導致打開網頁等待時間很長;而加入mux緩解的配置,打開速度非常快。
现在已可正常分发?
可以了。
This issue is stale because it has been open 120 days with no activity. Remove stale label or comment or this will be closed in 5 days
除非特殊情况,请完整填写所有问题。不按模板发的 issue 将直接被关闭。 如果你遇到的问题不是 V2Ray 的 bug,比如你不清楚要如何配置,请使用Discussion进行讨论。
1) 你正在使用哪个版本的 V2Ray?(如果服务器和客户端使用了不同版本,请注明) v4.29.0
2) 你的使用场景是什么?比如使用 Chrome 通过 Socks/VMess 代理观看 YouTube 视频。 同時配置VLESS和Vmess+WebSocket+TLS的方案,但通過HaProxy解密TLS並分發
3) 你看到的不正常的现象是什么?(请描述具体现象,比如访问超时,TLS 证书错误等) HaProxy通過不同的path判斷分發至VLESS或者Vmess,由於這2個方案同時在外網的443端口監聽,利用了同一個域名,導致從path判斷轉入WebSocket時,無從分辨應該發到VLESS還是Vmess所在的那個本地端口,只能一律發到Vmess所在端口。 而這樣的配置VLESS可以正常使用,唯一的缺點是UDP(如DNS請求)會因出現錯誤而導致反應延遲,加入mux選項之後緩解。
4) 你期待看到的正确表现是怎样的? UDP請求不應該導致錯誤,VLESS和Vmess是否不應共享進入WebSocket之後的服務?
5) 请附上你的配置(提交 Issue 前请隐藏服务器端IP地址)。
服务器端配置: 無關
客户端配置: 無關
6) 请附上出错时软件输出的错误日志。在 Linux 中,日志通常在
/var/log/v2ray/error.log
文件中。服务器端错误日志: 無
客户端错误日志: 無
7) 请附上访问日志。在 Linux 中,日志通常在
/var/log/v2ray/access.log
文件中。 無關8) 其它相关的配置文件(如 Nginx)和相关日志。
9) 如果 V2Ray 无法启动,请附上
--test
输出。通常的命令为
/usr/bin/v2ray/v2ray --test --config /etc/v2ray/config.json
。请按实际情况修改。10) 如果 V2Ray 服务运行不正常,请附上 journal 日志。
通常的命令为
journalctl -u v2ray
。请预览一下你填的内容再提交。