Skip to content

Commit

Permalink
update socks5
Browse files Browse the repository at this point in the history
  • Loading branch information
ginuerzh committed Jun 23, 2024
1 parent 53b404a commit 0dd7dad
Show file tree
Hide file tree
Showing 3 changed files with 211 additions and 63 deletions.
70 changes: 54 additions & 16 deletions docs/tutorials/port-forwarding.md
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ comments: true

=== "命令行"
```bash
gost -L tcp://:8080/192.168.1.1:80,192.168.1.2:80,192.168.1.3:8080?strategy=round&maxFails=1&failTimeout=30s
gost -L "tcp://:8080/192.168.1.1:80,192.168.1.2:80,192.168.1.3:8080?strategy=round&maxFails=1&failTimeout=30s"
```
=== "配置文件"

Expand Down Expand Up @@ -73,9 +73,11 @@ comments: true
和TCP端口转发类似,也可以指定单个和多个目标转发地址。

=== "命令行"

```bash
gost -L udp://:10053/192.168.1.1:53,192.168.1.2:53,192.168.1.3:53?keepalive=true&ttl=5s
gost -L "udp://:10053/192.168.1.1:53,192.168.1.2:53,192.168.1.3:53?keepalive=true&ttl=5s&readBufferSize=4096"
```

=== "配置文件"

```yaml
Expand All @@ -89,6 +91,7 @@ comments: true
metadata:
keepAlive: true
ttl: 5s
readBufferSize: 4096
forwarder:
nodes:
- name: target-0
Expand All @@ -99,18 +102,25 @@ comments: true
addr: 192.168.1.3:53
```

每一个客户端对应一条转发通道,当`keepalive`参数设置为`false`时(默认情况),请求的响应数据返回给客户端后会立即关闭通道连接。
`keepalive` (bool, default=false)
: 每一个客户端对应一条转发通道,当`keepalive`参数设置为`false`时(默认情况),请求的响应数据返回给客户端后会立即关闭通道连接。

`ttl` (duration, default=5s)
: 当`keepalive`参数设置为`true`时,转发服务一定时间内收不到转发目标主机数据,此转发通道会被标记为空闲状态。转发服务内部会按照`ttl`参数(默认值5秒)指定的周期检查转发通道是否空闲,如果空闲则此通道将被关闭。一个空闲通道最多会在两个检查周期内被关闭。

`keepalive`参数设置为`true`时,转发服务一定时间内收不到转发目标主机数据,此转发通道会被标记为空闲状态。转发服务内部会按照`ttl`参数(默认值5秒)指定的周期检查转发通道是否空闲,如果空闲则此通道将被关闭。一个空闲通道最多会在两个检查周期内被关闭。
`readBufferSize` (int, default=4096)
: UDP读缓冲区大小,同时也是UDP数据包大小的上限,如果数据包大小超过此设定值,数据会被截断。

### 转发链

端口转发可以配合转发链进行间接转发。

=== "命令行"

```bash
gost -L=tcp://:8080/192.168.1.1:80 -F socks5://192.168.1.2:1080
gost -L tcp://:8080/192.168.1.1:80 -F socks5://192.168.1.2:1080
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -142,9 +152,11 @@ comments: true
将本地的TCP端口8080通过转发链映射到192.168.1.1的80端口。

=== "命令行"

```bash
gost -L=udp://:10053/192.168.1.1:53 -F socks5://192.168.1.2:1080
gost -L udp://:10053/192.168.1.1:53 -F socks5://192.168.1.2:1080
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -179,13 +191,17 @@ comments: true
当UDP本地端口转发中使用转发链时,转发链末端最后一个节点必须是以下类型:

* GOST HTTP代理服务并开启了UDP转发功能,采用UDP-over-TCP方式。
```

```bash
gost -L http://:8080?udp=true
```

* GOST SOCKS5代理服务并开启了UDP转发功能,采用UDP-over-TCP方式。
```

```bash
gost -L socks5://:1080?udp=true
```

* Relay服务,采用UDP-over-TCP方式。
* SSU服务。

Expand All @@ -197,9 +213,11 @@ comments: true
TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接转发

=== "命令行"

```bash
gost -L=tcp://:8080/192.168.1.1:80 -F sshd://user:pass@192.168.1.2:22
gost -L tcp://:8080/192.168.1.1:80 -F sshd://user:[email protected]:22
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -234,10 +252,13 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
这里的192.168.1.2:22服务可以是系统本身的标准SSH服务,也可以是GOST的sshd类型服务

=== "命令行"
```

```bash
gost -L sshd://user:pass@:22
```

=== "配置文件"

```yaml
services:
- name: service-0
Expand All @@ -256,9 +277,11 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
### TCP

=== "命令行"

```bash
gost -L rtcp://:8080/192.168.1.1:80
```

=== "配置文件"

```yaml
Expand All @@ -280,9 +303,11 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
### UDP

=== "命令行"

```bash
gost -L rudp://:10053/192.168.1.1:53,192.168.1.2:53,192.168.1.3:53?ttl=5s
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -311,9 +336,11 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
### 转发链

=== "命令行"

```bash
gost -L=rtcp://:8080/192.168.1.1:80 -F socks5://192.168.1.2:1080
gost -L rtcp://:8080/192.168.1.1:80 -F socks5://192.168.1.2:1080
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -345,9 +372,11 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
根据rtcp服务指定的地址,通过转发链在主机192.168.1.2上监听8080TCP端口。当收到请求后再通过转发链将数据转发给rtcp服务,rtcp服务再将请求转发到192.168.1.1:80端口。

