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

gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,ICMP通道,Unix Domain Socket重定向,串口重定向

系统: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


本文内容:ICMP通道,Unix Domain Socket重定向,串口重定向,监控指标,日志,Web API,动态配置


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命令教材,ICMP 互联网IT

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


ICMP通道¶


ICMP通道是利用ICMP协议的Echo类型报文(ping命令所采用)进行数据传输。由于ICMP类似于UDP,是一种不可靠的协议,存在丢包和乱序情况,因此不能直接用于流式数据传输。GOST在ICMP之上利用QUIC协议来实现安全可靠的数据传输,因此ICMP通道可以看作是QUIC-over-ICMP数据通道。


ICMPv6

ICMP通道目前仅支持ICMPv4,不支持ICMPv6。


关闭系统默认Echo响应

在Linux系统中可以通过以下命令关闭系统本身的echo响应数据,减少不必要的数据传输。此为可选操作,GOST会自动丢弃无效数据包。


echo 1 > /proc/sys/net/ipv4/icmp_echo_ignore_all

使用方法¶


服务端


gost -L icmp://:0

客户端


gost -L :8080 -F "relay+icmp://server_ip:12345?keepAlive=true&ttl=10s"

Note

执行以上命令需要root权限。


客户端标识¶


ICMP与通常的传输层协议,例如TCP,UDP不同,没有端口的概念,但为了区分不同的客户端,需要对客户端进行标识。GOST中采用IP+ID的方式来标识一个客户端,IP即客户端IP地址,ID是ICMP Echo报文中的Identifier字段值。


在客户端可以通过类似于指定端口的方式来指定ID,例如上面例子中的12345。也可以设置为0,GOST会自动生成一个随机ID。对于服务端这个值无效。


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


Unix Domain Socket重定向¶


UDS(Unix Domain Socket)重定向可以将本地的UDS服务重定向到一个TCP服务或另外一个UDS服务,转发链在这种场景下依然有效。


限制

当重定向到远程UDS服务时,转发链末端最后一个节点必须使用relay协议。


重定向类型¶


重定向到TCP服务¶


本地启动UDS服务gost.sock,并重定向到192.168.1.1:8080TCP服务。



命令行

gost -L unix://gost.sock -F tcp://192.168.1.1:8080


配置文件

services:

- name: service-0

  addr: gost.sock

  handler:

    type: unix

    chain: chain-0

  listener:

    type: unix

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.1:8080

      connector:

        type: tcp

      dialer:

        type: tcp

TCP服务重定向到本地UDS服务¶


本地启动TCP服务localhost:8080并重定向到本地UDS服务gost.sock。



命令行

gost -L tcp://localhost:8080 -F unix://gost.sock 


配置文件

services:

- name: service-0

  addr: localhost:8080

  handler:

    type: tcp

    chain: chain-0

  listener:

    type: tcp

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: gost.sock

      connector:

        type: unix

      dialer:

        type: unix

重定向到本地另外一个UDS服务¶


本地启动UDS服务gost.sock,并重定向到本地的另外一个UDS服务gost2.sock。



命令行

gost -L unix://gost.sock/gost2.sock


配置文件

services:

- name: service-0

  addr: gost.sock

  handler:

    type: unix

  listener:

    type: unix

  forwarder:

    nodes:

    - name: target-0

      addr: gost2.sock

重定向到远程UDS服务¶


本地启动UDS服务gost.sock,通过转发链重定向到远程主机192.168.1.1上的UDS服务gost.sock。



命令行

gost -L unix://gost.sock/gost.sock -F relay://192.168.1.1:8420



配置文件

services:

- name: service-0

  addr: gost.sock

  handler:

    type: unix

    chain: chain-0

  listener:

    type: unix

  forwarder:

    nodes:

    - name: target-0

      addr: gost.sock

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.1:8420

      connector:

        type: relay

      dialer:

        type: tcp


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


串口重定向¶


串口重定向可以将本地的串口设备重定向到一个TCP服务或另外一个串口设备,转发链在这种场景下依然有效。


限制

当重定向到远程串口设备时,转发链末端最后一个节点必须使用relay协议。


串口地址格式

串口地址中可以指定端口名,波特率,奇偶校验,其中波特率和奇偶校验可以省略:port[,baud[,parity]]


