你的位置:首页 > 互联网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


本文内容:域名解析,主机IP映射,Ingress,数据记录,插件系统


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

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


域名解析¶


通过在服务或转发链中设置域名解析器,可以更改域名解析行为。


动态配置

解析器支持通过Web API进行动态配置。


域名解析器¶


域名解析器通过设置上级域名服务列表对指定的域名进行解析,域名解析器可以应用于服务或转发链中。服务中的域名解析器对请求的目标地址进行解析,转发链中的域名解析器对转发链中的节点地址进行解析。


服务上的解析器¶


当服务中的处理器在与目标主机建立连接之前,会使用域名解析器对请求目标地址进行解析。



命令行

gost -L http://:8080?resolver=1.1.1.1,tcp://8.8.8.8,tls://8.8.8.8:853,https://1.0.0.1/dns-query

配置文件

services:

- name: service-0

  addr: ":8080"

  resolver: resolver-0

  handler:

    type: http

  listener:

    type: tcp

resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

  - addr: tcp://8.8.8.8

  - addr: tls://8.8.8.8:853

  - addr: https://1.0.0.1/dns-query

通过resolver参数来指定上级域名解析服务列表。


每个DNS服务的格式为:


[protocol://]ip[:port]


protocol支持的类型有udp,tcp,tls,https,默认值为udp。


port默认值为53。


Example

udp://1.1.1.1:53,或udp://1.1.1.1

tcp://1.1.1.1:53

tls://1.1.1.1:853

https://1.0.0.1/dns-query

转发链上的解析器¶


转发链中可以在跳跃点上或节点上设置解析器,当节点上未设置解析器,则使用跳跃点上的解析器。



命令行

gost -L http://:8000 -F http://example.com:8080?resolver=1.1.1.1,tcp://8.8.8.8,tls://8.8.8.8:853,https://1.0.0.1/dns-query


配置文件

services:

- name: service-0

  addr: ":8000"

  handler:

    type: http

    chain: chain-0

  listener:

    type: tcp

chains:

- name: chain-0

  hops:

  - name: hop-0

    # hop level resolver

    resolver: resolver-0

    nodes:

    - name: node-0

      addr: example.com:8080

      # node level resolver

      # resolver: resolver-0

      connector:

        type: http

      dialer:

        type: tcp

resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

  - addr: tcp://8.8.8.8

  - addr: tls://8.8.8.8:853

  - addr: https://1.0.0.1/dns-query

转发链的hop或node中使用resolver属性通过引用解析器名称(name)来使用指定的解析器。


使用转发链¶


域名解析器中的每个上级域名服务可以分别设置转发链。


services:

- name: service-0

  addr: ":8080"

  resolver: resolver-0

  handler:

    type: http

  listener:

    type: tcp

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.1:8081

      connector:

        type: http

      dialer:

        type: tcp

- name: chain-1

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.2:8082

      connector:

        type: socks5

      dialer:

        type: tcp

- name: chain-2

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.3:8083

      connector:

        type: relay

      dialer:

        type: tls

resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

  - addr: tcp://8.8.8.8:53

    chain: chain-0

  - addr: tls://8.8.8.8:853

    chain: chain-1

  - addr: https://1.0.0.1/dns-query

    chain: chain-2

缓存¶


每个解析器内部有一个缓存,通过ttl参数可以设置缓存时长,默认使用DNS查询返回结果中的TTL,当设置为负值,则不使用缓存。


resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

    ttl: 30s

IPv6¶


解析器默认返回IPv4地址,可以通过prefer参数设置切换到IPv6地址。


resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

    prefer: ipv6 # default is ipv4

ECS¶


通过clientIP参数设置客户端IP,开启ECS(EDNS Client Subnet)扩展功能。


resolvers:

- name: resolver-0

  nameservers:

  - addr: 1.1.1.1

    clientIP: 1.2.3.4

插件¶


域名解析器可以配置为使用外部插件服务,解析器会将解析请求转发给插件服务处理。当使用插件时其他参数无效。


resolvers:

- name: resolver-0

  plugin:

    addr: 127.0.0.1:8000

    tls: 

      secure: false

      serverName: example.com

addr (string, required)

插件服务地址

tls (duration, default=null)

设置后将使用TLS加密传输,默认不使用TLS加密。

HTTP插件¶


resolvers:

- name: resolver-0

  plugin:

    type: http

    addr: http://127.0.0.1:8000/resolver

请求示例¶


curl -XPOST http://127.0.0.1:8000/resolver -d '{"network": "ip4", "host":"example.com", "client": "gost"}'

{"ips": ["1.2.3.4","2.3.4.5"], "ok": true}

network (string, default=ip4)

网络地址类型:ip4 - 解析为IPv4地址。ip6 - 解析为IPv6地址。

host (string)

主机名。

client (string)

用户身份标识,此信息由认证器插件服务生成。

ips ([]string)

IP地址列表


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


主机IP映射¶


通过在服务或转发链中设置映射器,可以自定义域名解析。


动态配置

映射器支持通过Web API进行动态配置。


映射器¶


映射器是一个主机名到IP地址的映射表,通过映射器可在DNS请求之前对域名解析进行人为干预。当需要进行域名解析时,先通过映射器查找是否有对应的IP定义,如果有则直接使用此IP地址。如果映射器中没有定义,再使用DNS服务查询。


服务上的映射器¶


当服务中的处理器在与目标主机建立连接之前,会使用映射器对请求目标地址进行解析。



命令行

gost -L http://:8080?hosts=example.org:127.0.0.1,example.org:::1,example.com:2001:db8::1


配置文件

services:

- name: service-0

  addr: ":8080"

  hosts: hosts-0

  handler:

    type: http

  listener:

    type: tcp

hosts:

- name: hosts-0

  mappings:

  - ip: 127.0.0.1

    hostname: example.org

  - ip: ::1

    hostname: example.org

  - ip: 2001:db8::1

    hostname: example.com

服务使用hosts属性通过引用映射器名称(name)来使用指定的映射器。


转发链上的映射器¶


转发链中可以在跳跃点上或节点上设置映射器,当节点上未设置映射器,则使用跳跃点上的映射器。



命令行

gost -L http://:8000 -F http://example.com:8080?hosts=example.com:127.0.0.1,example.com:2001:db8::1


配置文件

services:

- name: service-0

  addr: ":8000"

  handler:

    type: http

    chain: chain-0

  listener:

    type: tcp

chains:

- name: chain-0

  hops:

  - name: hop-0

    # hop level hosts

    hosts: hosts-0

    nodes:

    - name: node-0

      addr: example.com:8080

      # node level hosts

      # hosts: hosts-0

      connector:

        type: http

      dialer:

        type: tcp

hosts:

- name: hosts-0

  mappings:

  - ip: 127.0.0.1

    hostname: example.com

  - ip: 2001:db8::1

    hostname: example.com

转发链的hop或node中使用hosts属性通过引用映射器名称(name)来使用指定的映射器。


DNS代理服务¶


映射器在DNS代理服务中会直接应用到DNS查询请求,用来实现自定义域名解析。


gost -L dns://:10053?dns=1.1.1.1&hosts=example.org:127.0.0.1,example.org:::1

此时通过此DNS代理服务查询example.org会匹配到映射器中的定义而不会使用1.1.1.1查询。详细信息请参考DNS代理。


域名通配符¶


映射器中的域名也支持以.开头的特殊通配符格式。


例如:.example.org匹配example.org,abc.example.org,def.abc.example.org等子域名。


在查询一个域名映射时,会先查找完全匹配项,如果没有找到再查找通配符项,如果没有找到再依次查找上级域名通配符。


例如:abc.example.org,会先查找abc.example.org映射值,如果没有则查找.abc.example.org通配符项,如果没有则继续依次查找.example.org和.org通配符项。


数据源¶


映射器可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。


内联¶


内联数据源直接在配置文件中通过mappings参数设置数据。


hosts:

- name: hosts-0

  mappings:

  - ip: 127.0.0.1

    hostname: example.com

  - ip: 2001:db8::1

    hostname: example.com

文件¶


指定外部文件作为数据源。通过file.path参数指定文件路径。


hosts:

- name: hosts-0

  file:

    path: /path/to/file

文件格式为按行分割的映射项,每一行为用空格分割的IP-host对,以#开始的部分为注释信息。


# ip host


127.0.0.1    example.com

2001:db8::1  example.com

系统hosts文件

文件数据源兼容系统本身的hosts文件格式,可以直接使用系统的hosts文件。


hosts:

- name: hosts-0

file:

  path: /etc/hosts

Redis¶


指定redis服务作为数据源,redis数据类型为集合(Set)或列表(List)类型。


hosts:

- name: hosts-0

  redis:

    addr: 127.0.0.1:6379

    db: 1

    password: 123456

    key: gost:hosts:hosts-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:hosts

1) "127.0.0.1 example.com"

2) "2001:db8::1 example.com"

HTTP¶


指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。


hosts:

- name: hosts-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参数指定同步数据源数据的周期。


hosts:

- name: hosts-0

  reload: 10s

  file:

    path: /path/to/file

  redis:

    addr: 127.0.0.1:6379

    db: 1

    password: 123456

    key: gost:hosts:hosts-0

  http:

    url: http://127.0.0.1:8000

    timeout: 10s

插件¶


映射器可以配置为使用外部插件服务,映射器会将查询请求转发给插件服务处理。当使用插件时其他参数无效。


hosts:

- name: hosts-0

  plugin:

    addr: 127.0.0.1:8000

    tls: 

      secure: false

      serverName: example.com

addr (string, required)

插件服务地址

tls (duration, default=null)

设置后将使用TLS加密传输,默认不使用TLS加密。

HTTP插件¶


hosts:

- name: hosts-0

  plugin:

    type: http

    addr: http://127.0.0.1:8000/hosts

请求示例¶


curl -XPOST http://127.0.0.1:8000/hosts -d '{"network": "ip4", "host":"example.com", "client": "gost"}'

{"ips": ["1.2.3.4","2.3.4.5"], "ok": true}

network (string, default=ip4)

网络地址类型:ip4 - 解析为IPv4地址。ip6 - 解析为IPv6地址。

