diff --git a/README.md b/README.md index 4e0e98b..d3daf29 100644 --- a/README.md +++ b/README.md @@ -2,80 +2,80 @@ Proxy是golang实现的高性能http,https,websocket,tcp,udp代理服务器,支持正向代理和反响代理(即:内网穿透). --- [![stable](https://img.shields.io/badge/stable-stable-green.svg)](https://github.com/snail007/goproxy/) [![license](https://img.shields.io/github/license/snail007/goproxy.svg?style=plastic)]() [![download_count](https://img.shields.io/github/downloads/snail007/goproxy/total.svg?style=plastic)](https://github.com/snail007/goproxy/releases) [![download](https://img.shields.io/github/release/snail007/goproxy.svg?style=plastic)](https://github.com/snail007/goproxy/releases) -### 0.生成加密通讯需要的证书文件 -http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件. -在linux上并安装了openssl命令,可以直接通过下面的命令生成证书和key文件. +### 0.生成加密通讯需要的证书文件 +http,tcp,udp代理过程会和上级通讯,为了安全我们采用加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件. +在linux上并安装了openssl命令,可以直接通过下面的命令生成证书和key文件. `./proxy keygen` -默认会使用程序相同目录下面的证书文件proxy.crt和key文件proxy.key。 -### 1.HTTP代理 -**1.1.普通HTTP代理** -`./proxy http -t tcp -p "0.0.0.0:38080"` -**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可以关闭连接池,0就是连接池大小,0为关闭. -`./proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -L 0` -我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如: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二级代理(加密)** -一级HTTP代理(VPS,IP:22.22.22.22) -`./proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key` -二级HTTP代理(本地) -`./proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` -那么访问本地的8080端口就是访问VPS上面的代理端口38080. -**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 -`./proxy http -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` -三级HTTP代理(本地) -`./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认证** -对于代理HTTP协议我们可以basic进行Basic认证,认证的用户名和密码可以在命令行指定 -`./proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"` -多个用户,重复-a参数即可. -也可以放在文件中,格式是一行一个"用户名:密码",然后用-F指定. -`./proxy http -t tcp -p ":33080" -F auth-file.txt` -如果没有-a或-F参数,就是关闭Basic认证. -**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.查看帮助** -`./proxy help http` +默认会使用程序相同目录下面的证书文件proxy.crt和key文件proxy.key。 +### 1.HTTP代理 +**1.1.普通HTTP代理** +`./proxy http -t tcp -p "0.0.0.0:38080"` +**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可以关闭连接池,0就是连接池大小,0为关闭. +`./proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" -L 0` +我们还可以指定网站域名的黑白名单文件,一行一个域名,怕匹配规则是最右批评匹配,比如: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二级代理(加密)** +一级HTTP代理(VPS,IP:22.22.22.22) +`./proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key` +二级HTTP代理(本地) +`./proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` +那么访问本地的8080端口就是访问VPS上面的代理端口38080. +**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 +`./proxy http -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` +三级HTTP代理(本地) +`./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认证** +对于代理HTTP协议我们可以basic进行Basic认证,认证的用户名和密码可以在命令行指定 +`./proxy http -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"` +多个用户,重复-a参数即可. +也可以放在文件中,格式是一行一个"用户名:密码",然后用-F指定. +`./proxy http -t tcp -p ":33080" -F auth-file.txt` +如果没有-a或-F参数,就是关闭Basic认证. +**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.查看帮助** +`./proxy help http` [图文教程](docs/faststart_v3.md) -### 2.TCP代理 -**1.普通一级TCP代理** -本地执行: -`./proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" -L 0` -那么访问本地33080端口就是访问192.168.22.33的22端口. -**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端口. -**3.普通三级TCP代理** -一级TCP代理VPS_01,IP:22.22.22.22 -`./proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"` -二级TCP代理VPS_02,IP:33.33.33.33 -`./proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"` -三级TCP代理(本地) -`./proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"` -那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口. -**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端口. -**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 -`./proxy tcp --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` -三级TCP代理(本地) -`./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.TCP代理 +**1.普通一级TCP代理** +本地执行: +`./proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" -L 0` +那么访问本地33080端口就是访问192.168.22.33的22端口. +**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端口. +**3.普通三级TCP代理** +一级TCP代理VPS_01,IP:22.22.22.22 +`./proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"` +二级TCP代理VPS_02,IP:33.33.33.33 +`./proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"` +三级TCP代理(本地) +`./proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"` +那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口. +**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端口. +**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 +`./proxy tcp --tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key` +三级TCP代理(本地) +`./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端口. **1.x.查看帮助** `./proxy help tcp` ### Features