■ ■ ■ ■ ■ ■
docs/guide/03.客户端部署/03.gost.md
| 1 | + | --- |
| 2 | + | title: gost |
| 3 | + | date: 2023-01-26 13:58:21 |
| 4 | + | permalink: /guide/client/gost |
| 5 | + | article: false |
| 6 | + | --- |
| 7 | + | |
| 8 | + | ## GOST - 优雅的 golang 代理 |
| 9 | + | |
| 10 | + | Seamoon 对接 [Gost](https://github.com/go-gost/gost) 十分简单。原因也很简单,2.0 迭代的代码改造中"借鉴"(copy)了很多 gost 的设计和原封不动的代码结构。对协议的理解和代码设计上参考了很多师傅的模式。在此表示感谢无私的开源和分享。 |
| 11 | + | |
| 12 | + | GOST 是一款基于 golang 的简单隧道,具体的介绍可以访问其[官网](https://gost.run) |
| 13 | + | |
| 14 | + | 在技术博客里,我们也分享了 GOST 的一些设计架构代码,我们可以这样理解: Seamoon 服务端就是一个 websocket / grpc 的 gost 转发节点,但是只实现了 http / socks5 的处理模块,由此目前还支持值了这两种协议的转发。 |
| 15 | + | |
| 16 | + | gost 的客户端更强大,因为模块拆分的很细致,所以能实现很多好玩的玩法各种组合, 理论来讲, gost 支持的 listen 都可以通过 seamoon 的隧道转发过来。 |
| 17 | + | |
| 18 | + | gost 还支持了 metrics 等数据统计、代理认证、限速等等客户端实现的功能,适合长期挂在本地作为一个持久化的服务使用。 |
| 19 | + | |
| 20 | + | 我们给出一些demo示例,来看一下 seamoon 如何对接 gost。这里免去了 gost 安装相关教程,默认用户已安装了 gost,提供的是具体的启动脚本配置。 |
| 21 | + | |
| 22 | + | ### websocket 隧道 |
| 23 | + | |
| 24 | + | <code-group> |
| 25 | + | <code-block title="gost-http + seamoon-websocket(http)" active> |
| 26 | + | |
| 27 | + | ```shell |
| 28 | + | # 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。 |
| 29 | + | gost -L http://:1080 -F wss://<seamoon-server>:<seamoon-port>?path=/http |
| 30 | + | ``` |
| 31 | + | |
| 32 | + | </code-block> |
| 33 | + | |
| 34 | + | <code-block title="gost-http + seamoon-websocket(socks5)"> |
| 35 | + | |
| 36 | + | ```shell |
| 37 | + | # 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式 |
| 38 | + | gost -L http://:1080 -F socks5+wss://<seamoon-server>:<seamoon-port>?path=/socks5 |
| 39 | + | ``` |
| 40 | + | |
| 41 | + | </code-block> |
| 42 | + | |
| 43 | + | <code-block title="gost-socks5 + seamoon-websocket(http)"> |
| 44 | + | |
| 45 | + | ```shell |
| 46 | + | # 通过 gost 启动一个 http 代理,利用 websocket 转发,转发的流量 以 http 形式(默认不指定的话,流量都将以 http 形式进行传递)。 |
| 47 | + | gost -L socks5://:1080 -F wss://<seamoon-server>:<seamoon-port>?path=/http |
| 48 | + | ``` |
| 49 | + | |
| 50 | + | </code-block> |
| 51 | + | |
| 52 | + | <code-block title="gost-socks5 + seamoon-websocket(socks5)"> |
| 53 | + | |
| 54 | + | ```shell |
| 55 | + | # 通过 gost 启动一个 http 代理,利用 websocket 转发,并指定转发的流量 以 socks5 形式。 |
| 56 | + | gost -L socks5://:1080 -F socks5+wss://<seamoon-server>:<seamoon-port>?path=/socks5 |
| 57 | + | ``` |
| 58 | + | |
| 59 | + | </code-block> |
| 60 | + | |
| 61 | + | <code-block title="gost-socks4 + seamoon-websocket(socks5)"> |
| 62 | + | |
| 63 | + | ```shell |
| 64 | + | # 通过 gost 启动一个其他协议代理,这里以 socks4 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。 |
| 65 | + | gost -L socks4://:1080 -F socks5+wss://<seamoon-server>:<seamoon-port>?path=/socks5 |
| 66 | + | ``` |
| 67 | + | |
| 68 | + | </code-block> |
| 69 | + | |
| 70 | + | <code-block title="gost-shadowsocks + seamoon-websocket(socks5)"> |
| 71 | + | |
| 72 | + | ```shell |
| 73 | + | # 通过 gost 启动一个其他协议代理,这里以 shadowsocks 代理为例,利用 websocket 转发,并指定转发的流量 以 socks5 形式。 |
| 74 | + | gost -L ss://:1080 -F socks5+wss://<seamoon-server>:<seamoon-port>?path=/socks5 |
| 75 | + | ``` |
| 76 | + | |
| 77 | + | </code-block> |
| 78 | + | |
| 79 | + | </code-group> |
| 80 | + | |
| 81 | + | ### grpc 隧道 |
| 82 | + | |
| 83 | + | grpc 隧道由于 gost 的 proto 略有冲突,因此需要单独适配实现一个 server。计划 2.0 版本彻底完成适配。 |
| 84 | + | |
| 85 | + | |