diff --git a/README.md b/README.md index cf4d75b..2a71d11 100644 --- a/README.md +++ b/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