host (string)

主机名。

client (string)

用户身份标识,此信息由认证器插件服务生成。

ips ([]string)

IP地址列表


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


Ingress¶


动态配置

Ingress支持通过Web API进行动态配置。


使用限制

Ingress目前仅在反向代理中使用。


Ingress由一组规则组成,每个规则为主机名(Hostname)到服务端点(Endpoint)的映射,在反向代理中通过Ingress对入口点(EntryPoint)流量进行路由和负载均衡。


规则中的主机名也支持域名通配符,服务端点必须是一个合法的UUID。


域名通配符¶


Ingress规则中的主机名(hostname)支持以.或*开头的通配符格式。


例如:.example.org或*.example.org匹配example.org,abc.example.org,def.abc.example.org等子域名。


在查询一个规则时,会先查找完全匹配项,如果没有找到再查找通配符项,如果没有找到再依次查找上级域名通配符。


例如:abc.example.org,会先查找abc.example.org映射值,如果没有则查找.abc.example.org通配符项,如果没有则继续依次查找.example.org和.org通配符项。


数据源¶


Ingress可以配置多个数据源,目前支持的数据源有:内联,文件,redis,HTTP。


内联¶


内联数据源直接在配置文件中通过rules参数设置数据。


ingresses:

- name: ingress-0

  rules:

  - hostname: example.com

    endpoint: 4d21094e-b74c-4916-86c1-d9fa36ea677b

  - hostname: example.org

    endpoint: ac74d9dd-3125-442a-a7c1-f9e49e05faca

文件¶


指定外部文件作为数据源。通过file.path参数指定文件路径。


ingresses:

- name: ingress-0

  file:

    path: /path/to/file

文件格式为按行分割的映射项,每一行为用空格分割的hostname-endpoint对,以#开始的部分为注释信息。


# hostname endpoint


example.com  4d21094e-b74c-4916-86c1-d9fa36ea677b

example.org  ac74d9dd-3125-442a-a7c1-f9e49e05faca

Redis¶


指定redis服务作为数据源,redis数据类型为哈希(Hash)或集合(Set)类型。


ingresses:

- name: ingress-0

  redis:

    addr: 127.0.0.1:6379

    db: 1

    password: 123456

    key: gost:ingresses:ingress-0

    type: hash

addr (string, required)

redis服务地址

db (int, default=0)

数据库名

password (string)

密码

key (string, default=gost)

redis key

type (string, default=hash)

数据类型,支持的类型有:哈希(hash),集合(set)。

数据的每一项为:


> HGETALL gost:ingresses:ingress-0

1) "example.com"

2) "4d21094e-b74c-4916-86c1-d9fa36ea677b"

3) "example.org"

4) "ac74d9dd-3125-442a-a7c1-f9e49e05faca"

HTTP¶


指定HTTP服务作为数据源。对于所请求的URL,HTTP返回200状态码则认为有效,返回的数据格式与文件数据源相同。


ingresses:

- name: ingress-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参数指定同步数据源数据的周期。


ingresses:

