你的位置:首页 > 互联网IT

gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,选择器

系统:Windows/linux

软件:gost v3.0

功能:http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射

官网:https://gost.run/

项目地址: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,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,选择器 互联网IT

-----------------------------------------------------------


选择器¶


选择器负责在一个可选择的对象列表中使用选择策略选择出零个或一个对象,目前选择器所支持的对象有节点和转发链两种。 选择器可以应用于转发链组,转发链,转发链中的跳跃点,和转发器上。选择器在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







  • 发表评论
  • 查看评论
【暂无评论!】

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。