liberal-boy / tls-shunt-proxy

分流 TLS 流量,支持按 sni 分流,分流 http 和无特征流量
327 stars 64 forks source link

http2的分流方式配置没成功 #11

Closed ileeoyo closed 4 years ago

ileeoyo commented 4 years ago

ws分流配置没问题,但是h2的分流伪装一直没成功 目标:/test路径的h2流量流入22567端口,其他http流量访问本地静态网站/var/www image 看说明,http2的path被识别通配符“*”,如图当设置成通配符"*"时,所有流量都流入22567端口。普通的http流量无法转到/var/www静态网站。

如果配置path/test流入22567端口,其他流量转到静态网站。这样发现流量全部到了静态网站。分流一直没成功,请问是我哪里理解有问题吗

liberal-boy commented 4 years ago

这样配置,h1的请求会进去fileServer,h2会进入proxyPass。示例配置已经很清楚的说明h2流量都会被识别为*。

ileeoyo commented 4 years ago

@liberal-boy 可是实际情况是,浏览器访问和工具的h2访问,都进入了proxyPass,浏览器访问并不能进入fileServer。这是为什么呢?还有,请问一下,为什么h2不能像websocket那也路径匹配,只能用*这样匹配呢

liberal-boy commented 4 years ago

@liberal-boy 可是实际情况是,浏览器访问和工具的h2访问,都进入了proxyPass,浏览器访问并不能进入fileServer。这是为什么呢?还有,请问一下,为什么h2不能像websocket那也路径匹配,只能用*这样匹配呢

这个行为是在预期内的,所有h2流量都会被识别为*,原因请自行了解h2协议定义。大部分浏览器都支持h2,并且你的alpn也配置了h2,浏览器当然会使用h2访问。

liberal-boy commented 4 years ago

@ileeoyo 简单来说h2不能实现传输层路径分流。

ileeoyo commented 4 years ago

@liberal-boy 我好像有些明白了,因为之前用的是caddy分流,有如下配置。不太明白caddy是如何实现的。

https://h2.test.com:443 {
    timeouts none
    tls test.crt  test.key
    proxy /test https://127.0.0.1:22567 {
        insecure_skip_verify
        header_upstream Host {host}
        header_upstream X-Forwarded-Proto {scheme}
    }
    proxy / demo.com:80 {
         except /test
    }
}

还有个问题,proxyPass是不是无法转发到非本机端口。比如有一个demo网站,80端口http的。是不是没法反代这个网站。因为测试像如上caddy转到demo.com:80的写法无法成功

liberal-boy commented 4 years ago

@ileeoyo caddy不是传输层分流的。proxyPsss没有限制目标地址。

ileeoyo commented 4 years ago

@liberal-boy 谢谢