你的位置:首页 > 互联网IT
gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,ICMP
gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,ICMP通道,Unix Domain Socket重定向,串口重定向
系统: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
本文内容: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
-----------------------------------------------------------
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
发表评论: