go-gost / gost

GO Simple Tunnel - a simple tunnel written in golang
https://gost.run
MIT License
4.38k stars 528 forks source link

关于透明代理部分网站无法正常工作的疑问 #479

Open chiyububaci opened 6 months ago

chiyububaci commented 6 months ago

原始需求

我的原始需求是想内网实现一个支持sniffing的透明代理节点,理论上只需要把对应网站的解析改为这个透明代理节点,流量就会被透明代理到海外服务器(用法和网上一些改host加速Google的方法类似)

实现方案

gost正好可以实现我的需求,于是乎我在内网的docker启动服务如下:

docker run --name proxy-gost --restart unless-stopped -d --net host_net --ip 192.168.1.10 gogost/gost -L red://:443\?sniffing=true -L red://:80\?sniffing=true -F socks5://192.168.1.3:1080

其中192.168.1.10是我的docker中macvlan的ip,和我的内网同属一个子网,192.168.1.3:1080则是我内网的socks5全局代理服务器,它负责把所有经过它的流量代理到海外服务器,没有任何规则。

理论上我启动了这个服务后,现在我只需要把想要加速的域名通过host或者DNS的方式把解析改为192.168.1.10,就能愉快的进行加速了,事实上大部分情况下也确实达到了想要的效果,比如我在内网自建的DNS服务AdGuard加入如下的自定义规则:

||*google*$dnsrewrite=192.168.1.10
||*youtube*$dnsrewrite=192.168.1.10
||*ytimg.com$dnsrewrite=192.168.1.10

规则的意思是,通配符匹配的域名,解析改为192.168.1.10

经过实践,访问Google和YouTube都能正常加速,确实可以起到加速的作用

出现的问题

在上述方案运行一段时间后,大部分情况下可以良好工作,但是在某些域名下,情况却不一样,比如拿github.com举例,在AdGuard配置如下规则后

||*github*.io$dnsrewrite=192.168.1.10
||*github*.com$dnsrewrite=192.168.1.10

访问GitHub时,一开始正常,但是多访问几个链接后,会出现如下提示:

image
Fastly error: unknown domain: github.com. Please check that this domain has been added to a service.

Details: cache-bur-kbur8200108-BUR

同样的情况也出现在了hub.docker.com等网站上:

image
403 ERROR
The request could not be satisfied.
Bad request. We can't connect to the server for this app or website at this time. There might be too much traffic or a configuration error. Try again later, or contact the app or website owner.
If you provide content to customers through CloudFront, you can find steps to troubleshoot and help prevent this error by reviewing the CloudFront documentation.
Generated by cloudfront (CloudFront)
Request ID: jGjuCB7x1u8U8apiQRKmOhGeEsrvrwcR4q0jJf1yiTCgqDzT8H3WqA==

这让我百思不得其解,究竟是什么环节出问题了,才会发生这种情况。因此请求社区的帮助,究竟如何操作,才能解决这个问题。

ginuerzh commented 6 months ago

你应该要用SNI代理而不透明代理。

chiyububaci commented 6 months ago

你应该要用SNI代理而不透明代理。

@ginuerzh 感谢您的指点,但是我的初衷是搭建一个透明代理服务,有没有办法在保持透明代理特点的情况下,解决这个问题呢

chiyububaci commented 6 months ago

@ginuerzh 另外,我发现,在一些情况下,使用gost进行透明代理时,速度无法达到与直接使用普通全局代理时相当的速度,举例子,在YouTube观看高清视频时:

使用gost代理时的Connection Speed

image

使用默认全局代理时的Connection Speed

image

以上测试,使用均为同一个海外代理服务器,情况表现为,使用gost透明代理时,速度始终徘徊在40000Kbps左右,无法再往上增加,而普通的全局代理服务,则可以跑满海外代理服务器的带宽。请问有没有什么好办法,可以改善这个问题呢,希望您不吝赐教!

ginuerzh commented 6 months ago

换成SNI代理试试

gost -L sni://:443 -L sni://:80 -F socks5://192.168.1.3:1080
chiyububaci commented 6 months ago

换成SNI代理试试

gost -L sni://:443 -L sni://:80 -F socks5://192.168.1.3:1080

@ginuerzh 您好,换成这个配置以后,确实仍然可以进行代理,但是上述的两个问题依旧还是会出现。

ginuerzh commented 6 months ago

日志有什么错误信息吗?

chiyububaci commented 6 months ago

@ginuerzh gost本身只有level为info的日志,github的报错则仍为老样子:

image

值得一提的是,不管是之前的配置,还是现在的新配置,表现出来的情况都一样,即一开始访问GitHub正常,然后在GitHub站内多点几个链接后,就不正常了。