-
Notifications
You must be signed in to change notification settings - Fork 5
/
gost-nat
169 lines (122 loc) · 4.9 KB
/
gost-nat
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
git clone https://github.com/ginuerzh/gost.git
cd gost/cmd/gost
env CGO_ENABLED=0 go build -o $HOME/gostd -ldflags "-s -w"
sudo mv $HOME/gostd /usr/local/bin/gost
sudo chown root:root /usr/local/bin/gost
sudo chmod 0755 /usr/local/bin/gost
sudo setcap CAP_NET_BIND_SERVICE=+eip /usr/local/bin/gost
sudo nano /etc/systemd/system/gost.service
-------------------------------------------------------------------------
[Unit]
Description=Gost Tunnel
After=network-online.target
[Service]
Type=simple
User=nobody
ExecStart=/usr/local/bin/gost -L relay+mtls://:12345/127.0.0.1:443
## gost后面参数仅供参考
[Install]
WantedBy=multi-user.target
---------------------------------------------------------------------------
sudo systemctl daemon-reload
sudo systemctl enable gost
sudo ssytemctl start gost
relay+mtls 似乎性能有点问题,速度上不去,可能多路复用有点 bug,建议直接用 relay+tls 或者用 relay+mwss。
国内中转机器
gost -L udp://:1053 -L tcp://:1053 -F relay+mtls://1.2.3.4:12345
监听本机 1053 端口的 TCP、UDP 连接,转发到落地机器的 12345 端口。
落地机器
gost -L relay+mtls://:12345/127.0.0.1:443
监听本机的 12345 端口,接收转发过来的连接,再转给本地的 443 端口。
不加密直接转发
有些节点已经换成了 V2Ray+WS+TLS 的方案,已经有了一层 TLS 加密,这时就不需要再在隧道上加一层来套娃了,徒增性能损耗,可以直接端口转发。GOST 也可以支持直接转发,这样就可以省去 iptables 或者 socat 的工作。
gost -L=tcp://:443/1.2.3.4:443 -L=udp://:443/1.2.3.4:443
很简单,直接监听本机 443 端口,转发到落地节点 1.2.3.4 的 443 端口上。这种节点后端个人比较习惯生产环境都用 docker-compose 部署,便于更新和管理,可以这样写。
version: "3"
services:
redirect:
image: ginuerzh/gost
restart: always
network_mode: "host"
command:
- "-L=tcp://:443/1.2.3.4:443"
- "-L=udp://:443/1.2.3.4:443"
logging:
options:
max-size: "10m"
max-file: "3"
然后 docker-compose up -d 即可启动。
docker-compose 的安装在 Ubuntu、Debian 上可以这样操作。
apt update && apt upgrade
apt install python3-pip
pip3 install -U pip
pip3 install docker-compose
TLS 加密隧道
目前网上也有一些 GOST 加密隧道的教程,但大多都有问题,有些人直接使用 GOST 的代理链路功能来转发,这样会导致落地节点上也多开了一个 GOST 代理,而且没有任何验证,可以直接起一个 GOST 客户端连上去,有一定风险。其实 GOST 的文档里提到了加密隧道的搭建方法,即利用 forward 协议。
国内机器
gost -L=tcp://:443 -L=udp://:443 -F=forward+mtls://1.2.3.4:443?mbind=true
监听 443 端口并利用 mtls 传输到落地节点 1.2.3.4 的 443 端口,?mbind=true 启用多路复用,不写也没什么关系。
落地节点
gost -L=mtls://:443/127.0.0.1:843
落地节点的 SSR 进程监听 127.0.0.1:843,然后 gost 监听 443 端口转发到 SSR 上即可。
中转机器
version: "3"
services:
tls:
image: ginuerzh/gost
restart: always
network_mode: "host"
command:
- "-L=tcp://:443"
- "-L=udp://:443"
- "-F=forward+mtls://1.2.3.4:443?mbind=true"
logging:
options:
max-size: "10m"
max-file: "3"
落地节点
version: "3"
services:
ssr:
image: fanvinga/docker-ssrmu
restart: always
network_mode: "bridge"
environment:
API_INTERFACE: "modwebapi"
WEBAPI_URL: "****"
WEBAPI_TOKEN: "***"
MU_SUFFIX: "***"
FAST_OPEN: "true"
SPEEDTEST: 6
NODE_ID: 1
TZ: "Asia/Hong_Kong"
logging:
options:
max-size: "10m"
max-file: "3"
gost:
depends_on:
- ssr
image: ginuerzh/gost
restart: always
network_mode: "bridge"
links:
- ssr
ports:
- "443:443/tcp"
- "443:443/udp"
command:
- "-L=mtls://:443/ssr:443"
logging:
options:
max-size: "10m"
max-file: "3"
这里利用 Docker 的桥接网络,没有将 SSR 进程的端口暴露给主机,而是利用桥接直接将流量转发到 SSR 的容器内。
落地鸡:
/usr/local/bin/gost -D -L "ws://:65432?path=/ws&rbuf=4096&wbuf=4096&compression=false"
中转鸡:
/usr/local/bin/gost -L=:本地端口/落地鸡ip:ssr端口 -F=ws://落地鸡ip或域名:65432/ws
本地鸡:
gost -L=http://:7575 -F=http2://user123:passwd123@xxx.com:1485?probe_resist=code:404&knock=x.xxx.com
主鸡:
gost -L="http2://user123:passwd123@:1485?probe_resist=code:404&knock=x.xxx.com" > /dev/null 2>&1