波特率默认值为9600。


奇偶校验类型:odd - 奇校验,even - 偶校验,none - 无校验,默认为无校验。


仅指定端口名

serial://COM1/COM2

指定端口名和波特率

serial://COM1,9600/COM2

指定端口名,波特率和奇偶校验

serial://COM1,9600,odd/COM2

重定向类型¶


重定向到TCP服务¶


将本地串口设备COM1重定向到192.168.1.1:8080TCP服务。



命令行

gost -L serial://COM1 -F tcp://192.168.1.1:8080


配置文件

services:

- name: service-0

  addr: COM1

  handler:

    type: serial

    chain: chain-0

  listener:

    type: serial

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.1:8080

      connector:

        type: tcp

      dialer:

        type: tcp

TCP服务重定向到本地串口设备¶


本地启动TCP服务localhost:8080并重定向到本地串口设备COM1。



命令行

gost -L tcp://localhost:8080 -F serial://COM1


配置文件

services:

- name: service-0

  addr: localhost:8080

  handler:

    type: tcp

    chain: chain-0

  listener:

    type: tcp

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: COM1

      connector:

        type: serial

      dialer:

        type: serial

重定向到本地另外串口设备¶


将本地串口设备COM1重定向到本地的另外一个串口设备COM2。



命令行

gost -L serial://COM1,9600,odd/COM2


配置文件

services:

- name: service-0

  addr: COM1,9600,odd

  handler:

    type: serial

  listener:

    type: serial

  forwarder:

    nodes:

    - name: target-0

      addr: COM2

重定向到远程串口设备¶


将本地串口设备COM1通过转发链重定向到远程主机192.168.1.1上的串口设备COM1。



命令行

gost -L serial://COM1/COM1 -F relay://192.168.1.1:8420


配置文件

services:

- name: service-0

  addr: COM1

  handler:

    type: serial

    chain: chain-0

  listener:

    type: serial

  forwarder:

    nodes:

    - name: target-0

      addr: COM1

chains:

- name: chain-0

  hops:

  - name: hop-0

    nodes:

    - name: node-0

      addr: 192.168.1.1:8420

      connector:

        type: relay

      dialer:

        type: tcp

记录数据¶


可以通过记录器来记录串口收发的数据。



配置文件

services:

- name: service-0

  addr: COM1

  recorders:

  - name: recorder-0

    record: recorder.service.handler.serial

    metadata:

      direction: true

      timestampFormat: '2006-01-02 15:04:05.000'

      hexdump: true

  handler:

    type: serial

  listener:

    type: serial

  forwarder:

    nodes:

    - name: target-0

      addr: COM2

recorders:

- name: recorder-0

  file:

    path: 'C:\\serial.data'

将串口数据记录到C:\serial.data文件中,记录的数据格式如下:


>2023-09-18 10:16:25.117

00000000  60 02 a0 01 70 02 b0 01  c0 01 c0 01 40 02 30 01  |`...p.......@.0.|

00000010  e0 00 30 01 50 02 60 01  40 01 30 01 10 02 f0 00  |..0.P.`.@.0.....|

00000020  20 01 60 01 b0 01 f0 00  10 01 f0 00 c0 01 a0 01  | .`.............|

00000030  40 02 b0 01 10 02 60 02  00 00 00 01 50 01 70 01  |@.....`.....P.p.|

00000040  a0 01 30 01 e0 00 e0 01  40 01 00 01 e0 00 c0 01  |..0.....@.......|

00000050  40 01 e0 00 f0 00 20 02  50 01 10 02 10 01 10 02  |@..... .P.......|

00000060  80 01 20 02 30 01 10 02  30 01 00 01 20 01 10 02  |.. .0...0... ...|

<2023-09-18 10:16:25.120

00000000  d0 00 d0 00 10 01 10 02  50 01 e0 00 00 01 d0 01  |........P.......|

00000010  f0 00 10 01 c0 01 40 02  80 01 00 01 20           |......@..... |

数据记录格式¶


在记录数据时可以设置记录的数据格式:


direction (bool, default=false)

标记数据方向,>表示源端口发出的数据,<表示源端口接收到的数据。

timestampFormat (string)

指定时间戳格式,当设置后会在每条数据前增加时间戳。

hexdump (bool, default=false)

以hexdump -C命令输出的格式记录数据,默认记录原始字节流。


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


监控指标¶


GOST内部通过Prometheus的指标(Metrics)来提供监控数据。


开启监控¶


通过metrics参数来开启监控指标记录,默认不开启。



命令行

gost -L :8080 -metrics=:9000


配置文件

services:

- name: service-0

  addr: ":8080"

  handler:

    type: auto

  listener:

    type: tcp


metrics:

  addr: :9000

  path: /metrics

  auth:

    username: user

    password: pass

  auther: auther-0

metrics.addr (string)

监控指标HTTP API服务地址

metrics.path (string, default=/metrics)

API路径

身份认证¶


通过auth或auther参数可以设置身份认证信息。如果设置了auther参数,auth参数则会被忽略。身份认证采用HTTP Basic Auth方式。


metrics:

  addr: :9000

  auth:

    username: user

    password: pass

  auther: auther-0

开启之后可以通过http://localhost:9000/metrics地址查看到指标数据。


指标示例

gost_chain_errors_total{chain="chain-0",host="host-0"} 1


gost_service_handler_errors_total{host="host-0",service="service-0"} 1


gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.005"} 0

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.01"} 0

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.025"} 0

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.05"} 0

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.1"} 0

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.25"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="0.5"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="1"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="2.5"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="5"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="10"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="15"} 1

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="30"} 2

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="60"} 2

gost_service_request_duration_seconds_bucket{host="host-0",service="service-0",le="+Inf"} 2

gost_service_request_duration_seconds_sum{host="host-0",service="service-0"} 15.172895206

gost_service_request_duration_seconds_count{host="host-0",service="service-0"} 2


gost_service_requests_in_flight{host="host-0",service="service-0"} 0


gost_service_requests_total{host="host-0",service="service-0"} 2


gost_service_transfer_input_bytes_total{host="host-0",service="service-0"} 1018


gost_service_transfer_output_bytes_total{host="host-0",service="service-0"} 7327


gost_services{host="host-0"} 1

指标说明¶


gost_services (type=gauge)

运行的服务数量

gost_service_requests_total (type=counter)

服务处理的请求总数

gost_service_transfer_input_bytes_total (type=counter)

服务接收到的数据字节数

gost_service_transfer_output_bytes_total (type=counter)

服务发送出的数据字节数

gost_service_requests_in_flight (type=gauge)

服务当前正在处理中的请求数

gost_service_request_duration_seconds (type=histogram)

服务请求处理的时长分布

gost_service_handler_errors_total (type=counter)

服务处理请求失败数

gost_chain_errors_total (type=counter)

转发链本身建立连接失败数

Grafana Dashboard¶


你可以使用以下的Dashboard来呈现监控指标数据


https://grafana.com/grafana/dashboards/16037


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


日志¶


log:

  level: info

  format: json

  output: stderr

  rotation:

    maxSize: 100

    maxAge: 10

    maxBackups: 3

    localTime: false

    compress: false

级别¶


支持的级别有:


fatal - 致命错误,当输出此级别的日志后程序将退出。

error - 一般性错误,程序正常运行。

warn - 需要注意的警告信息。

info - 一般信息。

debug - 比info级别输出更多信息,用于开发或使用过程中定位问题。

trace - 比debug级别输出更多信息,用于开发调试。

默认级别为info。


命令行

命令行下可以通过-D参数设置debug级别,或者通过环境变量GOST_LOGGER_LEVEL来设置相应的级别。


格式¶


支持json和text两种格式,默认为json格式。


输出¶


支持的输出方式有:


none - 丢弃日志,不输出任何信息。

stderr - 标准错误流。

stdout - 标准输出流。

/path/to/file - 指定的文件路径。

默认输出到标准错误流(stderr)。


Rotation¶


通过配置rotation选项可以对日志进行切分,备份和压缩。当output为文件时有效。


maxSize (int, default=100)

文件存储大小,单位为MB。

maxAge (int)

备份日志文件保存天数,默认不根据时间清理旧文件。

maxBackups (int)

备份日志文件数量,默认保存所有文件。

localTime (bool, default=false)

备份文件名是否使用本地时间格式。默认使用UTC时间。

compress (bool, default=false)

备份文件是否(使用gzip)压缩。


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


Web API¶


GOST可以通过开启Web API服务使用RESTful API和GOST进程进行交互。



命令行

gost -L http://:8080 -api :18080


配置文件

services:

- name: service-0

  addr: ":8080"

  handler:

    type: http

  listener:

    type: tcp

api:

  addr: :18080

  pathPrefix: /api

  accesslog: true

  auth:

    username: user

    password: pass

  auther: auther-0

甚至可以只开启API服务,后续通过API来动态配置服务和其他组件。



命令行

gost -api :18080


配置文件

api:

  addr: :18080

  pathPrefix: /api

  accesslog: true

  auth:

    username: user

    password: pass

  auther: auther-0

路径前缀¶


通过pathPrefix参数可以设置URL路径前缀。


例如默认路径为http://localhost:18080/config,当设置pathPrefix为/api后变为http://localhost:18080/api/config。


访问日志¶


通过accesslog参数开启接口访问日志,默认不输出访问日志。


身份认证¶


通过auth或auther参数可以设置身份认证信息。如果设置了auther参数,auth参数则会被忽略。身份认证采用HTTP Basic Auth方式。


api:

  addr: :18080

  auth:

    username: user

    password: pass

  auther: auther-0

在线测试¶


你可以使用线上环境进行测试,或在下面的swaggerUI中直接尝试。接口说明请参考在线API文档。


GOST程序已经内置了swagger API文档,如果本地开启了Web API服务,也可以通过https://gost.run/swagger-ui/?url=http://localhost:18080/docs/swagger.yaml来尝试配置本地服务(这里假设本地Web API服务运行在18080端口)。


Scheme切换

SwaggerUI中默认的scheme为HTTPS,如果要测试本地服务则需要手动切换到HTTP。


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


动态配置¶


GOST可以通过Web API来进行动态配置,支持动态配置的对象有:服务(Service),转发链(Chain),认证器(Auther),分流器(Bypass),准入控制器(Admission),域名解析器(Resolver),域名IP映射器(Hosts),限速器(Limiter)。配置变更会立即生效。


详细的接口说明请参考在线API文档。


不可变性

在GOST内部,所有动态配置的对象均为不可变的实例。后续的更新操作会生成一个新的对象实例替换现有实例。


配置¶


查看当前的配置¶


curl https://gost.run/play/webapi/config?format=json

保存配置¶


保存当前的配置到gost.json或gost.yaml文件。


curl -X POST https://gost.run/play/webapi/config?format=yaml

服务¶


通过Web API可以动态对服务进行配置。


新建服务¶


添加一个新的服务不会对现有服务造成影响,如果配置成功则服务立即生效。


curl https://gost.run/play/webapi/config/services -d \

'{"name":"service-0","addr":":8080","handler":{"type":"http"},"listener":{"type":"tcp"}}'

更新服务¶


修改一个现有的服务会导致此服务重启。


curl -X PUT https://gost.run/play/webapi/config/services/service-0 -d \

'{"name":"service-0","addr":":8080","handler":{"type":"socks5"},"listener":{"type":"tcp"}}'

删除服务¶


删除一个现有服务会立即关闭并删除此服务。


curl -X DELETE https://gost.run/play/webapi/config/services/service-0 

转发链¶


前向引用

GOST中的配置支持前向引用,当一个对象引用了另外一个对象(例如服务中通过chain属性来引用转发链),所引用的对象可以不存在,后面可以通过增加此对象让引用生效。


新建转发链¶


转发链配置成功后,引用此转发链的对象会立即生效。


curl https://gost.run/play/webapi/config/chains -d \

'{"name":"chain-0","hops":[{"name":"hop-0", 

"nodes":[{"name":"node-0","addr":":1080", 

"connector":{"type":"http"},"dialer":{"type":"tcp"}}]}]}'

更新转发链¶


使用请求的配置替换现有转发链对象。


curl -X PUT https://gost.run/play/webapi/config/chains/chain-0 -d \

'{"name":"chain-0","hops":[{"name":"hop-0", 

"nodes":[{"name":"node-0","addr":":1080", 

"connector":{"type":"socks5"},"dialer":{"type":"tcp"}}]}]}'

删除转发链¶


curl -X DELETE https://gost.run/play/webapi/config/chains/chain-0 


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


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



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

发表评论:

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