ginuerzh / gost

GO Simple Tunnel - a simple tunnel written in golang
MIT License
15.47k stars 2.42k forks source link

gost2 可以正常代理 grpc 但是 gost3 不行 #910

Closed ShadowySpirits closed 1 year ago

ShadowySpirits commented 1 year ago

使用方式:./gost -L http+grpc://:8118 -F socks5://user:pass@host:8080 -D

此时用 grpc 客户端设置 http 代理为 localhost:8118 并且开启 tls (服务端为自签名证书)尝试调用服务端接口,gost2 可以成功,但是 gost3 不行

grpc 报错:

Channel Pipeline: [HttpProxyHandler$HttpClientCodecWrapper#0, HttpProxyHandler#0, ProtocolNegotiators$ProxyProtocolNegotiationHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]

io.grpc.StatusException: UNAVAILABLE: io exception
Channel Pipeline: [HttpProxyHandler$HttpClientCodecWrapper#0, HttpProxyHandler#0, ProtocolNegotiators$ProxyProtocolNegotiationHandler#0, WriteBufferingAndExceptionHandler#0, DefaultChannelPipeline$TailContext#0]
    at io.grpc.Status.asException(Status.java:550) ~[grpc-api-1.47.0.jar:1.47.0]
    at io.grpc.kotlin.ClientCalls$rpcImpl$1$1$1.onClose(ClientCalls.kt:295) ~[grpc-kotlin-stub-1.2.1.jar:na]
    at io.grpc.internal.DelayedClientCall$DelayedListener$3.run(DelayedClientCall.java:468) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.DelayedClientCall$DelayedListener.delayOrExecute(DelayedClientCall.java:432) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.DelayedClientCall$DelayedListener.onClose(DelayedClientCall.java:465) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.ClientCallImpl.closeObserver(ClientCallImpl.java:562) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.ClientCallImpl.access$300(ClientCallImpl.java:70) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInternal(ClientCallImpl.java:743) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.ClientCallImpl$ClientStreamListenerImpl$1StreamClosed.runInContext(ClientCallImpl.java:722) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.ContextRunnable.run(ContextRunnable.java:37) ~[grpc-core-1.47.0.jar:1.47.0]
    at io.grpc.internal.SerializingExecutor.run(SerializingExecutor.java:133) ~[grpc-core-1.47.0.jar:1.47.0]
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) ~[na:na]
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) ~[na:na]
    at java.base/java.lang.Thread.run(Thread.java:829) ~[na:na]
Caused by: io.netty.handler.proxy.ProxyConnectException: http, none, /127.0.0.1:8118 => 10.71.0.67:8088, disconnected
    at io.netty.handler.proxy.ProxyHandler.channelInactive(ProxyHandler.java:233) ~[netty-handler-proxy-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.CombinedChannelDuplexHandler$DelegatingChannelHandlerContext.fireChannelInactive(CombinedChannelDuplexHandler.java:418) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInputClosed(ByteToMessageDecoder.java:392) ~[netty-codec-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:357) ~[netty-codec-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:326) ~[netty-codec-http-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:221) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.handler.proxy.HttpProxyHandler$HttpClientCodecWrapper.channelInactive(HttpProxyHandler.java:267) ~[netty-handler-proxy-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:241) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.DefaultChannelPipeline$HeadContext.channelInactive(DefaultChannelPipeline.java:1405) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:262) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:248) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:901) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.AbstractChannel$AbstractUnsafe$7.run(AbstractChannel.java:813) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute$$$capture(AbstractEventExecutor.java:164) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:469) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:500) ~[netty-transport-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]
    at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) ~[netty-common-4.1.76.Final.jar:4.1.76.Final]

curl 也无法连通,报错 curl: (52) Empty reply from server

gost3 日志如下

{"caller":"parsing/tls.go:41","level":"debug","msg":"load global TLS certificate files failed, use random generated certificate","time":"2022-12-07T11:07:56.366+08:00"}
{"caller":"parsing/service.go:233","handler":"http","kind":"service","level":"info","listener":"grpc","msg":"listening on [::]:8118/tcp","service":"service-0","time":"2022-12-07T11:07:56.367+08:00"}

版本信息 gost 2.11.4 (go1.19 darwin/arm64) gost 3.0.0-rc.1 (go1.19.2 darwin/arm64) grpc java 1.45.1

ginuerzh commented 1 year ago

gost v2并不支持grpc,gost -L http+grpc://:8118等同于gost -L http://:8118。 如果你需要的是一个HTTP代理,请直接运行gost -L http://:8118