Signed-off-by: arraykeys@gmail.com <arraykeys@gmail.com>
This commit is contained in:
95
README.md
95
README.md
@ -36,12 +36,15 @@ Proxy是golang实现的高性能http,https,websocket,tcp,udp,socks5代理服务
|
||||
1. [手动安装](#手动安装)
|
||||
1. [教程必看](#使用教程)
|
||||
1. [使用配置文件](#使用配置文件)
|
||||
1. [生成通讯证书文件](#0_生成加密通讯需要的证书文件)
|
||||
1. [生成通讯证书文件](#0生成加密通讯需要的证书文件)
|
||||
1. [HTTP](#0生成加密通讯需要的证书文件)
|
||||
1. [生成通讯证书文件](#0生成加密通讯需要的证书文件)
|
||||
|
||||
|
||||
### Fast Start
|
||||
提示:所有操作需要root权限.
|
||||
#### 自动安装
|
||||
**0.如果你的VPS是linux64位的系统,那么只需要执行下面一句,就可以完成自动安装和配置.**
|
||||
#### **0.如果你的VPS是linux64位的系统,那么只需要执行下面一句,就可以完成自动安装和配置.**
|
||||
```shell
|
||||
curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.sh | bash
|
||||
```
|
||||
@ -49,7 +52,7 @@ curl -L https://raw.githubusercontent.com/snail007/goproxy/master/install_auto.s
|
||||
如果安装失败或者你的vps不是linux64位系统,请按照下面的半自动步骤安装:
|
||||
|
||||
#### 手动安装
|
||||
**1.登录你的VPS,下载守护进程monexec,选择合适你的版本,vps一般选择"linux_amd64.tar.gz"的即可.**
|
||||
#### **1.登录你的VPS,下载守护进程monexec,选择合适你的版本,vps一般选择"linux_amd64.tar.gz"的即可.**
|
||||
下载地址:https://github.com/reddec/monexec/releases
|
||||
比如下载到/root/proxy/
|
||||
执行:
|
||||
@ -58,13 +61,13 @@ mkdir /root/proxy/
|
||||
cd /root/proxy/
|
||||
wget https://github.com/reddec/monexec/releases/download/v0.1.1/monexec_0.1.1_linux_amd64.tar.gz
|
||||
```
|
||||
**2.下载proxy**
|
||||
#### **2.下载proxy**
|
||||
下载地址:https://github.com/snail007/goproxy/releases
|
||||
```shell
|
||||
cd /root/proxy/
|
||||
wget https://github.com/snail007/goproxy/releases/download/v3.1fix/proxy-linux-amd64.tar.gz
|
||||
```
|
||||
**3.下载自动安装脚本**
|
||||
#### **3.下载自动安装脚本**
|
||||
```shell
|
||||
cd /root/proxy/
|
||||
wget https://raw.githubusercontent.com/snail007/goproxy/master/install.sh
|
||||
@ -74,7 +77,7 @@ chmod +x install.sh
|
||||
|
||||
## 使用教程
|
||||
|
||||
**提示**
|
||||
#### **提示**
|
||||
接下来的教程,默认系统是linux,程序是proxy;所有操作需要root权限;
|
||||
如果你的是windows,请使用windows版本的proxy.exe即可.
|
||||
|
||||
@ -97,10 +100,10 @@ http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,
|
||||
默认会在当前程序目录下面生成证书文件proxy.crt和key文件proxy.key。
|
||||
|
||||
### 1.HTTP代理
|
||||
**1.1.普通HTTP代理**
|
||||
#### **1.1.普通HTTP代理**
|
||||
`./proxy http -t tcp -p "0.0.0.0:38080"`
|
||||
|
||||
**1.2.普通二级HTTP代理**
|
||||
#### **1.2.普通二级HTTP代理**
|
||||
使用本地端口8090,假设上级HTTP代理是`22.22.22.22:8080`
|
||||
`./proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" `
|
||||
默认关闭了连接池,如果要加快访问速度,-L可以开启连接池,10就是连接池大小,0为关闭,
|
||||
@ -109,7 +112,7 @@ http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,
|
||||
我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如:baidu.com,匹配的是*.*.baidu.com,黑名单的域名域名直接走上级代理,白名单的域名不走上级代理.
|
||||
`./proxy http -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt`
|
||||
|
||||
**1.3.HTTP二级代理(加密)**
|
||||
#### **1.3.HTTP二级代理(加密)**
|
||||
一级HTTP代理(VPS,IP:22.22.22.22)
|
||||
`./proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||
|
||||
@ -121,7 +124,7 @@ http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,
|
||||
`./proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||
|
||||
**1.4.HTTP三级代理(加密)**
|
||||
#### **1.4.HTTP三级代理(加密)**
|
||||
一级HTTP代理VPS_01,IP:22.22.22.22
|
||||
`./proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||
二级HTTP代理VPS_02,IP:33.33.33.33
|
||||
@ -130,7 +133,7 @@ http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,
|
||||
`./proxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地的8080端口就是访问一级HTTP代理上面的代理端口38080.
|
||||
|
||||
**1.5.Basic认证**
|
||||
#### **1.5.Basic认证**
|
||||
对于代理HTTP协议我们可以basic进行Basic认证,认证的用户名和密码可以在命令行指定
|
||||
`./proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
||||
多个用户,重复-a参数即可.
|
||||
@ -138,42 +141,42 @@ http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,
|
||||
`./proxy http -t tcp -p ":33080" -F auth-file.txt`
|
||||
如果没有-a或-F参数,就是关闭Basic认证.
|
||||
|
||||
**1.6.HTTP代理流量强制走上级HTTP代理**
|
||||
#### **1.6.HTTP代理流量强制走上级HTTP代理**
|
||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级HTTP代理.通过--always可以使全部HTTP代理流量强制走上级HTTP代理.
|
||||
`./proxy http --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||
|
||||
**1.7.HTTP(S)通过SSH中转**
|
||||
#### **1.7.HTTP(S)通过SSH中转**
|
||||
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址.
|
||||
假设有:vps
|
||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||
- 用户user的ssh私钥名称是user.key
|
||||
|
||||
***1.7.1 ssh用户名和密码的方式***
|
||||
##### ***1.7.1 ssh用户名和密码的方式***
|
||||
本地HTTP(S)代理28080端口,执行:
|
||||
`./proxy http -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":28080"`
|
||||
***1.7.2 ssh用户名和密钥的方式***
|
||||
##### ***1.7.2 ssh用户名和密钥的方式***
|
||||
本地HTTP(S)代理28080端口,执行:
|
||||
`./proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"`
|
||||
|
||||
**1.8.查看帮助**
|
||||
#### **1.8.查看帮助**
|
||||
`./proxy help http`
|
||||
|
||||
|
||||
### 2.TCP代理
|
||||
|
||||
**2.1.普通一级TCP代理**
|
||||
#### **2.1.普通一级TCP代理**
|
||||
本地执行:
|
||||
`./proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" -L 0`
|
||||
那么访问本地33080端口就是访问192.168.22.33的22端口.
|
||||
|
||||
**2.2.普通二级TCP代理**
|
||||
#### **2.2.普通二级TCP代理**
|
||||
VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0`
|
||||
本地执行:
|
||||
`./proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"`
|
||||
那么访问本地23080端口就是访问22.22.22.33的8080端口.
|
||||
|
||||
**2.3.普通三级TCP代理**
|
||||
#### **2.3.普通三级TCP代理**
|
||||
一级TCP代理VPS_01,IP:22.22.22.22
|
||||
`./proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080" -L 0`
|
||||
二级TCP代理VPS_02,IP:33.33.33.33
|
||||
@ -182,14 +185,14 @@ VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"`
|
||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.
|
||||
|
||||
**2.4.加密二级TCP代理**
|
||||
#### **2.4.加密二级TCP代理**
|
||||
VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp --tls -p ":33080" -T tcp -P "127.0.0.1:8080" -L 0 -C proxy.crt -K proxy.key`
|
||||
本地执行:
|
||||
`./proxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口.
|
||||
|
||||
**2.5.加密三级TCP代理**
|
||||
#### **2.5.加密三级TCP代理**
|
||||
一级TCP代理VPS_01,IP:22.22.22.22
|
||||
`./proxy tcp --tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
||||
二级TCP代理VPS_02,IP:33.33.33.33
|
||||
@ -198,24 +201,24 @@ VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口.
|
||||
|
||||
**2.6.查看帮助**
|
||||
#### **2.6.查看帮助**
|
||||
`./proxy help tcp`
|
||||
|
||||
### 3.UDP代理
|
||||
|
||||
**3.1.普通一级UDP代理**
|
||||
#### **3.1.普通一级UDP代理**
|
||||
本地执行:
|
||||
`./proxy udp -p ":5353" -T udp -P "8.8.8.8:53"`
|
||||
那么访问本地UDP:5353端口就是访问8.8.8.8的UDP:53端口.
|
||||
|
||||
**3.2.普通二级UDP代理**
|
||||
#### **3.2.普通二级UDP代理**
|
||||
VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"`
|
||||
本地执行:
|
||||
`./proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"`
|
||||
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.
|
||||
|
||||
**3.3.普通三级UDP代理**
|
||||
#### **3.3.普通三级UDP代理**
|
||||
一级TCP代理VPS_01,IP:22.22.22.22
|
||||
`./proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"`
|
||||
二级TCP代理VPS_02,IP:33.33.33.33
|
||||
@ -224,14 +227,14 @@ VPS(IP:22.22.22.33)执行:
|
||||
`./proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"`
|
||||
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口.
|
||||
|
||||
**3.4.加密二级UDP代理**
|
||||
#### **3.4.加密二级UDP代理**
|
||||
VPS(IP:22.22.22.33)执行:
|
||||
`./proxy tcp --tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||
本地执行:
|
||||
`./proxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口.
|
||||
|
||||
**3.5.加密三级UDP代理**
|
||||
#### **3.5.加密三级UDP代理**
|
||||
一级TCP代理VPS_01,IP:22.22.22.22
|
||||
`./proxy tcp --tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||
二级TCP代理VPS_02,IP:33.33.33.33
|
||||
@ -240,11 +243,11 @@ VPS(IP:22.22.22.33)执行:
|
||||
`./proxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地5353端口就是通过加密TCP隧道,通过VPS_01访问8.8.8.8的53端口.
|
||||
|
||||
**3.6.查看帮助**
|
||||
#### **3.6.查看帮助**
|
||||
`./proxy help udp`
|
||||
|
||||
### 4.内网穿透
|
||||
**4.1、原理说明**
|
||||
#### **4.1、原理说明**
|
||||
内网穿透,由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接.
|
||||
当用户访问server端,流程是:
|
||||
1. server主动和bridge端建立连接;
|
||||
@ -253,7 +256,7 @@ VPS(IP:22.22.22.33)执行:
|
||||
1. 然后bridge端把client过来的连接与server端过来的连接绑定;
|
||||
1. 整个通道建立完成;
|
||||
|
||||
**4.2、TCP普通用法**
|
||||
#### **4.2、TCP普通用法**
|
||||
背景:
|
||||
- 公司机器A提供了web服务80端口
|
||||
- 有VPS一个,公网IP:22.22.22.22
|
||||
@ -272,7 +275,7 @@ VPS(IP:22.22.22.33)执行:
|
||||
|
||||
1. 完成
|
||||
|
||||
**4.3、微信接口本地开发**
|
||||
#### **4.3、微信接口本地开发**
|
||||
背景:
|
||||
- 自己的笔记本提供了nginx服务80端口
|
||||
- 有VPS一个,公网IP:22.22.22.22
|
||||
@ -294,7 +297,7 @@ VPS(IP:22.22.22.33)执行:
|
||||
|
||||
1. 完成
|
||||
|
||||
**4.4、UDP普通用法**
|
||||
#### **4.4、UDP普通用法**
|
||||
背景:
|
||||
- 公司机器A提供了DNS解析服务,UDP:53端口
|
||||
- 有VPS一个,公网IP:22.22.22.22
|
||||
@ -312,7 +315,7 @@ VPS(IP:22.22.22.33)执行:
|
||||
|
||||
1. 完成
|
||||
|
||||
**4.5、高级用法一**
|
||||
#### **4.5、高级用法一**
|
||||
背景:
|
||||
- 公司机器A提供了web服务80端口
|
||||
- 有VPS一个,公网IP:22.22.22.22
|
||||
@ -333,7 +336,7 @@ VPS(IP:22.22.22.33)执行:
|
||||
|
||||
1. 完成
|
||||
|
||||
**4.6、高级用法二**
|
||||
#### **4.6、高级用法二**
|
||||
提示:
|
||||
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
|
||||
只要在同一个bridge上唯一即可.
|
||||
@ -358,7 +361,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
||||
|
||||
1. 完成
|
||||
|
||||
**4.7.tserver的-r参数**
|
||||
#### **4.7.tserver的-r参数**
|
||||
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
||||
|
||||
4.7.1.协议PROTOCOL:tcp或者udp.
|
||||
@ -373,23 +376,23 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
||||
|
||||
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
||||
|
||||
**4.8.查看帮助**
|
||||
#### **4.8.查看帮助**
|
||||
`./proxy help tbridge`
|
||||
`./proxy help tserver`
|
||||
`./proxy help tserver`
|
||||
|
||||
### 5.SOCKS5代理
|
||||
提示:SOCKS5代理,只支持TCP协议,不支持UDP协议,不支持用户名密码认证.
|
||||
**5.1.普通SOCKS5代理**
|
||||
#### **5.1.普通SOCKS5代理**
|
||||
`./proxy socks -t tcp -p "0.0.0.0:38080"`
|
||||
|
||||
**5.2.普通二级SOCKS5代理**
|
||||
#### **5.2.普通二级SOCKS5代理**
|
||||
使用本地端口8090,假设上级SOCKS5代理是`22.22.22.22:8080`
|
||||
`./proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" `
|
||||
我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如:baidu.com,匹配的是*.*.baidu.com,黑名单的域名域名直接走上级代理,白名单的域名不走上级代理.
|
||||
`./proxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -b blocked.txt -d direct.txt`
|
||||
|
||||
**5.3.SOCKS二级代理(加密)**
|
||||
#### **5.3.SOCKS二级代理(加密)**
|
||||
一级SOCKS代理(VPS,IP:22.22.22.22)
|
||||
`./proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||
|
||||
@ -401,7 +404,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
||||
`./proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||
|
||||
**5.4.SOCKS三级代理(加密)**
|
||||
#### **5.4.SOCKS三级代理(加密)**
|
||||
一级SOCKS代理VPS_01,IP:22.22.22.22
|
||||
`./proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||
二级SOCKS代理VPS_02,IP:33.33.33.33
|
||||
@ -410,26 +413,26 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
||||
`./proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key`
|
||||
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080.
|
||||
|
||||
**5.5.SOCKS代理流量强制走上级SOCKS代理**
|
||||
#### **5.5.SOCKS代理流量强制走上级SOCKS代理**
|
||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级SOCKS代理.通过--always可以使全部SOCKS代理流量强制走上级SOCKS代理.
|
||||
`./proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key`
|
||||
|
||||
**5.6.SOCKS通过SSH中转**
|
||||
#### **5.6.SOCKS通过SSH中转**
|
||||
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址.
|
||||
假设有:vps
|
||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||
- 用户user的ssh私钥名称是user.key
|
||||
|
||||
***5.6.1 ssh用户名和密码的方式***
|
||||
##### ***5.6.1 ssh用户名和密码的方式***
|
||||
本地SOCKS5代理28080端口,执行:
|
||||
`./proxy socks -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":28080"`
|
||||
***5.6.2 ssh用户名和密钥的方式***
|
||||
##### ***5.6.2 ssh用户名和密钥的方式***
|
||||
本地SOCKS5代理28080端口,执行:
|
||||
`./proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"`
|
||||
|
||||
那么访问本地的28080端口就是通过VPS访问目标地址.
|
||||
|
||||
**5.7.认证**
|
||||
#### **5.7.认证**
|
||||
对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
|
||||
`./proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
||||
多个用户,重复-a参数即可.
|
||||
@ -437,7 +440,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个brid
|
||||
`./proxy socks -t tcp -p ":33080" -F auth-file.txt`
|
||||
如果没有-a或-F参数,就是关闭认证.
|
||||
|
||||
**5.8.查看帮助**
|
||||
#### **5.8.查看帮助**
|
||||
`./proxy help socks`
|
||||
|
||||
### TODO
|
||||
|
||||
Reference in New Issue
Block a user