- name: ingress-0

  reload: 10s

  file:

    path: /path/to/file

  redis:

    addr: 127.0.0.1:6379

    db: 1

    password: 123456

    key: gost:ingresses:ingress-0

  http:

    url: http://127.0.0.1:8000

    timeout: 10s

插件¶


Ingress可以配置为使用外部插件服务,Ingress会将查询请求转发给插件服务处理。当使用插件时其他参数无效。


ingresses:

- name: ingress-0

  plugin:

    addr: 127.0.0.1:8000

    tls: 

      secure: false

      serverName: example.com

addr (string, required)

插件服务地址

tls (duration, default=null)

设置后将使用TLS加密传输,默认不使用TLS加密。

HTTP插件¶


ingresses:

- name: ingress-0

  plugin:

    type: http

    addr: http://127.0.0.1:8000/ingress

请求示例¶


curl -XPOST http://127.0.0.1:8000/ingress -d '{"host":"example.com"}'

{"endpoint":"4d21094e-b74c-4916-86c1-d9fa36ea677b"}


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


数据记录¶


记录器¶


记录器可以用来记录特定数据,通过配置和引用不同的记录器类型将数据记录到不同的目标中。


services:

- name: service-0

  addr: :8080

  recorders:

  - name: recorder-0

    record: recorder.service.router.dial.address

  handler:

    type: auto

  listener:

    type: tcp

recorders:

- name: recorder-0

  file:

    path: /path/to/recorder/file

    sep: "\n"

记录器类型¶


目前支持的记录器类型有:文件,TCP服务,HTTP服务,redis。


文件¶


文件记录器将数据记录到指定文件。


recorders:

- name: recorder-0

  file:

    path: /path/to/recorder/file

    sep: "\n"

file.path (string)

文件路径

sep (string)

记录分割符,如果设置则会在两条记录中间插入此分割符

TCP服务¶


TCP服务记录器将数据发送到指定的TCP服务。


recorders:

- name: recorder-0

  tcp:

    addr: 192.168.1.1:1234

    timeout: 10s

tcp.addr (string)

TCP服务地址

timeout (duration)

TCP服务建立连接超时时长

HTTP服务¶


记录器将数据以HTTP POST方法送到指定的HTTP服务。HTTP返回状态码200则认为记录成功。


recorders:

- name: recorder-0

  http:

    url: http://192.168.1.1:80

    timeout: 10s

http.url (string)

HTTP URL地址

timeout (duration)

请求超时时长

Redis¶


Redis记录器将数据记录到redis服务中。


recorders:

- name: recorder-0

  redis:

    addr: 127.0.0.1:6379

    db: 1

    password: 123456

    key: gost:recorder:recorder-0

    type: set

addr (string, required)

redis服务地址

db (int, default=0)

数据库名

password (string)

密码

key (string, required)

redis key

type (string, default=set)

数据类型,支持的类型有集合(set),有序集合(sset),列表(list)。

使用记录器¶


通过service.recorders指定所使用的记录器列表。


services:

- name: service-0

  addr: :8080

  recorders:

  - name: recorder-0

    record: recorder.service.router.dial.address

  - name: recorder-1

    record: recorder.service.router.dial.address.error

  handler:

    type: auto

  listener:

    type: tcp

name (string, required)

记录器名,引用定义的记录器

record (string, required)

记录对象

记录对象¶


目前支持的记录对象有:


recorder.service.client.address

所有访问服务的客户端地址

recorder.service.router.dial.address

所有访问的目标地址

recorder.service.router.dial.address.error

建立连接失败的目标地址

recorder.service.handler.serial

串口设备通讯数据

插件¶


记录器可以配置为使用外部插件服务,记录器会将数据转发给插件服务处理。当使用插件时其他参数无效。


recorders:

- name: recorder-0

  plugin:

    addr: 127.0.0.1:8000

    tls: 

      secure: false

      serverName: example.com

addr (string, required)

插件服务地址

tls (duration, default=null)

设置后将使用TLS加密传输,默认不使用TLS加密。

HTTP插件¶


recorders:

- name: recorder-0

  plugin:

    type: http

    addr: http://127.0.0.1:8000/recorder

请求示例¶


curl -XPOST http://127.0.0.1:8000/recorder -d '{"data":"aGVsbG8gd29ybGQ="}'

{"ok":true}


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


插件系统¶


GOST的插件系统建立在gRPC或HTTP通讯基础之上,通过插件可以将处理逻辑转发给插件服务处理,从而可以对功能进行更灵活的扩展。