=== "命令行"

```bash
gost -L=rudp://:10053/192.168.1.1:53 -F socks5://192.168.1.2:1080
gost -L rudp://:10053/192.168.1.1:53 -F socks5://192.168.1.2:1080
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -388,11 +417,14 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
当远程端口转发中使用转发链时,转发链末端最后一个节点必须是以下类型:

* GOST SOCKS5代理服务并开启了BIND功能,采用UDP-over-TCP方式。
```

```bash
gost -L socks5://:1080?bind=true
```

* Relay服务并开启了BIND功能,采用UDP-over-TCP方式。
```

```bash
gost -L relay://:8421?bind=true
```

Expand All @@ -401,9 +433,11 @@ TCP端口转发可以借助于标准SSH协议的端口转发功能进行间接
TCP远程端口转发可以借助于标准SSH协议的远程端口转发功能进行间接转发

=== "命令行"

```bash
gost -L=rtcp://:8080/192.168.1.1:80 -F sshd://user:pass@192.168.1.2:22
gost -L rtcp://:8080/192.168.1.1:80 -F sshd://user:[email protected]:22
```

=== "配置文件"

```yaml
Expand Down Expand Up @@ -492,9 +526,11 @@ services:
### 服务端
=== "命令行"
```bash
gost -L tls://:8443/192.168.1.1:80
```

=== "配置文件"

```yaml
Expand All @@ -513,9 +549,11 @@ services:
### 客户端

=== "命令行"

```bash
gost -L=tcp://:8080 -F forward+tls://:8443
gost -L tcp://:8080 -F forward+tls://:8443
```

=== "配置文件"

```yaml
Expand Down
102 changes: 88 additions & 14 deletions docs/tutorials/protocols/socks.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,10 +37,6 @@ GOST完整的实现了SOCKS5协议的所有功能,包括[RFC1928](https://www.
```bash
gost -L socks5://user:pass@:1080
```
```bash
gost -L socks://user:pass@:1080
```

=== "配置文件"

Expand All @@ -50,10 +46,9 @@ GOST完整的实现了SOCKS5协议的所有功能,包括[RFC1928](https://www.
addr: :1080
handler:
type: socks5
# type: socks
auth:
username: user
password: pass
auth:
username: user
password: pass
listener:
type: tcp
```
Expand Down Expand Up @@ -89,10 +84,12 @@ BIND功能在服务端默认是禁用状态,可以通过`bind`选项来开启

UDP中转功能在服务端默认是禁用状态,可以通过`udp`选项来开启此功能。

**服务端**

=== "命令行"

```bash
gost -L socks5://user:pass@:1080?udp=true
gost -L "socks5://:1080?udp=true&udpBufferSize=4096"
```

=== "配置文件"
Expand All @@ -103,15 +100,92 @@ UDP中转功能在服务端默认是禁用状态,可以通过`udp`选项来开
addr: :1080
handler:
type: socks5
auth:
username: user
password: pass
metadata:
udp: true
udpBufferSize: 4096
listener:
type: tcp
```

`udp` (bool, default=false)
: 开启UDP中转功能,默认禁用。

`udpBufferSize` (int, default=4096)
: UDP缓冲区大小。最小值为:最大UDP包大小+10,否则数据中转会失败。

**客户端**

=== "命令行"

```bash
gost -L udp://:1053/:53 -F "socks5://:1080?relay=udp&udpBufferSize=4096"
```

=== "配置文件"

```yaml
services:
- name: service-0
addr: :1053
handler:
type: udp
chain: chain-0
listener:
type: udp
forwarder:
nodes:
- name: target-0
addr: :53
chains:
- name: chain-0
hops:
- name: hop-0
nodes:
- name: node-0
addr: :1080
connector:
type: socks5
metadata:
relay: udp
udpBufferSize: 4096
dialer:
type: tcp
```

`relay` (bool, default=false)
: 使用标准的UDP中转方式传输数据,默认使用UDP-TUN(UDP-Over-TCP tunnel)方式。

`udpBufferSize` (int, default=4096)
: UDP缓冲区大小。最小值为:最大UDP包大小+10,否则数据中转会失败。

#### iperf测试

可以通过iperf3来测试UDP中转功能。

开启iperf3服务

```bash
iperf3 -s
```

开启标准SOCKS5服务(也可以使用其他支持UDP中转的SOCKS5服务)

```bash
gost -L "socks5://:1080?notls=true&udp=true&udpBufferSize=65535"
```

开启端口转发

```bash
gost -L "tcp://:15201/:5201" -L "udp://:15201/:5201?keepalive=true&readBufferSize=65535" -F "socks5://:1080?relay=udp&udpBufferSize=65535"
```

执行perf3客户端测试

```bash
iperf3 -c 127.0.0.1 -p 15201 -u
```

### 扩展功能

GOST在标准SOCKS5协议基础之上增加了一些扩展功能。
Expand Down Expand Up @@ -202,7 +276,7 @@ GOST对BIND方法进行了扩展,增加了支持多路复用的BIND方法(0xF2
- name: node-0
addr: :1080
connector:
type: socks
type: socks5
dialer:
type: tcp
```
Expand Down Expand Up @@ -264,7 +338,7 @@ GOST对UDP中转方法进行了扩展,增加了UDP-Over-TCP方法(0xF3),此
- name: node-0
addr: :1080
connector:
type: socks
type: socks5
dialer:
type: tcp
```
Expand Down
Loading

0 comments on commit 0dd7dad

Please sign in to comment.