The Wayback Machine - https://web.archive.org/web/20200610020727/https://github.com/ginuerzh/gost
Skip to content
GO Simple Tunnel - a simple tunnel written in golang
Go Other
  1. Go 99.5%
  2. Other 0.5%
Branch: master
Clone or download

Latest commit

Latest commit 2707a8f May 23, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.config add reloader for authenticator Jan 9, 2019
.github/workflows rm shadowstream used in tuntap May 23, 2020
cmd/gost support mutual TLS authentication May 23, 2020
examples 修复 examples 中的参数错误 (#315) Nov 3, 2018
.dockerignore add timeout for Connectors Dec 22, 2018
.gitignore fix udp forward: clear closed client info Dec 18, 2019
.travis.yml add more test cases for socks5 Dec 31, 2018
Dockerfile Build go binaries without QEMU Apr 14, 2020
LICENSE add missing files Aug 4, 2017
Makefile Update Makefile (#448) Nov 30, 2019
README.md update README Feb 9, 2020
README_en.md update README Feb 9, 2020
auth.go fix HTTP Host header Jun 3, 2019
auth_test.go add reloader for authenticator Jan 9, 2019
bypass.go add reloader for authenticator Jan 9, 2019
bypass_test.go add reloader for authenticator Jan 9, 2019
chain.go fix #352: add pubkey auth support for ssh Mar 2, 2020
client.go fix issue #520 May 23, 2020
common_test.go fix udp forward: clear closed client info Dec 18, 2019
dns.go add ssu connector Feb 2, 2020
docker-compose.yaml Build go binaries without QEMU Apr 14, 2020
forward.go add relay proxy protocol Feb 27, 2020
forward_test.go add ssu connector Feb 2, 2020
ftcp.go add ssu connector Feb 2, 2020
go.mod update go.mod May 23, 2020
go.sum update go.mod May 23, 2020
gost.go v2.11.1 May 23, 2020
handler.go add gateway per route for tun server side Jan 21, 2020
handler_test.go add more test cases for socks5 Dec 31, 2018
hosts.go add reloader for authenticator Jan 9, 2019
hosts_test.go add more test cases for socks5 Dec 31, 2018
http.go add chain.DialContext Feb 8, 2020
http2.go fix issue #520 May 23, 2020
http2_test.go fix http2 test Jan 9, 2020
http_test.go add reloader for authenticator Jan 9, 2019
kcp.go kcp: add fake TCP support Jan 11, 2020
kcp_test.go fix tests Jun 21, 2019
log.go add comment, fix golint Aug 12, 2017
mux.go add more test cases for socks5 Dec 31, 2018
node.go add relay proxy protocol Feb 27, 2020
node_test.go add stop for live reloading Nov 29, 2018
obfs.go fix typo Mar 3, 2020
obfs_test.go add more test cases Jan 5, 2019
permissions.go add test files Aug 13, 2017
permissions_test.go Change + to space to allows nice + be in the url Apr 10, 2017
quic.go add default timeout for transporters Dec 22, 2018
quic_test.go fix tests Jun 21, 2019
redirect.go update func calls Feb 9, 2020
redirect_other.go fix redirect on non linux OS Feb 2, 2020
relay.go update relay package Mar 1, 2020
reload.go add reloader for authenticator Jan 9, 2019
resolver.go dns: add edns0 subnet option support Feb 9, 2020
resolver_test.go fix test cases Feb 2, 2020
selector.go add max_fails & fail_timeout options support for port forwarding Jun 20, 2019
selector_test.go add max_fails & fail_timeout options support for port forwarding Jun 20, 2019
server.go add ssu connector Feb 2, 2020
signal.go fix compile error Mar 3, 2017
signal_unix.go switch to go module Dec 6, 2018
snapcraft.yaml v2.11.1 May 23, 2020
sni.go sni: work with non-ssl Apr 14, 2020
sni_test.go fix sni test Jan 4, 2020
socks.go rudp: fix panic Feb 8, 2020
socks_test.go add reloader for authenticator Jan 9, 2019
ss.go fix type assert Feb 28, 2020
ss_test.go add chain.DialContext Feb 8, 2020
ssh.go v2.11.1 May 23, 2020
ssh_test.go fix tests Jun 21, 2019
tcp.go add ssu connector Feb 2, 2020
tls.go add more test cases for socks5 Dec 31, 2018
tls_test.go fix tests Jun 21, 2019
tuntap.go rm shadowstream used in tuntap May 23, 2020
tuntap_darwin.go fix tun for darwin Feb 3, 2020
tuntap_linux.go tap: make net parameter optional (#472) Jan 22, 2020
tuntap_unix.go tap: make net parameter optional (#472) Jan 22, 2020
tuntap_windows.go tap: make net parameter optional (#472) Jan 22, 2020
udp.go reduce buffer allocation Feb 29, 2020
ws.go fix peer config Jan 16, 2019
ws_test.go fix tests Jun 21, 2019
wss_test.go fix tests Jun 21, 2019

README.md

gost - GO Simple Tunnel

GO语言实现的安全隧道

GoDoc Build Status Go Report Card codecov GitHub release Snap Status Docker Build Status

English README

特性

Wiki站点: https://docs.ginuerzh.xyz/gost/

Telegram讨论群: https://t.me/gogost

Google讨论组: https://groups.google.com/d/forum/go-gost

安装

二进制文件

https://github.com/ginuerzh/gost/releases

源码编译

git clone https://github.com/ginuerzh/gost.git
cd gost/cmd/gost
go build

Docker

docker pull ginuerzh/gost

Ubuntu商店

sudo snap install core
sudo snap install gost

快速上手

不设置转发代理

  • 作为标准HTTP/SOCKS5代理
gost -L=:8080
  • 设置代理认证信息
gost -L=admin:123456@localhost:8080
  • 多端口监听
gost -L=http2://:443 -L=socks5://:1080 -L=ss://aes-128-cfb:123456@:8338

设置转发代理

gost -L=:8080 -F=192.168.1.1:8081
  • 转发代理认证
gost -L=:8080 -F=http://admin:123456@192.168.1.1:8081

设置多级转发代理(代理链)

gost -L=:8080 -F=quic://192.168.1.1:6121 -F=socks5+wss://192.168.1.2:1080 -F=http2://192.168.1.3:443 ... -F=a.b.c.d:NNNN

gost按照-F设置的顺序通过代理链将请求最终转发给a.b.c.d:NNNN处理,每一个转发代理可以是任意HTTP/HTTPS/HTTP2/SOCKS4/SOCKS5/Shadowsocks类型代理。

本地端口转发(TCP)

gost -L=tcp://:2222/192.168.1.1:22 [-F=...]

将本地TCP端口2222上的数据(通过代理链)转发到192.168.1.1:22上。当代理链末端(最后一个-F参数)为SSH转发通道类型时,gost会直接使用SSH的本地端口转发功能:

gost -L=tcp://:2222/192.168.1.1:22 -F forward+ssh://:2222

本地端口转发(UDP)

gost -L=udp://:5353/192.168.1.1:53?ttl=60 [-F=...]

将本地UDP端口5353上的数据(通过代理链)转发到192.168.1.1:53上。 每条转发通道都有超时时间,当超过此时间,且在此时间段内无任何数据交互,则此通道将关闭。可以通过ttl参数来设置超时时间,默认值为60秒。

注: 转发UDP数据时,如果有代理链,则代理链的末端(最后一个-F参数)必须是gost SOCKS5类型代理,gost会使用UDP over TCP方式进行转发。

远程端口转发(TCP)

gost -L=rtcp://:2222/192.168.1.1:22 [-F=... -F=socks5://172.24.10.1:1080]

将172.24.10.1:2222上的数据(通过代理链)转发到192.168.1.1:22上。当代理链末端(最后一个-F参数)为SSH转发通道类型时,gost会直接使用SSH的远程端口转发功能:

gost -L=rtcp://:2222/192.168.1.1:22 -F forward+ssh://:2222

远程端口转发(UDP)

gost -L=rudp://:5353/192.168.1.1:53?ttl=60 [-F=... -F=socks5://172.24.10.1:1080]

将172.24.10.1:5353上的数据(通过代理链)转发到192.168.1.1:53上。 每条转发通道都有超时时间,当超过此时间,且在此时间段内无任何数据交互,则此通道将关闭。可以通过ttl参数来设置超时时间,默认值为60秒。

注: 转发UDP数据时,如果有代理链,则代理链的末端(最后一个-F参数)必须是GOST SOCKS5类型代理,gost会使用UDP-over-TCP方式进行转发。

HTTP2

gost的HTTP2支持两种模式:

  • 作为标准的HTTP2代理,并向下兼容HTTPS代理。
  • 作为通道传输其他协议。
代理模式

服务端:

gost -L=http2://:443

客户端:

gost -L=:8080 -F=http2://server_ip:443
通道模式

服务端:

gost -L=h2://:443

客户端:

gost -L=:8080 -F=h2://server_ip:443

QUIC

gost对QUIC的支持是基于quic-go库。

服务端:

gost -L=quic://:6121

客户端:

gost -L=:8080 -F=quic://server_ip:6121

注: QUIC模式只能作为代理链的第一个节点。

KCP

gost对KCP的支持是基于kcp-gokcptun库。

服务端:

gost -L=kcp://:8388

客户端:

gost -L=:8080 -F=kcp://server_ip:8388

gost会自动加载当前工作目录中的kcp.json(如果存在)配置文件,或者可以手动通过参数指定配置文件路径:

gost -L=kcp://:8388?c=/path/to/conf/file

注: KCP模式只能作为代理链的第一个节点。

SSH

gost的SSH支持两种模式:

  • 作为转发通道,配合本地/远程TCP端口转发使用。
  • 作为通道传输其他协议。
转发模式

服务端:

gost -L=forward+ssh://:2222

客户端:

gost -L=rtcp://:1222/:22 -F=forward+ssh://server_ip:2222
通道模式

服务端:

gost -L=ssh://:2222

客户端:

gost -L=:8080 -F=ssh://server_ip:2222?ping=60

可以通过ping参数设置心跳包发送周期,单位为秒。默认不发送心跳包。

透明代理

基于iptables的透明代理。

gost -L=redirect://:12345 -F=http2://server_ip:443

obfs4

此功能由@isofew贡献。

服务端:

gost -L=obfs4://:443

当服务端运行后会在控制台打印出连接地址供客户端使用:

obfs4://:443/?cert=4UbQjIfjJEQHPOs8vs5sagrSXx1gfrDCGdVh2hpIPSKH0nklv1e4f29r7jb91VIrq4q5Jw&iat-mode=0

客户端:

gost -L=:8888 -F='obfs4://server_ip:443?cert=4UbQjIfjJEQHPOs8vs5sagrSXx1gfrDCGdVh2hpIPSKH0nklv1e4f29r7jb91VIrq4q5Jw&iat-mode=0'

加密机制

HTTP

对于HTTP可以使用TLS加密整个通讯过程,即HTTPS代理:

服务端:

gost -L=https://:443

客户端:

gost -L=:8080 -F=http+tls://server_ip:443

HTTP2

gost的HTTP2代理模式仅支持使用TLS加密的HTTP2协议,不支持明文HTTP2传输。

gost的HTTP2通道模式支持加密(h2)和明文(h2c)两种模式。

SOCKS5

gost支持标准SOCKS5协议的no-auth(0x00)和user/pass(0x02)方法,并在此基础上扩展了两个:tls(0x80)和tls-auth(0x82),用于数据加密。

服务端:

gost -L=socks5://:1080

客户端:

gost -L=:8080 -F=socks5://server_ip:1080

如果两端都是gost(如上)则数据传输会被加密(协商使用tls或tls-auth方法),否则使用标准SOCKS5进行通讯(no-auth或user/pass方法)。

Shadowsocks

gost对shadowsocks的支持是基于shadowsocks-go库。

服务端:

gost -L=ss://chacha20:123456@:8338

客户端:

gost -L=:8080 -F=ss://chacha20:123456@server_ip:8338
Shadowsocks UDP relay

目前仅服务端支持UDP Relay。

服务端:

gost -L=ssu://chacha20:123456@:8338

TLS

gost内置了TLS证书,如果需要使用其他TLS证书,有两种方法:

  • 在gost运行目录放置cert.pem(公钥)和key.pem(私钥)两个文件即可,gost会自动加载运行目录下的cert.pem和key.pem文件。
  • 使用参数指定证书文件路径:
gost -L="http2://:443?cert=/path/to/my/cert/file&key=/path/to/my/key/file"

对于客户端可以通过secure参数开启服务器证书和域名校验:

gost -L=:8080 -F="http2://server_domain_name:443?secure=true"

对于客户端可以指定CA证书进行证书锁定(Certificate Pinning):

gost -L=:8080 -F="http2://:443?ca=ca.pem"

证书锁定功能由@sheerun贡献

You can’t perform that action at this time.