GOSTv3 扩展开发 —— SM4 加密隧道
Gost 是什么 Gost 是 Golang 语言编写的网络隧道工具。得益于纯 Go 开发以及 Go 在网络开发以及交叉编译方面的强势,Gost 能够在几乎任何地方近乎零依赖地运行,因此 Gost 最早作为一个方便好用的 socks5 server 启动器在内网渗透等领域开始出名。 Gost 即将正式推出他的 v3 版本,这个版本改变之大,几乎相当于是一个独立的应用。不得不承认,Gost 的作者对于网络和隧道是有一些他的想法的。给大家解读一下在我看来的 Gostv3 设计的核心思想。 Gostv3 核心思想 在介绍 Gost 的配置之前,我们需要先理解一个概念 “传输层与应用层分离” 假设一个socks5隧道,如果我们暂时只考虑tcp代理的情况,那么这个事情其实很简单。先在客户端和服务器之间建立一个tcp连接,随后就按照socks5协议所描述的,协商版本号和认证方式,进行认证,发送代理地址,相应结果,建立隧道,这事情就好了。 隧道应用只是一个应用层的例子,我们可以把上述所做的所有事情分成两部分 建立可靠连接 (传输层) 处理应用层消息 (应用层) 对于大多数基于应用层网络协议,我们可以把他们所做的都抽象为这两件事情。 在常见的网络协议里,传输层与应用层往往是绑定的,但这是没有必要的,我们完全可以为一个应用层协议配置另一个传输层协议,唯一的要求(如果原来是tcp)就是建立可靠流式传输。 这种做法并非是没有先例的,互联网的发展过程中 web 服务逐渐使用 https 替代 http,这就是将 http 协议的应用层部分抽象出来并将其传输层协议替换为 tls 带来的一个结果。 大可放开想象,除了替换成 tls,为什么不能替换成更多的能够实现可靠传输的传输层协议呢?比如说 kcp websocket ssh quic 这些协议可能乍一看怎么可能是一个传输层协议,但是他们确实能够提供可靠传输,相对于我们的应用层而言,他就是传输层。 一个网络协议,他并非属于一个固定的层,这其实也是学术界和工业界的区别,学术界可以理想地对网络协议进行划层,但是工业界只在乎能不能用好不好用。就像很多路由协议,你可能很难给他没有争议地划分到一个层去。 这就是我认为的 Gostv3 最核心的设计,他拆分了隧道协议的网络层和应用层,使他们能够自由组合 Gostv3有四种最基本的概念(listener,handler,dialer,connector) block-beta columns 5 arr1<[" "]>(right) listener1["listener"] space connector2["connector"] arr2<[" "]>(right) space arr3<["...