Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

NGINX SNI 分流至 XRAY,再回落到 NGINX H2 端口后的问题 #708

Closed
Dukewill opened this issue Sep 13, 2021 · 15 comments
Closed

NGINX SNI 分流至 XRAY,再回落到 NGINX H2 端口后的问题 #708

Dukewill opened this issue Sep 13, 2021 · 15 comments

Comments

@Dukewill
Copy link

使用全 docker 环境,其中 nginx 版本 1.21.1xray 版本为 1.4.2。容器都在同一个 bridge,互相可通过容器名连接。该配置中使用了两个域名,分别是 web.dom.comtrojan.dom.com,前者直接指向 web container,后者分流至 xray 后回落至 nginx,指向同一个 web container。

完整配置比较长,烦请看下此 gist

目前遇到的主要问题就是,在 xray 中添加 h2 回落,即无法从 trojan.dom.com 访问网站(web container)。但访问 web.dom.com 正常,且成功一次后,通过 trojan.dom.com 也即可访问 web,一段时间后又无法访问。如此往复。

仅用 http1.1 回落则一切正常。

nginx 日志如下:

nginx.1 2021/09/13 12:56:15 [info] 80#80: *4 proxy 172.18.0.4:53854 connected to 172.18.0.3:38669
nginx.1 2021/09/13 12:56:15 [info] 80#80: *6 client sent invalid request while reading client request line, client:172.18.0.3, server: trojan.dom.com, request: "PRI * HTTP/2.0"
nginx.1 trojan.dom.com 172.18.0.3 - - [13/Sep/2021:12:56:15+0000] "PRI* HTTP/2.0”400 157 “_”“_”
nginx.1 2021/09/13 12:56:15 [info] 80#80: *4 upstream disconnected,bytes from/to client:713/5490,bytes from/to upstream:5490

xray 日志如下:

172.18.0.4:53850 rejected proxy/trojan: not trojan protocol

新 edge 提示:ERR_HTTP2_PROTOCOL_ERROR

Safari 提示:cannot parse response (NSURLErrorDomain:-1017)

试了设置 set_real_ip_from,和一些跟 proxy_protocol 有关的设置,似乎并没有起作用,还会让 web.dom.com 也无法访问。

感谢!

@lxhao61
Copy link

lxhao61 commented Sep 14, 2021

此问题是由v2ray带来的bug,对xray来说不是问题,你只需改成XTLS模式就解决了问题了,反正XTLS兼容TLS的应用。

@Dukewill
Copy link
Author

此问题是由v2ray带来的BUG,对xray来说不是问题,你只需改成XTLS模式就解决了问题了,反正XTLS兼容TLS的应用。

谢谢,请问您指的是服务端和客户端都改为 xtls,还是服务端 xtls 也可兼容客户端的 tls?
若是前者,应用场景会比较受限。

@lxhao61
Copy link

lxhao61 commented Sep 14, 2021

此问题是由v2ray带来的BUG,对xray来说不是问题,你只需改成XTLS模式就解决了问题了,反正XTLS兼容TLS的应用。

谢谢,请问您指的是服务端和客户端都改为 xtls,还是服务端 xtls 也可兼容客户端的 tls?
若是前者,应用场景会比较受限。

仅服务端改即可。服务端XTLS可兼容客户端的TLS

@Dukewill
Copy link
Author

Dukewill commented Sep 14, 2021

此问题是由v2ray带来的BUG,对xray来说不是问题,你只需改成XTLS模式就解决了问题了,反正XTLS兼容TLS的应用。

谢谢,请问您指的是服务端和客户端都改为 xtls,还是服务端 xtls 也可兼容客户端的 tls?
若是前者,应用场景会比较受限。

仅服务端改即可。服务端 xtls 可兼容客户端的 tls

学习了,感谢解惑!

@Dukewill
Copy link
Author

经测试,只需将 xray 配置中 security 参数由 tls 改为 xtls,同时 tlsSettings 改为 xtlsSettings 即可解决问题。
且回落 nginx h2 端口后再经路径分流至 xray 即可实现 grpc 协议。好大一个弯。

@Sentsuki
Copy link

现在XTLS标注为已弃用,又该怎么呢?

@RPRX
Copy link
Member

RPRX commented Jan 29, 2023

现在XTLS标注为已弃用,又该怎么呢?

旧版 XTLS 弃用了,现在用 XTLS Vision

@FranzKafkaYu
Copy link
Contributor

@Sentsuki U can use vless+tcp+tls+xtls-rprx-vision(flow)instead,and wait Reality to come.

@Sentsuki
Copy link

现在XTLS标注为已弃用,又该怎么呢?

旧版 XTLS 弃用了,现在用 XTLS Vision

但是使用XTLS Vision依然报错,这是我XRAY的配置文件,其中"alpn"项写为"http/1.1"可以正常回落到伪装页面

        {
            "listen": "127.0.0.1",
            "port": 12345,
            "protocol": "vless",
            "settings": {
                "clients": [
                    {
                        "id": "*****",
                        "flow": "xtls-rprx-vision",
                        "level": 0
                    }
                ],
                "decryption": "none",
                "fallbacks": [
                    {
                        "dest": "127.0.0.1:80"
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "tls",
                "tlsSettings": {
                "alpn":["h2","http/1.1"],
                    "certificates": [
                        {
                            "certificateFile": "*******",
                            "keyFile": "*******"
                        }
                    ]
                }
            }
        }

@Sentsuki
Copy link

@Sentsuki U can use vless+tcp+tls+xtls-rprx-vision(flow)instead,and wait Reality to come.

That's doesn't work

@ThreeSourLemon
Copy link

@Sentsuki 回落要填两个吧 一个h2 一个1。1

@Sentsuki
Copy link

@Sentsuki 回落要填两个吧 一个h2 一个1。1

然后nginx也要写两个监听吗?

@ThreeSourLemon
Copy link

@Sentsuki

@FranzKafkaYu
Copy link
Contributor

@Sentsuki U can use vless+tcp+tls+xtls-rprx-vision(flow)instead,and wait Reality to come.

That's doesn't work

you need to set up alpn in xray fallback and Nginx configuration both.

@ThreeSourLemon
Copy link

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

6 participants