使用gRPC或HTTP通讯方式而不是动态链接库有以下几个优点:


支持多种语言,一个插件就是一个gRPC或HTTP服务,可以使用任何语言实现。

部署灵活,可以选择分开独立部署。

插件服务的生命周期不会影响到GOST本身。

安全,采用网络通讯方式,可以更有效的限制应用之间的数据共享。

目前支持插件的模块有:跳跃点,准入控制器,认证器,分流器,主机IP映射器,域名解析器,Ingress,数据记录器。


使用插件¶


以认证器为例,当配置认证器使用插件服务后,所有的认证请求将转发给插件服务处理。


services:

- name: service-0

  addr: ":8080"

  handler:

    type: http

    auther: auther-0

  listener:

    type: tcp

authers:

- name: auther-0

  plugin:

    type: grpc

    # type: http

    addr: 127.0.0.1:8000

    token: gost

    tls: {}

type (string, default=grpc)

插件类型,grpc或http

addr (string, required)

插件服务地址

token (string)

认证信息,作为服务认证机制,插件服务可以选择对此信息进行验证。

tls (duration, default=null)

设置后将使用TLS加密传输,默认不使用TLS加密。

编写插件¶


使用Go语言编写一个认证器插件服务。


gRPC插件服务¶


https://github.com/go-gost/plugin/blob/master/auth/example/grpc/main.go


package main


import (

    "context"

    "flag"

    "fmt"

    "log"

    "net"


    "github.com/go-gost/plugin/auth/proto"

    "google.golang.org/grpc"

    "google.golang.org/grpc/codes"

    "google.golang.org/grpc/metadata"

    "google.golang.org/grpc/status"

)


var (

    port = flag.Int("port", 8000, "The server port")

)


type server struct {

    proto.UnimplementedAuthenticatorServer

}


func (s *server) Authenticate(ctx context.Context, in *proto.AuthenticateRequest) (*proto.AuthenticateReply, error) {

    // optional client authentication

    token := s.getCredentials(ctx)

    if token != "gost" {

        return nil, status.Error(codes.Unauthenticated, codes.Unauthenticated.String())

    }


    reply := &proto.AuthenticateReply{}

    if in.GetUsername() == "gost" && in.GetPassword() == "gost" {

        reply.Ok = true

    }

    return reply, nil

}


func (s *server) getCredentials(ctx context.Context) string {

    md, ok := metadata.FromIncomingContext(ctx)

    if ok && len(md["token"]) > 0 {

        return md["token"][0]

    }

    return ""

}


func main() {

    flag.Parse()

    lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))

    if err != nil {

        log.Fatalf("failed to listen: %v", err)

    }

    s := grpc.NewServer()

    proto.RegisterAuthenticatorServer(s, &server{})

    log.Printf("server listening at %v", lis.Addr())

    if err := s.Serve(lis); err != nil {

        log.Fatalf("failed to serve: %v", err)

    }

}

HTTP插件服务¶


https://github.com/go-gost/plugin/blob/master/auth/example/http/main.go


package main


import (

    "encoding/json"

    "flag"

    "fmt"

    "log"

    "net"

    "net/http"

)


var (

    port = flag.Int("port", 8000, "The server port")

)


type autherRequest struct {

    Username string `json:"username"`

    Password string `json:"password"`

}


type autherResponse struct {

    OK bool   `json:"ok"`

    ID string `json:"id"`

}


func main() {

    flag.Parse()

    lis, err := net.Listen("tcp", fmt.Sprintf(":%d", *port))

    if err != nil {

        log.Fatalf("failed to listen: %v", err)

    }

    log.Printf("server listening at %v", lis.Addr())


    http.HandleFunc("/auth", func(w http.ResponseWriter, r *http.Request) {

        rb := autherRequest{}

        if err := json.NewDecoder(r.Body).Decode(&rb); err != nil {

            log.Println(err)

            w.WriteHeader(http.StatusBadRequest)

            return

        }


        resp := autherResponse{}

        if rb.Username == "gost" && rb.Password == "gost" {

            resp.OK = true

            resp.ID = "gost"

        }


        log.Printf("auth: %s, %s, %v", rb.Username, rb.Password, resp.OK)


        json.NewEncoder(w).Encode(resp)

    })


    if err := http.Serve(lis, nil); err != nil {

        log.Fatalf("failed to serve: %v", err)

    }

}


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


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



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

发表评论:

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