
GO Simple Tunnel - golang으로 작성된 간단한 터널
Wiki 사이트: v2.gost.run
Telegram 토론 그룹: https://t.me/gogost
Google 토론 그룹: https://groups.google.com/d/forum/go-gost
GOST v3 https://gost.run
https://github.com/ginuerzh/gost/releases
git clone https://github.com/ginuerzh/gost.git
cd gost/cmd/gost
go build
docker run --rm ginuerzh/gost -V
brew install gost
sudo snap install core
sudo snap install gost
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:[email protected]: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 유형일 수 있습니다.
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
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 방식을 사용하여 전달합니다.
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
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 방식을 사용하여 전달합니다.
gost의 HTTP2는 두 가지 모드를 지원합니다:
서버:
gost -L=http2://:443
클라이언트:
gost -L=:8080 -F=http2://server_ip:443
서버:
gost -L=h2://:443
클라이언트:
gost -L=:8080 -F=h2://server_ip:443
gost의 QUIC 지원은 quic-go 라이브러리를 기반으로 합니다.
서버:
gost -L=quic://:6121
클라이언트:
gost -L=:8080 -F=quic://server_ip:6121
참고: QUIC 모드는 프록시 체인의 첫 번째 노드로만 사용할 수 있습니다.
gost의 KCP 지원은 kcp-go 및 kcptun 라이브러리를 기반으로 합니다.
서버:
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 모드는 프록시 체인의 첫 번째 노드로만 사용할 수 있습니다.
gost의 SSH는 두 가지 모드를 지원합니다:
서버:
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
이 기능은 @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의 경우 TLS를 사용하여 전체 통신 과정을 암호화할 수 있습니다. 즉, HTTPS 프록시입니다:
서버:
gost -L=https://:443
클라이언트:
gost -L=:8080 -F=http+tls://server_ip:443
gost의 HTTP2 프록시 모드는 TLS로 암호화된 HTTP2 프로토콜만 지원하며, 평문 HTTP2 전송은 지원하지 않습니다.
gost의 HTTP2 채널 모드는 암호화(h2) 및 평문(h2c) 두 가지 모드를 지원합니다.
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 방식)로 통신합니다.
gost의 shadowsocks 지원은 shadowsocks-go 라이브러리를 기반으로 합니다.
서버:
gost -L=ss://chacha20:123456@:8338
클라이언트:
gost -L=:8080 -F=ss://chacha20:123456@server_ip:8338
현재 서버만 UDP Relay를 지원합니다.
서버:
gost -L=ssu://chacha20:123456@:8338
gost에는 TLS 인증서가 내장되어 있습니다. 다른 TLS 인증서를 사용해야 하는 경우 두 가지 방법이 있습니다:
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이 기여했습니다.