你的位置:首页 > 互联网IT
gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,选择器
系统: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中可以用来实现负载均衡。
strategy (string, default=round)
指定选择策略。
round - 轮询
rand - 随机
fifo - 自上而下,主备模式
hash - 基于特定Hash值(客户端IP或目标地址)
maxFails (int, default=1)
指定最大失败次数,当失败次数超过此设定值时,此对象会被标记为失败(Fail)状态,失败状态的对象不会被选择使用。
failTimeout (duration, default=10s)
指定失败状态的超时时长,当一个对象被标记为失败后,在此设定的时间间隔内不会被选择使用,超过此设定时间间隔后,会再次参与选择。
转发链¶
转发链中的每一层级跳跃点上可以设置一个选择器,默认选择器使用轮询策略进行节点选择。
命令行
gost -L http://:8080 -F "socks5://192.168.1.1:1080,192.168.1.2:1080?strategy=rand&maxFails=1&failTimeout=10s"
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
selector:
strategy: rand
maxFails: 1
failTimeout: 10s
nodes:
- name: node-0
addr: 192.168.1.1:1080
connector:
type: socks5
dialer:
type: tcp
metadata:
maxFails: 2
failTimeout: 20s
- name: node-1
addr: 192.168.1.2:1080
connector:
type: socks5
dialer:
type: tcp
metadata:
maxFails: 3
failTimeout: 30s
转发器¶
转发器用于端口转发,其本身由一个节点组和一个节点选择器组成,当进行转发时,通过选择器在节点组中选择出零个或一个节点用于转发的目标地址。此时转发器类似于只有一个层级的转发链。
命令行
gost -L "tcp://:8080/:8081,:8082?strategy=round&maxFails=1&failTimeout=30s"
配置文件
services:
- name: service-0
addr: :8080
handler:
type: tcp
listener:
type: tcp
forwarder:
nodes:
- name: target-0
addr: :8081
- name: target-1
addr: :8082
selector:
strategy: round
maxFails: 1
failTimeout: 30s
转发链组¶
转发链组中的选择器类似于转发器中的选择器,用来选择一条转发链。
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
备用节点和备用链¶
通过将一个或多个节点或转发链标记为备用状态,当所有非备用节点或转发链均被标记为失败状态时才会参与选择。
备用节点¶
services:
- name: service-0
addr: :8080
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
selector:
strategy: round
maxFails: 1
failTimeout: 10s
nodes:
- name: node-0
addr: :8081
metadata:
maxFails: 3
failTimeout: 30s
connector:
type: http
dialer:
type: tcp
- name: node-1
addr: :8082
connector:
type: http
dialer:
type: tcp
- name: node-2
addr: :8083
metadata:
backup: true
connector:
type: http
dialer:
type: tcp
- name: node-3
addr: :8084
metadata:
backup: true
connector:
type: http
dialer:
type: tcp
通过metadata.backup选项将节点标记为备用状态。
正常情况下只有node-0和node-1两个非备用节点参与节点选择,当node-0和node-1均被标记为失败状态时,node-2和node-3才会参与节点选择。当node-0和node-1中任何一个节点恢复后,node-2和node-3退出节点选择。
节点级别失败状态控制
注意这里的node-0节点,通过metadata.maxFails和metadata.failTimeout选项可以对此节点进行单独的失败状态控制,默认使用选择器中的对应参数。
备用转发链¶
services:
- name: service-0
addr: :8080
handler:
type: http
chainGroup:
chains:
- chain-0
- chain-1
- chain-2
- chain-3
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
- name: chain-2
metadata:
backup: true
hops:
- name: hop-0
nodes:
- name: node-0
addr: :8083
connector:
type: http
dialer:
type: tcp
- name: chain-3
metadata:
backup: true
hops:
- name: hop-0
nodes:
- name: node-0
addr: :8084
connector:
type: http
dialer:
type: tcp
与备用节点类似,通过metadata.backup选项将转发链chain-2和chain-3标记为备用状态。
加权随机选择策略¶
选择器在随机选择策略基础上支持对节点和转发链设置权重,权重默认值为1。
services:
- name: service-0
addr: :8080
handler:
type: auto
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
selector:
strategy: rand
maxFails: 1
failTimeout: 10s
nodes:
- name: node-0
addr: :8081
metadata:
weight: 20
connector:
type: http
dialer:
type: tcp
- name: node-1
addr: :8082
metadata:
weight: 10
connector:
type: http
dialer:
type: tcp
通过metadata.weight选项对节点(转发链类似)设置权重。node-0与node-1权重比值为2:1,因此node-0被选中几率是node-1的两倍。
Hash策略¶
Hash策略是针对某一特定数据的Hash值来选择。目前的Hash类型支持客户端IP和请求目标主机地址,默认采用客户端IP。
gost -L http://:8080 -F "socks5://192.168.1.1:1080,192.168.1.2:1080?strategy=hash"
目标地址Hash¶
每个服务可以单独设置hash类型。
命令行
gost -L http://:8080?hash=host -F "socks5://192.168.1.1:1080,192.168.1.2:1080?strategy=hash&maxFails=1&failTimeout=10s"
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
metadata:
hash: host
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
selector:
strategy: hash
maxFails: 1
failTimeout: 10s
nodes:
- name: node-0
addr: 192.168.1.1:1080
connector:
type: socks5
dialer:
type: tcp
- name: node-1
addr: 192.168.1.2:1080
connector:
type: socks5
dialer:
type: tcp
通过hash选项指定hash类型为host。
-----------------------------------------------------------
认证¶
GOST中可以通过设置单认证信息或认证器进行简单的身份认证。
动态配置
认证器支持通过Web API进行动态配置。
单认证信息¶
如果不需要多用户认证,则可以通过直接设置单认证信息来进行单用户认证。
服务端¶
命令行
gost -L http://user:pass@:8080
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
auth:
username: user
password: pass
listener:
type: tcp
服务的处理器或监听器上通过auth属性设置单认证信息。
客户端¶
命令行
gost -L http://:8080 -F socks5://user:pass@: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: :1080
connector:
type: socks5
auth:
username: user
password: pass
dialer:
type: tcp
节点的连接器或拨号器上通过auth属性设置单认证信息。
认证器¶
认证器包含一组或多组认证信息。服务通过认证器可以实现多用户认证功能。
Note
认证器仅支持配置文件设置。
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
auther: auther-0
listener:
type: tcp
authers:
- name: auther-0
auths:
- username: user1
password: pass1
- username: user2
password: pass2
服务的处理器或监听器上通过auther属性引用认证器名称(name)来使用指定的认证器。
认证器组¶
通过使用authers属性来指定认证器列表来使用多个认证器,当任何一个认证器验证通过则代表认证通过。
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
authers:
- auther-0
- auther-1
listener:
type: tcp
authers:
- name: auther-0
auths:
- username: user1
password: pass1
- name: auther-1
auths:
- username: user2
password: pass2
优先级
如果使用了认证器,则单认证信息会被忽略。
如果设置了auth参数,则路径中直接设置的认证信息会被忽略。
Shadowsocks处理器
Shadowsocks处理器无法使用认证器,仅支持通过设置单认证信息作为加密参数。
数据源¶
认证器可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。
内联¶
内联数据源直接在配置文件中通过auths参数设置数据。
authers:
- name: auther-0
auths:
- username: user1
password: pass1
- username: user2
password: pass2
文件¶
指定外部文件作为数据源。通过file.path参数指定文件路径。
authers:
- name: auther-0
file:
path: /path/to/file
文件格式为按行分割的认证信息,每一行认证信息为用空格分割的user-pass对,以#开始的行为注释行。
# username password
admin #123456
test\user001 123456
test.user@002 12345678
Redis¶
指定redis服务作为数据源,redis数据类型必须为哈希(Hash)类型。
authers:
- name: auther-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:authers:auther-0
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
password (string)
密码
key (string, default=gost)
redis key
数据的每一项与文件数据源的格式类似:
> HGETALL gost:authers:auther-0
1) "admin"
2) "#123456"
3) "test\user001"
4) "123456"
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
authers:
- name: auther-0
http:
url: http://127.0.0.1:8000
timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长
优先级¶
当同时配置多个数据源时,优先级从高到低为: HTTP,redis,文件,内联。如果在不同数据源中存在相同的用户名,则优先级高的会覆盖优先级低的数据。
热加载¶
文件,redis和HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。
authers:
- name: auther-0
reload: 10s
file:
path: /path/to/file
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:authers:auther-0
http:
url: http://127.0.0.1:8000
timeout: 10s
注意
通过命令行设置的认证信息仅会应用到处理器或连接器上,对于ssh和sshd服务则会应用到监听器和拨号器上。
如果通过命令行自动生成配置文件,在metadata中不会出现此参数项。
插件¶
认证器可以配置为使用外部插件服务,认证器会将认证请求转发给插件服务处理。当使用插件时其他参数无效。
authers:
- name: auther-0
plugin:
addr: 127.0.0.1:8000
tls:
secure: false
serverName: example.com
addr (string, required)
插件服务地址
tls (duration, default=null)
设置后将使用TLS加密传输,默认不使用TLS加密。
HTTP插件¶
authers:
- name: auther-0
plugin:
type: http
addr: http://127.0.0.1:8000/auth
请求示例¶
curl -XPOST http://127.0.0.1:8000/auth -d '{"username":"gost", "password":"gost", "client":"127.0.0.1:12345"}'
{"ok": true, "id":"gost"}
client (string)
客户端地址
id (string)
插件服务可选择性返回的用户ID标识,此信息会传递给后续的其他插件服务(分流器,主机IP映射器,域名解析器)用于用户身份标识。
-----------------------------------------------------------
分流¶
动态配置
分流器支持通过Web API进行动态配置。
关于分流器的更详细说明和使用示例可以参考这篇博文。
分流器¶
在服务,跳跃点和转发链的节点上可以分别设置分流器,在数据转发过程中根据分流器中的规则对目标地址进行匹配测试来决定是否继续转发。
命令行
gost -L http://:8080?bypass=10.0.0.0/8 -F http://192.168.1.1:8080?bypass=172.10.0.0/16,127.0.0.1,localhost,*.example.com,.example.org
配置文件
services:
- name: service-0
addr: ":8080"
# service level bypass
bypass: bypass-0
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
# hop level bypass
bypass: bypass-1
nodes:
- name: node-0
addr: 192.168.1.1:8080
# node level
# bypass: bypass-0
connector:
type: http
dialer:
type: tcp
bypasses:
- name: bypass-0
matchers:
- 10.0.0.0/8
- name: bypass-1
matchers:
- 172.10.0.0/16
- 127.0.0.1
- localhost
- '*.example.com'
- .example.org
使用bypass参数通过引用分流器名称(bypasses.name)来使用指定的分流器。
Hop级别的分流器
命令行模式下的bypass参数配置会应用到hop级别。
黑名单与白名单¶
分流器默认为黑名单模式,如果目标地址匹配上黑名单则数据转发将终止。
也可以将分流器设置为白名单模式,与黑名单相反,只有目标地址与分流器中的规则相匹配才继续进行数据中转。
命令行
gost -L http://:8080 -F http://:8081?bypass=~172.10.0.0/16,127.0.0.1,localhost,*.example.com,.example.org
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
bypass: bypass-0
nodes:
- name: node-0
addr: :8081
# bypass: bypass-0
connector:
type: http
dialer:
type: tcp
bypasses:
- name: bypass-0
whitelist: true
matchers:
- 172.10.0.0/16
- 127.0.0.1
- localhost
- '*.example.com'
- .example.org
在bypasses中通过设置whitelist属性为true来开启白名单模式。
分流器组¶
通过使用bypasses参数来指定分流器列表来使用多个分流器,当任何一个分流器规则未匹配成功则代表未通过。
配置文件
services:
- name: service-0
addr: ":8080"
# bypasses:
# - bypass-0
# - bypass-1
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
bypasses:
- bypass-0
- bypass-1
nodes:
- name: node-0
addr: :8081
# bypasses:
# - bypass-0
# - bypass-1
connector:
type: http
dialer:
type: tcp
bypasses:
- name: bypass-0
whitelist: true
matchers:
- 172.10.0.0/16
- name: bypass-1
matchers:
- 127.0.0.1
- 172.10.0.1
- localhost
- '*.example.com'
- .example.org
分流器类型¶
服务上的分流器¶
当服务上设置了分流器,如果请求的目标地址未通过分流器规则测试(未匹配白名单规则或匹配黑名单规则),则此请求会被拒绝。
命令行
gost -L http://:8080?bypass=example.com
配置文件
services:
- name: service-0
addr: ":8080"
bypass: bypass-0
handler:
type: http
listener:
type: tcp
bypasses:
- name: bypass-0
matchers:
- example.com
8080端口的HTTP代理服务使用了黑名单分流,example.org的请求会正常处理,example.com的请求会被拒绝。
跳跃点上的分流器¶
当跳跃点(Hop)上设置了分流器,如果请求的目标地址未通过分流器规则测试(未匹配白名单规则或匹配黑名单规则),则转发链将终止于此跳跃点,且不包括此跳跃点。
命令行
gost -L http://:8080 -F http://:8081?bypass=~example.com,.example.org -F http://:8082?bypass=example.com
配置文件
services:
- name: service-0
addr: ":8080"
handler:
type: http
chain: chain-0
listener:
type: tcp
chains:
- name: chain-0
hops:
- name: hop-0
bypass: bypass-0
nodes:
- name: node-0
addr: :8081
connector:
type: http
dialer:
type: tcp
- name: hop-1
bypass: bypass-1
nodes:
- name: node-0
addr: :8082
connector:
type: http
dialer:
type: tcp
bypasses:
- name: bypass-0
whitelist: true
matchers:
- example.com
- .example.org
- name: bypass-1
matchers:
- example.com
当请求www.example.com时未通过第一个跳跃点(hop-0)的分流器(bypass-0),因此请求不会使用转发链。
当请求example.com时,通过第一个跳跃点(hop-0)的分流器(bypass-0),但未通过第二个跳跃点(hop-1)的分流器(bypass-1),因此请求将使用转发链第一层级的节点(:8081)进行数据转发。
当请求www.example.org时,通过两个跳跃点的分流器,因此请求将使用完整的转发链进行转发。
转发链节点上的分流器¶
当转发链使用多个节点时,可以通过在节点上设置分流器来对请求进行精准分流。
配置文件
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: :8081
bypass: bypass-0
connector:
type: http
dialer:
type: tcp
- name: node-1
addr: :8082
bypass: bypass-1
connector:
type: http
dialer:
type: tcp
bypasses:
- name: bypass-0
matchers:
- example.org
- name: bypass-1
matchers:
- example.com
当请求example.com时,通过了节点node-0上的分流器bypass-0,但未通过节点node-1上的分流器bypass-1,因此请求只会使用节点node-0进行转发。
当请求example.org时,未通过节点node-0上的分流器bypass-0,通过了节点node-1上的分流器,因此请求只会使用节点node-1进行转发。
转发器节点上的分流器¶
此类型分流器类似于转发链节点上的分流器,目前仅应用于DNS代理服务。
数据源¶
分流器可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。
内联¶
内联数据源直接在配置文件中通过matchers参数设置数据。
bypasses:
- name: bypass-0
matchers:
- 127.0.0.1
- 172.10.0.0/16
- localhost
- '*.example.com'
- .example.org
文件¶
指定外部文件作为数据源。通过file.path参数指定文件路径。
bypasses:
- name: bypass-0
file:
path: /path/to/file
文件格式为按行分割的地址列表,以#开始的部分为注释信息。
# ip, cidr, domain or wildcard
127.0.0.1
172.10.0.0/16
localhost
*.example.com
.example.org
Redis¶
指定redis服务作为数据源,redis数据类型必须为集合(Set)类型。
bypasses:
- name: bypass-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:bypasses:bypass-0
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
password (string)
密码
key (string, default=gost)
redis key
数据的每一项与文件数据源的格式类似:
> SMEMBERS gost:bypasses:bypass-0
1) "127.0.0.1"
2) "172.10.0.0/16"
3) "localhost"
4) "*.example.com"
5) ".example.org"
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
bypasses:
- name: bypass-0
http:
url: http://127.0.0.1:8000
timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长
热加载¶
文件,redis,HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。
bypasses:
- name: bypass-0
reload: 10s
file:
path: /path/to/file
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:bypasses:bypass-0
http:
url: http://127.0.0.1:8000
timeout: 10s
插件¶
分流器可以配置为使用外部插件服务,分流器会将请求转发给插件服务处理。当使用插件时其他参数无效。
bypasses:
- name: bypass-0
plugin:
addr: 127.0.0.1:8000
tls:
secure: false
serverName: example.com
addr (string, required)
插件服务地址
tls (duration, default=null)
设置后将使用TLS加密传输,默认不使用TLS加密。
HTTP插件¶
bypasses:
- name: bypass-0
plugin:
type: http
addr: http://127.0.0.1:8000/bypass
请求示例¶
curl -XPOST http://127.0.0.1:8000/bypass -d '{"addr": "example.com:80", "client": "gost"}'
{"ok": true}
client (string)
用户身份标识,此信息由认证器插件服务生成。
-----------------------------------------------------------
限速限流¶
动态配置
限速器支持通过Web API进行动态配置。
限制器¶
在每个服务上可以通过设置限制器来对请求进行限制,目前的限制器支持对上下行流量速率,请求速率和并发连接数的限制。
流量速率限制¶
流量速率限制包括服务,连接和IP三个级别的限速,三个级别可以组合使用。
命令行
gost -L ":8080?limiter.in=100MB&limiter.out=100MB&limiter.conn.in=10MB&limiter.conn.out=10MB"
配置文件
services:
- name: service-0
addr: ":8080"
limiter: limiter-0
handler:
type: auto
listener:
type: tcp
limiters:
- name: limiter-0
limits:
- '$ 100MB 100MB'
- '$$ 10MB'
- '192.168.1.1 512KB 1MB'
- '192.168.0.0/16 1MB 5MB'
命令行中通过limiter.in和limiter.out来设置服务级别的限速,通过limiter.conn.in和limiter.conn.out来设置连接级别的限速。
配置文件中使用limiter参数通过引用限速器名称(limiters.name)来使用指定的限速器。
通过limits选项指定配置列表,每一个配置项包含空格分割的三个部分:
作用域(Scope):限速作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值: $代表服务级别,$$代表连接级别。
入站速率(Input):服务接收数据的速率(每秒流量),支持的单位有: B,KB,MB,GB,TB,例如 128KB,1MB,10GB。
出站速率(Output):服务发送数据的速率(每秒流量),单位同入站速率。出站速率可选,不设置代表无限制。
请求速率限制¶
请求速率限制包括服务,IP两个级别的限速,两个级别可以组合使用。
命令行
gost -L ":8080?rlimiter=10"
配置文件
services:
- name: service-0
addr: ":8080"
rlimiter: rlimiter-0
handler:
type: auto
listener:
type: tcp
rlimiters:
- name: rlimiter-0
limits:
- '$ 100'
- '$$ 10'
- '192.168.1.1 50'
- '192.168.0.0/16 5'
命令行中通过rlimiter来设置服务级别的请求速率限制(每秒请求数)。
配置文件中使用rlimiter参数通过引用限制器名称(rlimiters.name)来使用指定的限制器。
通过limits选项指定配置列表,每一个配置项包含空格分割的两个部分:
作用域(Scope):作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值: $代表服务级别,$$代表IP级别默认限制,当给特定IP或CIDR设置了限制数,则$$会被忽略。
请求速率(Rate):请求速率值(每秒请求数)。
并发连接数限制¶
并发连接数限制包括服务,IP两个级别的限速,两个级别可以组合使用。
命令行
gost -L ":8080?climiter=1000"
配置文件
services:
- name: service-0
addr: ":8080"
climiter: climiter-0
handler:
type: auto
listener:
type: tcp
climiters:
- name: climiter-0
limits:
- '$ 1000'
- '$$ 100'
- '192.168.1.1 10'
命令行中通过climiter来设置服务级别的最大并发连接数。
配置文件中使用climiter参数通过引用限制器名称(climiters.name)来使用指定的限制器。
通过limits选项指定配置列表,每一个配置项包含空格分割的两个部分:
作用域(Scope):作用范围,IP地址或CIDR,例如192.168.1.1,192.168.0.0/16。其中两个特殊的值: $代表服务级别,$$代表IP级别默认限制,当给特定IP或CIDR设置了限制数,则$$会被忽略。
最大连接数(Limit):最大并发连接数值。
数据源¶
限制器可以配置多个数据源,目前支持的数据源有:内联,文件,redis。
内联¶
内联数据源是指直接在配置文件中通过limits参数设置数据。
流量速率
limiters:
- name: limiter-0
limits:
- $ 100MB 200MB
- $$ 10MB
- 192.168.1.1 1MB 10MB
- 192.168.0.0/16 512KB 1MB
请求速率
rlimiters:
- name: rlimiter-0
limits:
- $ 100
- $$ 10
- 192.168.1.1 50
- 192.168.0.0/16 5
并发连接
climiters:
- name: climiter-0
limits:
- $ 1000
- $$ 100
- 192.168.1.1 200
- 192.168.0.0/16 50
文件¶
指定外部文件作为数据源。通过file.path参数指定文件路径。
流量速率
limiters:
- name: limiter-0
file:
path: /path/to/file
请求速率
rlimiters:
- name: rlimiter-0
file:
path: /path/to/file
并发连接
climiters:
- name: climiter-0
file:
path: /path/to/file
文件格式为按行分割的限速配置列表,以#开始的部分为注释信息,每项配置格式同内联配置。
流量速率
# ip/cidr input output(optional)
$ 100MB 200MB
$$ 10MB
192.168.1.1 1MB 10MB
192.168.0.0/16 512KB 1MB
请求速率
# ip/cidr rate(r/s)
$ 100
$$ 10
192.168.1.1 20
192.168.0.0/16 50
并发连接
# ip/cidr limit
$ 1000
$$ 100
192.168.1.1 200
192.168.0.0/16 50
Redis¶
指定redis服务作为数据源,redis数据类型必须为集合(Set)或列表(List)类型,每项配置格式同内联配置。
流量速率
limiters:
- name: limiter-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:limiters:limiter-0
type: set
请求速率
rlimiters:
- name: rlimiter-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:rlimiters:rlimiter-0
type: set
并发连接
climiters:
- name: climiter-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:climiters:climiter-0
type: set
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
password (string)
密码
key (string, default=gost)
redis key
type (string, default=set)
数据类型,支持的类型有:集合(set),列表(list)。
数据的每一项与文件数据源的格式类似:
流量速率
> SMEMBERS gost:limiters:limiter-0
1) "$ 100MB 200MB"
2) "$$ 10MB"
3) "192.168.1.1 1MB 10MB"
4) "192.168.0.0/16 512KB 1MB"
请求速率
> SMEMBERS gost:rlimiters:rlimiter-0
1) "$ 100"
2) "$$ 10"
3) "192.168.1.1 20"
4) "192.168.0.0/16 50"
并发连接
> SMEMBERS gost:climiters:climiter-0
1) "$ 1000"
2) "$$ 100"
3) "192.168.1.1 200"
4) "192.168.0.0/16 50"
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
流量速率
limiters:
- name: limiter-0
http:
url: http://127.0.0.1:8000
timeout: 10s
请求速率
rlimiters:
- name: rlimiter-0
http:
url: http://127.0.0.1:8000
timeout: 10s
并发连接
climiters:
- name: climiter-0
http:
url: http://127.0.0.1:8000
timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长
优先级¶
当同时配置多个数据源时,优先级从高到低为: HTTP,redis,文件,内联。如果在不同数据源中存在相同的作用域,则优先级高的会覆盖优先级低的配置。
热加载¶
文件,redis,HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。
limiters:
- name: limiter-0
reload: 60s
file:
path: /path/to/file
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:limiters:limiter-0
http:
url: http://127.0.0.1:8000
timeout: 10s
-----------------------------------------------------------
准入控制¶
动态配置
准入控制器支持通过Web API进行动态配置。
准入控制器¶
在每个服务上可以分别设置准入控制器来控制客户端接入。
命令行
gost -L http://:8080?admission=127.0.0.1,192.168.0.0/16
配置文件
services:
- name: service-0
addr: ":8080"
admission: admission-0
handler:
type: http
listener:
type: tcp
admissions:
- name: admission-0
matchers:
- 127.0.0.1
- 192.168.0.0/16
服务中使用admission属性通过引用准入控制器名称(name)来使用指定的准入控制器。
黑名单与白名单¶
与分流器类似,准入控制器也可以设置黑名单或白名单模式,默认为黑名单模式。
命令行
gost -L http://:8080?admission=~127.0.0.1,192.168.0.0/16
配置文件
services:
- name: service-0
addr: ":8080"
admission: admission-0
handler:
type: http
listener:
type: tcp
admissions:
- name: admission-0
whitelist: true
matchers:
- 127.0.0.1
- 192.168.0.0/16
在admissions中通过设置whitelist属性为true来开启白名单模式。
控制器组¶
通过使用admissions属性来指定准入控制器列表来使用多个控制器,当任何一个控制器拒绝则代表请求拒绝。
配置文件
services:
- name: service-0
addr: ":8080"
admissions:
- admission-0
- admission-1
handler:
type: http
listener:
type: tcp
admissions:
- name: admission-0
whitelist: true
matchers:
- 192.168.0.0/16
- 127.0.0.1
- name: admission-1
matchers:
- 192.168.0.1
数据源¶
准入控制器可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。
内联¶
内联数据源直接在配置文件中通过matchers参数设置数据。
admissions:
- name: admission-0
matchers:
- 127.0.0.1
- 192.168.0.0/16
文件¶
指定外部文件作为数据源。通过file.path参数指定文件路径。
admissions:
- name: admission-0
file:
path: /path/to/file
文件格式为按行分割的地址列表,以#开始的部分为注释信息。
# ip or cidr
127.0.0.1
192.168.0.0/16
Redis¶
指定redis服务作为数据源,redis数据类型必须为集合(Set)类型。
admissions:
- name: admission-0
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:admissions:admission-0
addr (string, required)
redis服务地址
db (int, default=0)
数据库名
password (string)
密码
key (string, default=gost)
redis key
数据的每一项与文件数据源的格式类似:
> SMEMBERS gost:admissions:admission-0
1) "127.0.0.1"
2) "192.168.0.0/16"
HTTP¶
指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。
admissions:
- name: admission-0
http:
url: http://127.0.0.1:8000
timeout: 10s
url (string, required)
请求的URL
timeout (duration, default=0)
请求超时时长
热加载¶
文件,redis,HTTP数据源支持热加载。通过设置reload参数开启热加载,reload参数指定同步数据源数据的周期。
admissions:
- name: admission-0
reload: 10s
file:
path: /path/to/file
redis:
addr: 127.0.0.1:6379
db: 1
password: 123456
key: gost:admissions:admission-0
http:
url: http://127.0.0.1:8000
timeout: 10s
插件¶
准入控制器可以配置为使用外部插件服务,控制器会将请求转发给插件服务处理。当使用插件时其他参数无效。
admissions:
- name: admission-0
plugin:
addr: 127.0.0.1:8000
tls:
secure: false
serverName: example.com
addr (string, required)
插件服务地址
tls (duration, default=null)
设置后将使用TLS加密传输,默认不使用TLS加密。
HTTP插件¶
admissions:
- name: admission-0
plugin:
type: http
addr: http://127.0.0.1:8000/admission
请求示例¶
curl -XPOST http://127.0.0.1:8000/admission -d '{"addr": "example.com"}'
{"ok": true}
-----------------------------------------------------------
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
发表评论: