你的位置:首页 > 互联网IT
gost,gost3,gost-v3,gost3配置文件教材,http代理,socks5代理,转发端口,shadowsocks代理,SS代理,负载均衡,中转服务,端口映射,gost3命令教材,域名解析
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
本文内容:域名解析,主机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
-----------------------------------------------------------
域名解析¶
通过在服务或转发链中设置域名解析器,可以更改域名解析行为。
动态配置
解析器支持通过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
发表评论: