你的位置:首页 > 互联网IT
gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,概念1
系统:Windows/linux
软件:gost v3.0
功能:http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射
项目地址:https://github.com/go-gost/gost
gost-v3-beta.6(使用很久,稳定版本)
本地下载1-Windows-32位:gost-windows-386-3.0.0-beta.6.zip
本地下载2-Windows-64位:gost-windows-amd64-3.0.0-beta.6.zip
本地下载3-linux-32位:gost-linux-386-3.0.0-beta.6.gz
本地下载4-linux-64位:gost-linux-amd64-3.0.0-beta.6.gz
gost-v3.0.0-rc8
本地下载5-Windows-32位:gost_3.0.0-rc8_windows_386.zip
本地下载6-Windows-64位:gost_3.0.0-rc8_windows_amd64.zip
本地下载7-linux-32位:gost_3.0.0-rc8_linux_386.tar.gz
本地下载8-linux-64位:gost_3.0.0-rc8_linux_amd64.tar.gz
项目地址下载地址:https://github.com/go-gost/gost/releases
本文内容:概念,概述,代理转发和通道,服务,转发链,跳跃点
gost,gost3,gost-v3版本-配置文件文章
https://www.zhuguodong.com/?id=771
gost,gost3,gost-v3版本-命令文章
https://www.zhuguodong.com/?id=767
同类型gost-v2.0(gost2)版本
https://www.zhuguodong.com/?id=700
-----------------------------------------------------------
Windows隐藏运行软件,cmd隐藏运行,bat隐藏运行,命令窗口隐藏运行
https://www.zhuguodong.com/?id=520
linux隐藏运行软件
nohup /root/gost -L ss://aes-256-cfb:123456@:23333 >/dev/null 2>&1 &
nohup 《内容替换》 >/dev/null 2>&1 &
-----------------------------------------------------------
简单配置运行:
Windows:新建 gost.bat 文件
linux:命令窗口隐藏运行,gost要加入权限:chmod +x gost
启动参数:-c
Windows:start "" "gost.exe" -C gost.yaml
linux:gost -C gost.yaml
说明:.yaml配置文件不能有空行,或者不必要的空格,不然会运行不成功
启动参数:-c
Windows:start "" "gost.exe" -C gost.json
linux:gost -C gost.json
程序gost与文件同一目录下,说明:.json与.yaml配置文件格式(这个文件格式配置不能出现空格),教材就用.json格式演示
配置.json与.yaml格式可相互转换的
输出yaml格式配置
gost -L http://:8080 -O yaml
输出json格式配置
gost -L http://:8080 -O json
将json格式配置转成yaml格式
gost -C gost.json -O yaml
gost -C gost.yaml -O json
-----------------------------------------------------------
概述¶
GOST主要由四大模块:服务(Service),节点(Node),跳跃点(Hop),转发链(Chain),五个子模块:监听器(Listener),处理器(Handler),转发器(Forwarder),拨号器(Dialer)和连接器(Connector),外加若干辅助模块:节点选择器(Selector),准入控制器(Admission),分流器(Bypass),域名解析器(Resolver),主机映射器(Hosts),限速器(Limiter)等组成。
服务(Service)¶
服务是数据的出入口,客户端的数据由服务接收并进行处理,最后将处理完的数据再发送给客户端。
每个服务包含一个监听器(Listener)和一个处理器(Handler)。
节点(Node)¶
节点是客户端视角下转发链所使用的服务的总称,转发链中的节点可以看作是服务所对应的客户端。当前程序所运行的服务以外的服务均可看作是节点(甚至当前程序开启的服务也可以被视为节点),并且不局限于GOST程序提供的服务。
每个节点包含一个拨号器(Dialer)和一个连接器(Connector)。
跳跃点(Hop)¶
跳跃点是一组节点(Node)的集合。一个长度为3的转发链,对应有3个跳跃点,数据会依次经过每个跳跃点中的某个节点进行处理。
转发链(Chain)¶
转发链是由若干个跳跃点按照特定顺序构成的多级跳跃点组(Hop Group)。一个转发链可以由一个或多个跳跃点(Hop)组成,当进行数据转发时会根据转发策略(节点选择器,分流器)在每个跳跃点中选取一个节点,最终构成一条转发路径(Route),服务会使用这条路径来进行数据转发。
监听器(Listener)¶
监听器在本地打开指定的端口,负责数据的收发及数据通道的建立和初始化工作(例如加解密,会话和数据流通道初始化等),与客户端进行直接的数据交互。
处理器(Handler)¶
处理器是监听器上的一个逻辑抽象层,当监听器建立好数据通道之后,客户端的实际请求数据会交给处理器进行处理,其中包括路由判断,域名解析,权限控制等处理逻辑。
转发器(Forwarder)¶
转发器用于端口转发,被处理器使用。处理器根据转发器配置的节点组和节点选择器对每个请求数据进行转发处理。
拨号器(Dialer)¶
拨号器与服务的监听器相对应,负责与服务进行数据交互,数据通道建立和初始化工作。
连接器(Connector)¶
连接器是拨号器上的一个逻辑抽象层,与服务的处理器相对应,当拨号器与服务建立好数据通道后,再由连接器进行实际请求数据的处理工作。
-----------------------------------------------------------
代理转发和通道¶
在GOST中最常用到的两个功能是代理和转发,而这两个功能都需要一个载体,这个载体就是通道,或称为数据通道。这三个概念彼此之间有差异,又有类似的地方,甚至三者之间可以互相转换。
代理¶
通常意义上指的是代理协议,例如HTTP, SOCKS5等,是一种应用层数据交换协议,和一般的协议不同的是,服务端在这里充当中间人或代理者的角色,客户端的请求目标地址不是代理服务,而是通过代理协议协商的第三方服务。与第三方服务建立了连接后,代理服务在这里就只是一个数据转发的作用。
代理由于使用了特定协议,因此可以实现许多额外功能,例如身份认证,权限管理等。
转发¶
一般指的是端口转发或端口映射,在两个不同的端口之间建立一种联系,一般是单向映射,发送到其中一个端口的数据最终会原封不动的发到另一个端口,但反过来是不行的。转发可以不使用任何应用协议(纯TCP转发),也可以使用特定的转发协议(Relay)。转发也可以看作是一种定向透明代理,客户端无法指定目标地址,甚至不需要区分转发服务与实际的目标服务。
通道¶
通道或叫数据通道,是指一个可以双向传输的数据流,通道的两端都可以同时收发数据,以实现全双工通信。 任何可以实现此功能定义的通信协议都可以用来作为数据通道,例如TCP/UDP协议,Websocket,HTTP/2,QUIC等,甚至代理和转发采用一些手段也可以被用作通道。
逻辑分层¶
虽然三者紧密相关,但在GOST中还是做了稍微严格的划分,一个GOST服务或节点被分为两层,数据通道层和数据处理层。数据通道层对应的是拨号器和监听器,数据处理层对应的是连接器,处理器和转发器,这里又根据是否使用转发器来区分是代理还是转发。
这是一种逻辑上的划分,具体到协议是没有这些限制的。例如HTTP/2协议既可以作为数据通道也可以作为代理,Relay协议兼具代理和转发功能,甚至HTTP也被用来作为数据通道(pht)。
Relay转发模式
服务端
gost -L relay+wss://:8420/:18080
Relay代理模式
服务端
gost -L relay+wss://gost:gost@:8420
# 或者:gost -L relay+wss://gost:gost@192.168.1.1:8420
客户端
gost -L http://:8080 -F relay+wss://gost:gost@192.168.1.1:8420
客户端使用TCP数据通道通过HTTP代理协议接收请求,使用Websocket数据通道通过relay协议转发给服务端192.168.1.1处理,并开启认证。这里数据在两层代理(HTTP代理和Relay代理)之间进行传输。
协同效应¶
代理和转发都可以单独工作,但把三者组合使用会产生一些不同的效果。
使用代理进行端口转发¶
某些情况下,端口转发中的两个端口之间不能直接建立连接,这时可以通过转发链利用代理服务来进行中转。
gost -L tcp://:8080/192.168.1.1:80 -F http://192.168.1.2:8080
8080端口通过转发链中的192.168.1.2:8080代理节点间接映射到192.168.1.1:80。
添加数据通道¶
通过转发可以为已存在的服务动态增加数据通道。
HTTP-over-TLS¶
gost -L tls://:8443/:8080 -L http://:8080
通过使用TLS数据通道的端口转发,给8080端口的HTTP代理服务增加了TLS加密数据通道。
此时8443端口等同于:
gost -L https://:8443
Shadowsocks-over-KCP¶
gost -L kcp://:8338/:8388 -L ss://:8388
通过使用KCP数据通道的端口转发,给8388端口的shadowsocks代理服务增加了KCP数据通道。
此时8338端口等同于:
gost -L ss+kcp://:8338
去除数据通道¶
与上面的例子相反,也可以通过转发将现有服务的数据通道去除。
HTTPS to HTTP¶
将HTTPS代理服务转成HTTP代理服务
gost -L https://:8443
gost -L tcp://:8080 -F forward+tls://:8443
此时8080端口等同于:
gost -L http://:8080
Shadowsocks-over-KCP to Shadowsocks¶
gost -L ss+kcp://:8338
gost -L tcp://:8080 -F forward+kcp://:8338
此时8080端口等同于:
gost -L ss://:8080
-----------------------------------------------------------
服务¶
动态配置
服务支持通过Web API进行动态配置。
一切皆服务
在GOST中客户端和服务端是相对的,客户端本身也是一个服务,如果使用了转发链或转发器,则其中的节点就被当作服务端。
服务是GOST的基础模块,是GOST程序的入口,无论是服务端还是客户端都是以服务为基础构建。 一个服务包括一个监听器作为数据通道,一个处理器用于数据处理和一个可选的转发器用于端口转发。
命令行
gost -L http://:8080
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
listener:
type: tcp
流程¶
当一个服务运行后,监听器会根据服务的配置监听在指定的端口并使用指定的协议进行通讯。收到正确的数据后,监听器建立一个数据通道连接,将此连接交给处理器使用。处理器按照指定的协议进行数据通讯,收到客户端的请求后,获取到目标地址,如果使用了转发器,则使用转发器中指定的目标地址,再使用路由器将请求发送到此目标主机。
路由器
路由器是处理器内部的一个抽象模块,其内部包含了转发链,域名解析器,主机映射器等,用于服务和目标主机之间的请求路由。
忽略转发链¶
在命令行模式下,如果有转发链,则默认所有服务均会使用此转发链。通过ignoreChain选项可以让特定的服务不使用转发链。
gost -L http://:8080?ignoreChain=true -L socks://:1080 -F http://:8000
8080端口的HTTP服务不使用转发链,1080端口的SOCKS5服务使用转发链。
多进程¶
命令行模式下默认所有服务在同一个进程中运行,通过--分割符让服务在单独的进程中运行。
gost -L http://:8080 -- -L http://:8000 -- -L socks://:1080 -F http://:8000
以上命令会将启动三个进程分别对应三个服务,其中的转发链仅由1080端口的服务使用。
执行命令(Linux)¶
在Linux下,通过preUp,postUp,preDown,postDown选项可以在服务启动或停止前后执行额外的命令。
services:
- name: service-0
addr: :8080
metadata:
preUp:
- echo pre-up
postUp:
- echo post-up
preDown:
- echo pre-down
postDown:
- echo post-down
handler:
type: http
listener:
type: tcp
-----------------------------------------------------------
转发链¶
动态配置
转发链支持通过Web API进行动态配置。
转发链是由若干个节点按照特定的层级分组所形成的节点组列表,每一层级节点组构成一个跳跃点,数据依次经过每个跳跃点进行转发。转发链是GOST中一个重要模块,是服务与服务之间建立连接的纽带。
转发链中的节点彼此之间相互独立,每个节点可以单独使用不同的数据通道和数据处理协议。
命令行
gost -L http://:8080 -F https://192.168.1.1:8080 -F socks5+ws://192.168.1.2:1080
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.1.2:1080
connector:
type: socks5
dialer:
type: ws
在命令行中所有的-F参数构成一个转发链,所有的服务使用此转发链。 在配置文件中服务的监听器或处理器通过chain属性引用转发链的名称(name属性)使用指定的转发链。
节点组¶
每一层级可以添加多个节点组成节点组。
命令行
gost -L http://:8080 -F https://192.168.1.1:8080,192.168.1.1:8081,192.168.1.2:8082 -F socks5+ws://192.168.0.1:1080,192.168.0.1:1081,192.168.0.2:1082
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: node-1
addr: 192.168.1.1:8081
connector:
type: http
dialer:
type: tls
- name: node-2
addr: 192.168.1.2:8082
connector:
type: http
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.0.1:1080
connector:
type: socks5
dialer:
type: ws
- name: node-1
addr: 192.168.0.1:1081
connector:
type: socks5
dialer:
type: ws
- name: node-2
addr: 192.168.0.2:1082
connector:
type: socks5
dialer:
type: ws
第一个跳跃点(hop-0)节点组中有三个节点:192.168.1.1:8080(node-0),192.168.1.1:8081(node-1),192.168.1.2:8082(node-2),它们使用相同的节点配置。
第二个跳跃点(hop-1)节点组中有三个节点:192.168.0.1:1080(node-0),192.168.0.1:1081(node-1),192.168.0.2:1082(node-2),它们使用相同的节点配置。
如果需要自由配置每个节点可以使用配置文件。
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: node-1
addr: 192.168.1.1:8081
connector:
type: socks5
dialer:
type: ws
- name: node-2
addr: 192.168.1.2:8082
connector:
type: relay
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.0.1:1080
connector:
type: socks5
dialer:
type: ws
- name: node-1
addr: 192.168.0.1:1081
connector:
type: relay
dialer:
type: tls
- name: node-2
addr: 192.168.0.2:1082
connector:
type: http
dialer:
type: h2
多条转发链¶
在配置文件中可以设置多个转发链,不同的服务可以根据名称来使用不同的转发链。
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
- name: service-1
addr: ":1080"
handler:
type: socks5
chain: chain-1
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: chain-1
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.2:8082
connector:
type: relay
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.0.1:1080
connector:
type: socks5
dialer:
type: ws
- name: node-1
addr: 192.168.0.1:1081
connector:
type: relay
dialer:
type: tls
服务service-0使用转发链chain-0,服务service-1使用转发链chain-1。
转发链组¶
在服务的监听器或处理器上也可以通过chainGroup参数来指定转发链组来使用多条转发链,同时也可以设置一个选择器(selector)指定转发链使用方式,默认使用轮询策略。
services:
- name: service-0
addr: ":8080"
handler:
type: http
chainGroup:
chains:
- chain-0
- chain-1
selector:
strategy: round
maxFails: 1
failTimeout: 10s
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: :8081
connector:
type: http
dialer:
type: tcp
- name: chain-1
hops:
- name: hop-0
nodes:
- name: node-0
addr: :8082
connector:
type: http
dialer:
type: tcp
服务service-0采用轮询的方式使用两条转发链chain-0和chain-1。
虚拟节点¶
如果服务不需要使用上级代理,可以使用一种特殊的虚拟节点(connector.type和dialer.type均为virtual)来直接连接目标地址,虚拟节点不需要对应的服务端,因此节点的addr参数无效。
命令行
gost -L :8080 -F virtual://:0?interface=eth0
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: auto
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: :0
interface: eth0
connector:
type: virtual
dialer:
type: virtual
- name: node-1
addr: :0
interface: eth1
connector:
type: virtual
dialer:
type: virtual
这里node-0和node-1为直连节点,当主机具有多个网络出口时,可以通过interface参数为每个节点指定不同的网络出口,从而达到网络出口级别的负载均衡。
限制
如果节点的数据通道使用UDP协议,例如QUIC, KCP等,则此节点只能用于转发链第一层级。
-----------------------------------------------------------
跳跃点¶
动态配置
跳跃点在引用模式下支持通过Web API进行动态配置。
跳跃点是对转发链层级的抽象,是转发链的基本组成部分。一个跳跃点中包含一个或多个节点(Node),和一个节点选择器,在每次执行数据转发请求时,通过在转发链的每个跳跃点上使用选择器在节点组中选出一个节点,最终构成一条转发路径(Route)来处理请求。
跳跃点有两种使用方式:内联模式和引用模式。
内联模式¶
在转发链中可以直接定义跳跃点。
命令行
gost -L http://:8080 -F https://192.168.1.1:8080 -F socks5+ws://192.168.1.2:1080
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.1.2:1080
connector:
type: socks5
dialer:
type: ws
以上配置中有一条转发链(chain-0),其中有两个跳跃点(hop-0,hop-1),每个跳跃点中有一个节点。
引用模式¶
也可以单独定义跳跃点再通过引用跳跃点的名称来使用特定的跳跃点。
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
- name: hop-1
hops:
- name: hop-0
nodes:
- name: node-0
addr: 192.168.1.1:8080
connector:
type: http
dialer:
type: tls
- name: hop-1
nodes:
- name: node-0
addr: 192.168.1.2:1080
connector:
type: socks5
dialer:
type: ws
在chain中通过name来引用hops中定义的跳跃点。
转发器¶
转发器中同样也可以通过引用模式来使用跳跃点。
services:
- name: service-0
addr: ":8080"
handler:
type: tcp
listener:
type: tcp
forwarder:
name: hop-0
hops:
- name: hop-0
nodes:
- name: target-0
addr: 192.168.1.1:8080
- name: target-1
addr: 192.168.1.2:8080
模式切换
当使用内联模式时,如果跳跃点中未定义节点或未使用插件则会自动切换到引用模式。
数据源¶
跳跃点可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。
内联¶
内联数据源直接在配置文件中通过nodes参数指定节点列表。
hops:
- name: hop-0
nodes:
- name: node-0
addr: :8888
connector:
type: http
dialer:
type: tcp
- name: node-1
addr: :9999
connector:
type: socks5
dialer:
type: tcp
文件¶
指定外部文件作为数据源。通过file.path参数指定文件路径。
hops:
- name: hop-0
nodes: []
file:
path: /path/to/file
文件格式为JSON数组,数组每一项为节点配置信息。
[
{
"name": "http",
"addr": ":8888",
"connector": {
"type": "http",
"auth": {
"username": "user",
"password": "pass"
}
},
"dialer": {
"type": "tcp"
}
},
{
"name": "socks5",
"addr": ":9999",
"connector": {
"type": "socks5",
"auth": {
"username": "user",
"password": "pass"
}
},
"dialer": {
"type": "tcp"
}
}
]
Redis¶
指定redis服务作为数据源,redis数据类型必须为字符串(Strings)类型。
hops:
- name: hop-0
nodes: []
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:hops:hop-0:nodes
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
password (string)
密码
key (string, default=gost)
redis key
数据内容与文件数据源的格式相同:
> GET gost:hops:hop-0:nodes
"[{\"name\":\"http\",...},{\"name\":\"socks5\",...}]"
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
hops:
- name: hop-0
nodes: []
http:
url: http://127.0.0.1:8000
timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长
热加载¶
文件,redis,HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。
hops:
- name: hop-0
reload: 10s
file:
path: /path/to/file
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:hops:hop-0:nodes
http:
url: http://127.0.0.1:8000
timeout: 10s
nodes: []
插件¶
跳跃点可以配置为使用外部插件服务,跳跃点会将节点选择请求转发给插件服务处理。当使用插件时其他参数无效。
hops:
- name: hop-0
plugin:
addr: 127.0.0.1:8000
tls:
secure: false
serverName: example.com
addr (string, required)
插件服务地址
tls (duration, default=null)
设置后将使用TLS加密传输,默认不使用TLS加密。
HTTP插件¶
hops:
- name: hop-0
plugin:
type: http
addr: http://127.0.0.1:8000/hop
请求示例¶
curl -XPOST http://127.0.0.1:8000/hop -d '{"addr": "example.com:80", "client": "gost"}'
{
"name": "http",
"addr": ":8888",
"connector": {
"type": "http",
"auth": {
"username": "user",
"password": "pass"
}
},
"dialer": {
"type": "tcp"
}
}
client (string)
用户身份标识,此信息由认证器插件服务生成。
-----------------------------------------------------------
GO Simple Tunnel
GO语言实现的安全隧道
功能特性
多端口监听
多级转发链
多协议支持
TCP/UDP端口转发
TCP/UDP透明代理
DNS解析和代理
TUN/TAP设备
反向代理
负载均衡
路由控制
限速限流
准入控制
动态配置
插件系统
Prometheus监控指标
Web API
Web UI
Telegram讨论群:https://t.me/gogost
Google讨论组:https://groups.google.com/d/forum/go-gost
提交Issue:https://github.com/go-gost/gost/issues
旧版入口:v2.gost.run
下载安装
二进制文件
https://github.com/go-gost/gost/releases
源码编译
git clone https://github.com/go-gost/gost.git
cd gost/cmd/gost
go build
Docker
docker run --rm gogost/gost -V
Shadowsocks Android插件
xausky/ShadowsocksGostPlugin
https://github.com/xausky/ShadowsocksGostPlugin
发表评论: