GOPROXY简介


国内下载

https://mirrors.host900.com/
v10.4
https://github.com/snail007/goproxy/releases/download/v10.4/proxy-linux-amd64.tar.gz

那么国内下载地址就是:

https://mirrors.host900.com/https://github.com/snail007/goproxy/releases/download/v10.4/proxy-linux-amd64.tar.gz

此地址也适用于wget,curl直接命令行下载。

ProxyAdmin介绍预览(这不是goproxy,是控制面板友情链接;安装使用goproxy请往下看,谢谢!)

ProxyAdmin

goproxy能干什么?

  • 链式代理,程序本身可以作为一级代理,如果设置了上级代理那么可以作为二级代理,乃至N级代理。
  • 通讯加密,如果程序不是一级代理,而且上级代理也是本程序,那么可以加密和上级代理之间的通讯,采用底层tls高强度加密,安全无特征。
  • 智能HTTP代理,HTTPS代理,SOCKS5代理,会自动判断访问的网站是否屏蔽,如果被屏蔽那么就会使用上级代理(前提是配置了上级代理)访问网站;如果访问的网站没有被屏蔽,为了加速访问,代理会直接访问网站,不使用上级代理。
  • 域名黑白名单,更加自由的控制网站的访问方式。
  • 跨平台性,无论你是windows,linux,还是mac,甚至是树莓派,都可以很好的运行proxy。
  • 多协议支持,支持HTTP(S),TCP,UDP,Websocket,SOCKS5代理。
  • TCP/UDP端口转发。
  • 游戏盾,游戏代理,高防服务器。
  • 内网穿透,P2P传输,协议支持TCP和UDP,针对HTTP的优化穿透。
  • SSH中转,HTTP(S),SOCKS5代理支持SSH中转,上级Linux服务器不需要任何服务端,本地一个proxy即可开心上网。
  • KCP协议支持,HTTP(S),SOCKS5代理支持KCP协议传输数据,降低延迟,提升浏览体验。
  • 动态选择上级代理,通过外部API,HTTP(S),SOCKS5,SPS代理可以实现基于用户或者IP的限速,连接数限制,动态获取上级。
  • 灵活的上级分配,HTTP(S),SOCKS5,SPS代理可以通过配置文件实现基于用户或者IP的限速,连接数限制,指定上级。
  • 反向代理,支持直接把域名解析到proxy监听的ip,然后proxy就会帮你代理访问需要访问的HTTP(S)网站。
  • 透明HTTP(S)代理,配合iptables,在网关直接把出去的80,443方向的流量转发到proxy,就能实现无感知的智能路由器代理。
  • 协议转换,可以把已经存在的HTTP(S)或SOCKS5或SS代理转换为一个端口同时支持HTTP(S)和SOCKS5和SS代理,转换后的SOCKS5和SS代理如果上级是SOCKS5代理,那么支持UDP功能,同时支持强大的级联认证功能。
  • 自定义底层加密传输,http(s)\sps\socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可。
  • 底层压缩高效传输,http(s)\sps\socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在加密之后还可以对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的。
  • 安全的DNS代理,可以通过本地的proxy提供的DNS代理服务器与上级代理加密通讯实现安全防污染的DNS查询。
  • 负载均衡,高可用,HTTP(S)\SOCKS5\SPS代理支持上级负载均衡和高可用,多个上级重复-P参数即可。
  • 指定出口IP,HTTP(S)\SOCKS5\SPS代理支持客户端用入口IP连接过来的,就用入口IP作为出口IP访问目标网站的功能。如果入口IP是内网IP,出口IP不会使用入口IP
  • 支持限速,HTTP(S)\SOCKS5\SPS\TCP代理支持限速。
  • 支持限连接数,HTTP(S)\SOCKS5\SPS\TCP代理支持限连接数。
  • SOCKS5代理支持级联认证。
  • 证书参数使用base64数据,默认情况下-C,-K参数是crt证书和key文件的路径,如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
  • 支持客户端IP黑白名单,更加安全的控制客户端对代理服务的访问,如果黑白名单同时设置,那么只有白名单生效。socks/http(s)/sps/tcp/udp/dns/内网穿透bridge/内网穿透tbridge,都支持客户端IP黑白名单。
  • 端口范围批量监听,HTTP(S)\SOCKS5\SPS\TCP代理支持指定端口范围监听,避免启动过多进程,提高性能。

为什么需要它?

  • 当由于某某原因,我们不能访问我们在其它地方的服务,我们可以通过多个相连的proxy节点建立起一个安全的隧道访问我们的服务。
  • 微信接口本地开发,方便调试。
  • 远程访问内网机器。
  • 和小伙伴一起玩局域网游戏。
  • 以前只能在局域网玩的,现在可以在任何地方玩。
  • 替代圣剑内网通,显IP内网通,花生壳之类的工具。
  • 有大量IP资源,想变现,对外提供IP代理服务。
  • 有大量拨号VPS,想对外提供IP代理服务。
  • 公司安全要求,审计员工对互联网的访问。
  • 想要一个高性能稳定的,认证功能齐全的代理服务。
  • 想一个固定入口,实现动态IP出口。
  • ..。

本页手册适用于最新版goproxy,其他版本可能有的地方不再适用,请自己根据命令帮助使用。

加入组织

下载安装 goproxy

快速安装 goproxy

如果你的VPS是linux64位的系统,那么只需要执行下面一句,就可以完成自动安装和配置.

提示:所有操作需要root权限。

免费版执行这个:

商业版执行这个:

安装完成,配置目录是/etc/proxy,更详细的使用方法请参考上面的手册目录,进一步了解你想要使用的功能。
如果安装失败或者你的vps不是linux64位系统,请按照下面的半自动步骤安装:

手动安装 goproxy

1.下载goproxy

根据你的平台和CPU类型选择,下载地址: https://github.com/snail007/goproxy/releases ,

proxy-linux-amd64.tar.gzv10.4

免费版执行这个:

商业版执行这个:

2.下载自动安装脚本

免费版执行这个:

商业版执行这个:

升级更新

Linux

root./proxyproxy

已经安装了最新的版本,默认不会更新,如果想强制更新加上 -f 参数即可。

Windows

管理员

已经安装了最新的版本,默认不会更新,如果想强制更新加上 -f 参数即可。

TODO

  • http,socks代理多个上级负载均衡?
  • http(s)代理增加pac支持?
  • 欢迎加群反馈..。

License

Proxy is licensed under GPLv3 license。

Contact

官方QQ交流群: 608062193

Donation

如果proxy帮助你解决了很多问题,你可以通过下面的捐赠更好的支持proxy。

源代码申明

arraykeys@gmail.com

goproxy使用手册

如何安装

1. Linux安装

2. 苹果Mac系统安装

3. Windows安装

为了方便操作,推荐Windows用户使用proxy-admin面板,点击查看Windows安装教程

当然你也可以使用命令行goproxy点击查看手动安装

4. 其它平台安装

免费版、商业版说明

proxyadmin商业版goproxy商业版
goproxy免费版proxyadmin 免费版proxyadmin VIP版 err : unknown short flag '-a'

以下软件都是相互独立使用,没有依赖关系,需要购买的也是分别单独购买使用。

goproxy 商业版
免费版商业版

提示:

手册功能首次安装配置

FAQ

首次使用必看,谢谢!!!

1. 环境

该手册教程,默认系统是linux,程序是proxy;所有操作需要root权限;

如果你的是windows,请使用windows版本的proxy.exe即可。

2. 使用配置文件

接下来的教程都是通过命令行参数介绍使用方法,也可以通过读取配置文件获取参数。

具体格式是通过@符号指定配置文件,例如:proxy @configfile.txt

configfile.txt里面的格式是,第一行是子命令名称,第二行开始一行一个参数,

参数 参数值

比如configfile.txt内容如下:

3. 调试输出

默认情况下,日志输出的信息不包含文件行数,某些情况下为了排除程序问题,快速定位问题,

可以使用--debug参数,输出代码行数和毫秒时间。

4. 使用日志文件

默认情况下,日志是直接在控制台显示出来的,如果要保存到文件,可以使用--log参数,

比如: --log proxy.log,日志就会输出到proxy.log方便排除问题。

--warn

5. 生成加密通讯需要的证书文件

http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。

所有端必须使用相同的proxy.crt和proxy.key

proxy keygen -C proxy
proxy keygen -s -C proxy -c goproxy
-n test.com
proxy keygen --help

6. 后台运行

默认执行proxy之后,如果要保持proxy运行,不能关闭命令行。

如果想在后台运行proxy,命令行可以关闭,只需要在命令最后加上--daemon参数即可。

比如:

proxy http -t tcp -p "0.0.0.0:38080" --daemon

7. 守护运行

proxy http --forever

proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程。

该参数配合后台运行参数--daemon和日志参数--log,可以保障proxy一直在后台执行不会因为意外退出,

而且可以通过日志文件看到proxy的输出日志内容。

proxy http -p ":9090" --forever --log proxy.log --daemon

8. 安全建议

当VPS在nat设备后面,vps上网卡IP都是内网IP,这个时候可以通过-g参数添加vps的外网ip防止死循环。

假设你的vps外网ip是23.23.23.23,下面命令通过-g参数设置23.23.23.23

proxy http -g "23.23.23.23"

9. 负载均衡和高可用

HTTP(S)\SOCKS5\SPS\TCP代理支持上级负载均衡和高可用,多个上级重复-P参数即可。

--lb-method

roundrobin 轮流使用

leastconn 使用最小连接数的

leasttime 使用连接时间最小的

hash 使用根据客户端地址计算出一个固定上级

weight 根据每个上级的权重和连接数情况,选择出一个上级

提示:

--lb-retrytime
--lb-timeout

3.如果负载均衡策略是权重(weight),-P格式为:2.2.2.2:3880?w=1,1就是权重,大于0的整数。

--lb-hashtarget
--lb-hashtarget
--lb-onlyha

7.如果检查节点全部不再存活,那么每次连接都会随机选取一个节点使用.

10. 代理跳板跳转

http(s)代理,SPS代理,内网穿透,tcp代理都支持通过中间第三方代理连接上级,

参数是:--jumper,所有格式如下:

http,socks5代表的是普通的http和socks5代理。

https,socks5s代表的是通过tls保护的http和socks5代理,

也就是http代理 over TLS , socks over TLS。

11. 域名黑白名单

socks/http(s)/sps代理都支持域名黑白名单。

用--stop参数指定一个域名黑名单列表文件,那么当用户连接文件里面这些域名的时候连接就会被断开。

用--only参数指定一个域名白名单列表文件,那么当用户连接文件里面这些域名之外的域名的时候连接就会被断开。

如果同时设置了--stop和--only,那么只有--only会起作用。

黑白域名名单文件内容格式如下:

说明:

*?*?
**.baidu.com.baidu.com
*.taobao.com.taobao.com

4.还可以直接是IP地址。

#

12. 客户端IP黑白名单

socks/http(s)/sps/tcp/udp/dns/内网穿透bridge/内网穿透tbridge,都支持客户端IP黑白名单。

用--ip-deny参数指定一个客户端IP黑名单列表文件,那么当用户的IP在这个文件里面的时候连接就会被断开。

用--ip-allow参数指定一个客户端IP白名单列表文件,那么当用户的IP不在这个文件里面的时候连接就会被断开。

如果同时设置了--ip-deny和--ip-allow,那么只有--ip-allow会起作用。

客户端IP黑白名单文件内容格式如下:

说明:

*?*?
#

13. 协议加载文件

proxy的各种代理功能里面很多地方都有参数设置一个文件,比如:--blocked 指定一个直接走上级的域名列表文件,参数值是文件的路径,

如果参数支持协议加载文件,那么文件路径不仅可以是文件路径,还可以是:

a.“base64://”开头的base64编码的上面说明的文件内容,比如:base64://ajfpoajsdfa=

b.”str://“开头的英文逗号分割的多个,比如:str://xxx,yyy

proxy的blocked,direct,stop,only,hosts,resolve.rules,rewriter.rules,ip.allow,ip.deny 文件支持协议加载。

14. 客户端并发连接数

--max-conns-rate

15 监听多个端口

tcp/http/socks/sps-p 0.0.0.0:80,0.0.0.0:443,0.0.0.0:8000-9000,:5000-6000

1.HTTP代理

1.1.普通一级HTTP代理

1.1

proxy http -t tcp -p "0.0.0.0:38080"

-p参数支持的写法:

1.2.普通二级HTTP代理

1.2

22.22.22.22:8080
proxy http -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" 

我们还可以指定网站域名的黑白名单文件,一行一个域名,匹配规则是最右匹配,比如: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二级代理(加密)

proxy.crtproxy.key
proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key
proxy http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key
proxy.exe http -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key

1.4.HTTP三级代理(加密)

proxy http -t tls -p ":38080" -C proxy.crt -K proxy.keyproxy http -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.keyproxy http -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key

1.5.Basic认证,API认证

9.API认证10.本地认证

1.6.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
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
假设有:vps

  • IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
  • 用户user的ssh私钥名称是user.key

1.7.1 ssh用户名和密码的方式

proxy http -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":28080"

1.7.2 ssh用户名和密钥的方式

proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"

1.8.KCP协议传输

1.8
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据

proxy http -t kcp -p ":38080" --kcp-key mypassword
proxy http -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword

1.9 HTTP(S)反向代理

1.9
proxy不仅支持在其他软件里面通过设置代理的方式,为其他软件提供代理服务,而且支持直接把请求的网站域名解析到proxy监听的ip上,然后proxy监听80和443端口,那么proxy就会自动为你代理访问需要访问的HTTP(S)网站。

proxy http -t tcp -p :80,:443

这个命令就在机器上启动了一个proxy代理,同时监听80和443端口,既可以当作普通的代理使用,也可以直接把需要代理的域名解析到这个机器的IP上。

proxy http -t tcp -p :80,:443 -T tls -P "2.2.2.2:33080" -C proxy.crt -K proxy.key
--dns-address 8.8.8.8

1.10 HTTP(S)透明代理

proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key

然后添加iptables规则,下面是参考规则:

  • 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
  • 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X PROXY
  • 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN

1.11 自定义DNS

proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300
--dns-address

1.12 自定义加密

proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义
加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
自定义加密要求两端都是proxy才可以,下面分别用二级,三级为例:

二级实例

proxy http -t tcp -z demo_password -p :7777proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080

三级实例

proxy http -t tcp -z demo_password -p :7777proxy http -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888proxy http -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080

1.13 压缩传输

proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以对数据进行压缩,
也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,一部分是本地(-m)是否压缩传输,
一部分是与上级(-M)传输是否压缩。
压缩要求两端都是proxy才可以,压缩也在一定程度上保护了(加密)数据,下面分别用二级,三级为例:

二级实例

proxy http -t tcp -m -p :7777proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080

三级实例

proxy http -t tcp -m -p :7777proxy http -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888proxy http -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080

1.14 负载均衡

HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。

proxy http --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080

1.14.1 设置重试间隔和超时时间

proxy http --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -t tcp -p :33080

1.14.2 设置权重

proxy http --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -t tcp -p :33080

1.14.3 使用目标地址选择上级

proxy http --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -t tcp -p :33080

1.15 限速

-l
proxy http -t tcp -p 2.2.2.2:33080 -l 100K

1.16 指定出口IP

--bind-listen入口IP入口IP出口IP

普通多IP用法:

proxy http -t tcp -p :33080 --bind-listen
3.3.3.33.3.3.33.3.3.33.3.3.3入口IP出口IP入口IP出口IP--bind-listen入口IP出口IP

单独用法:

5.5.5.566665.5.5.5:66665.5.5.5

命令如下:

proxy http -t tcp -p 5.5.5.5:6666 --bind-listen

自由指定出口IP

--bind-listen入口IP出口IP--bind-ipIP:端口1.1.1.1:8080[2000:0:0:0:0:0:0:1]:8080--bind-ip
5.5.5.56.6.6.688887777
proxy http -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
77775.5.5.588886.6.6.6--bind-ip--bind-listen--bind-ip
--bind-ipIP网卡名称通配符
--bind-ip eth0:77777777--bind-ip eth0.*:77777777eth0.--bind-ip 192.168.?.*:77777777192.168.?.*--bind-ip pppoe??,192.168.?.*:77777777pppoe??192.168.?.**?--bind-refresh5

1.17 证书参数使用base64数据

默认情况下-C,-K参数是crt证书和key文件的路径,

如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。

1.18 智能模式

--intelligent=direct--intelligent=parent--intelligent=intelligent

1.19 查看帮助

proxy help http

2.TCP代理

2.1 普通一级TCP代理

proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"
-p
-P
--lock-port

比如:

proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:0"
3308033080-P0
330803308122--lock-port
proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port

2.2 普通二级TCP代理

proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"proxy tcp -p ":23080" -T tcp -P "22.22.22.33:33080"

2.3 普通三级TCP代理

proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"proxy tcp -p ":8080" -T tcp -P "33.33.33.33:28080"

2.4 加密二级TCP代理

proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.keyproxy tcp -p ":23080" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key

2.5 加密三级TCP代理

proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.keyproxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.keyproxy tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key

2.6 通过代理连接上级

有时候proxy所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
-J参数就可以帮助你让proxy的tcp端口映射的时候通过https或者socks5代理去连接上级-P,将外部端口映射到本地。
-J参数格式如下:

https代理写法:
代理需要认证,用户名:username 密码:password
https://username:password@host:port
代理不需要认证
https://host:port

socks5代理写法:
代理需要认证,用户名:username 密码:password
socks5://username:password@host:port
代理不需要认证
socks5://host:port

host:代理的IP或者域名
port:代理的端口

2.7 指定出口IP

出口IP--bind-listen入口IP入口IP出口IP

普通多IP用法:

proxy tcp -t tcp -p :33080 --bind-listen -T tcp -P 2.2.2.2:3322
3.3.3.33.3.3.33.3.3.33.3.3.3入口IP出口IP入口IP出口IP--bind-listen入口IP出口IP

单独用法:

5.5.5.566665.5.5.5:66665.5.5.5

命令如下:

proxy tcp -t tcp -p 5.5.5.5:6666 --bind-listen -T tcp -P 2.2.2.2:3322

自由指定出口IP

--bind-listen入口IP出口IP--bind-ipIP:端口1.1.1.1:8080[2000:0:0:0:0:0:0:1]:8080--bind-ip
5.5.5.56.6.6.688887777
proxy tcp -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888 -T tcp -P 2.2.2.2:3322
77775.5.5.588886.6.6.6--bind-ip--bind-listen--bind-ip
--bind-ipIP网卡名称通配符
--bind-ip eth0:77777777--bind-ip eth0.*:77777777eth0.--bind-ip 192.168.?.*:77777777192.168.?.*--bind-ip pppoe??,192.168.?.*:77777777pppoe??192.168.?.**?--bind-refresh5

2.8 限速,限制连接数

--max-connsproxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --max-conns 1000--rate-limitproxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --rate-limit 100k--ip-rateproxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --ip-rate 1M--port-rate服务IP:端口proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22" --port-rate 10M--rate-limit--ip-rate--port-rate

2.9 压缩传输

--c--C

示例:

proxy tcp -t tcp --c -p ":33080" -T tcp -P "127.0.0.1:8080"proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C

2.10 查看帮助

proxy help tcp

3.UDP代理

3.1.普通一级UDP代理

proxy udp -p ":5353" -T udp -P "8.8.8.8:53"
-p
-P
--lock-port

比如:

proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:0"
3308033080-P0
33080330812222--lock-port
proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port

3.2.普通二级UDP代理

proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"proxy udp -p ":5353" -T tcp -P "22.22.22.33:33080"

3.3.普通三级UDP代理

proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"proxy tcp -p ":28080" -T tcp -P "22.22.22.22:38080"proxy udp -p ":5353" -T tcp -P "33.33.33.33:28080"

3.4.加密二级UDP代理

proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.keyproxy udp -p ":5353" -T tls -P "22.22.22.33:33080" -C proxy.crt -K proxy.key

3.5.加密三级UDP代理

proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.keyproxy tcp -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.keyproxy udp -p ":5353" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key

3.6 指定出口IP

出口IP--bind-listen入口IP入口IP出口IP
proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B

3.7 查看帮助

proxy help udp

4.内网穿透

4.1、原理说明

内网穿透,分为两个版本,“多链接版本”和“多路复用版本”,一般像web服务这种不是长时间连接的服务建议用“多链接版本”,如果是要保持长时间连接建议使用“多路复用版本”。

  1. 多链接版本,对应的子命令是tserver,tclient,tbridge。
  2. 多路复用版本,对应的子命令是server,client,bridge。
  3. 多链接版本和多路复用版本的参数和使用方式完全一样。
  4. 多路复用版本的server,client可以开启压缩传输,参数是--c。
  5. server,client要么都开启压缩,要么都不开启,不能只开一个。

下面的教程以“多路复用版本”为例子,说明使用方法。
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。

4.2、TCP普通用法

背景:

  • 公司机器A提供了web服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口

步骤:

proxy bridge -p ":33080" -C proxy.crt -K proxy.keyproxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.keyproxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.3、微信接口本地开发

背景:

  • 自己的笔记本提供了nginx服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在微信的开发帐号的网页回调接口配置里面填写地址:http://22.22.22.22/calback.php
然后就可以访问到笔记本的80端口下面的calback.php,如果需要绑定域名,可以用自己的域名
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
配置域名wx-dev.xxx.com到具体的目录即可。

步骤:

proxy bridge -p ":33080" -C proxy.crt -K proxy.keyproxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.keyproxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.4、UDP普通用法

背景:

  • 公司机器A提供了DNS解析服务,UDP:53端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。

步骤:

proxy bridge -p ":33080" -C proxy.crt -K proxy.keyproxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.keyproxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.5、高级用法一

背景:

  • 公司机器A提供了web服务80端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
为了安全,不想在VPS上能够访问到公司机器A,在家里能够通过访问本机的28080端口,
通过加密隧道访问到公司机器A的80端口。

步骤:

proxy bridge -p ":33080" -C proxy.crt -K proxy.keyproxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.keyproxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.6、高级用法二

提示:
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
只要在同一个bridge上唯一即可。
server连接到bridge的时候,如果同时有多个client连接到同一个bridge,需要使用--k参数选择client。
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。

背景:

  • 公司机器A提供了web服务80端口,ftp服务21端口
  • 有VPS一个,公网IP:22.22.22.22

需求:
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口

步骤:

proxy bridge -p ":33080" -C proxy.crt -K proxy.keyproxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.keyproxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key

4.7.server的-r参数

PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT
-r "udp://:10053@:53" -r "tcp://:10800@:1080" -r ":8080@:80"-r ":8080@:80"-r ":8080@:80"
-r ":8080@:80"-r ":8080@:80"
0.0.0.0127.0.0.1

4.8.server和client通过代理连接bridge

有时候server或者client所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
-J参数就可以帮助你让server或者client通过https或者socks5代理去连接bridge。
-J参数格式如下:

https代理写法:
代理需要认证,用户名:username 密码:password
https://username:password@host:port
代理不需要认证
https://host:port

socks5代理写法:
代理需要认证,用户名:username 密码:password
socks5://username:password@host:port
代理不需要认证
socks5://host:port

host:代理的IP或者域名
port:代理的端口

4.9.内网穿透HTTP服务

--http-host--http-hostX-Forwarded-ForX-Real-IP
server
--http-host www.test.com:80@2200--http-host

实例:

local.com

那么server的启动参数可以如下:

proxy server -P :30000 -r :2500@127.0.0.1:80 --http-host local.com@2500

解释:

-r :2500@127.0.0.1:80--http-host local.com:80@2500
local.com
--http-host

4.10 关于流量统计

如果单独启动一个server对接上级是proxy-admin控制面板,需要在上级控制面板里面新建一个映射,获得个映射规则的ID,

然后启动server的时候加上参数 --server-id=映射规则的ID 才能统计到流量。

4.11 关于p2p

内网穿透支持在server和client网络情况满足的情况下,server和client之间通过p2p直接连接,开启方法是:

--p2p

如果server和client之间p2p打洞失败,那么会自动切换使用bridge中转传输数据。

4.12 客户端key白名单

内网穿透bridge可以设置客户端key白名单,参数是--client-keys,格式可以是:

a.文件名,文件内容一行一个客户端key只能包含数字字母下划线,也就是客户端启动参数--k的值,只有客户端key在此白名单的客户端才能连接。# 开头的行,为注释。

b.“base64://”开头的base64编码的上面a说明的文件内容,比如:base64://ajfpoajsdfa=

c.”str://“开头的英文逗号分割的多个key,比如:str://default,company,school

默认是空,允许所有key。

4.13 网络NAT类型判断

proxy tools -a nattype

4.14 查看帮助

proxy help bridgeproxy help serverproxy help client

5.SOCKS5代理

提示:

SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证。

socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。

5.1 普通SOCKS5代理

proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 0 --udp

-p参数支持的写法:

5.2.普通二级SOCKS5代理

22.22.22.22:8080proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"  --udp-port 0 --udpproxy socks -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080"  -b blocked.txt -d direct.txt --udp-port 0 --udp

5.3.SOCKS二级代理(加密)

proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp
proxy socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp
proxy.exe socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp

5.4.SOCKS三级代理(加密)

proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udpproxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udpproxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key --udp-port 0 --udp

5.5.SOCKS代理流量强制走上级SOCKS代理

proxy socks --always -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp

5.6.SOCKS通过SSH中转

5.6
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
假设有:vps

  • IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
  • 用户user的ssh私钥名称是user.key

5.6.1 ssh用户名和密码的方式

proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080"  --udp-port 0 --udp

5.6.2 ssh用户名和密钥的方式

proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"  --udp-port 0 --udp

那么访问本地的28080端口就是通过VPS访问目标地址。

5.7.认证

proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"proxy socks -t tcp -p ":33080" -F auth-file.txt

5.8.KCP协议传输

KCP协议需要--kcp-key参数设置一个密码用于加密解密数据

proxy socks -t kcp -p ":38080" --kcp-key mypassword
proxy socks -t tcp -p ":8080" -T kcp -P "22.22.22.22:38080" --kcp-key mypassword

5.9.自定义DNS

proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300

5.10 自定义加密

proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。

自定义加密要求两端都是proxy才可以。

下面分别用二级,三级为例:

proxy socks -t tcp -z demo_password -p :7777proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080
proxy socks -t tcp -z demo_password -p :7777proxy socks -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888proxy socks -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080

5.11 压缩传输

proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。

压缩要求两端都是proxy才可以,压缩也在一定程度上保护了(加密)数据。

下面分别用二级,三级为例:

二级实例

proxy socks -t tcp -m -p :7777proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080

三级实例

proxy socks -t tcp -m -p :7777proxy socks -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080

5.12 负载均衡

SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。

proxy socks --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.12.1 设置重试间隔和超时时间

proxy socks --lb-method=leastconn --lb-retrytime 300 --lb-timeout 300 -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.12.2 设置权重

proxy socks --lb-method=weight -T tcp -P 1.1.1.1:33080?w=1 -P 2.1.1.1:33080?w=2 -P 3.1.1.1:33080?w=1 -p :33080 -t tcp

5.12.3 使用目标地址选择上级

proxy socks --lb-hashtarget --lb-method=hash -T tcp -P 1.1.1.1:33080 -P 2.1.1.1:33080 -P 3.1.1.1:33080 -p :33080 -t tcp

5.13 限速

-l
proxy socks -t tcp -p 2.2.2.2:33080 -l 100K

5.14 指定出口IP

--bind-listen入口IP入口IP出口IP

普通多IP用法:

proxy socks -t tcp -p :33080 --bind-listen
3.3.3.33.3.3.33.3.3.33.3.3.3入口IP出口IP入口IP出口IP--bind-listen入口IP出口IP

单独用法:

5.5.5.566665.5.5.5:66665.5.5.5

命令如下:

proxy socks -t tcp -p 5.5.5.5:6666 --bind-listen

自由指定出口IP

--bind-listen入口IP出口IP--bind-ipIP:端口1.1.1.1:8080[2000:0:0:0:0:0:0:1]:8080--bind-ip
5.5.5.56.6.6.688887777
proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
77775.5.5.588886.6.6.6--bind-ip--bind-listen--bind-ip
--bind-ipIP网卡名称通配符
--bind-ip eth0:77777777--bind-ip eth0.*:77777777eth0.--bind-ip 192.168.?.*:77777777192.168.?.*--bind-ip pppoe??,192.168.?.*:77777777pppoe??192.168.?.**?--bind-refresh5

5.15 级联认证

SOCKS5支持级联认证,-A可以设置上级认证信息。

上级:

proxy socks -t tcp -p 2.2.2.2:33080 -a user:pass

本地:

proxy socks -T tcp -P 2.2.2.2:33080 -A user:pass -t tcp -p :33080
9.API认证10.本地认证

5.16 证书参数使用base64数据

默认情况下-C,-K参数是crt证书和key文件的路径,

如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。

5.17 智能模式

--intelligent=direct--intelligent=parent--intelligent=intelligent

5.18 固定UDP功能端口

rfc1982草案
--udp-port 端口号
proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080

5.19 查看帮助

proxy help socks

6.SPS协议转换

6.1 功能介绍

代理协议转换使用的是sps子命令,sps可以把已经存在的http(s)代理或者socks5代理或ss代理转换为一个端口同时支持http(s)和socks5和ss的代理,而且http(s)代理支持正向代理和反向代理(SNI) ,当上级是SOCKS5时,转换后的SOCKS5或者SS代理仍然支持UDP功能;另外对于已经存在的http(s)代理或者socks5代理,支持tls、tcp、kcp三种模式,支持链式连接,也就是可以多个sps结点层级连接构建加密通道。

ss

本地监听端口-p参数支持的写法:

提示:

ss的udp功能默认关闭,可以通过--ssudp开启。socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。

6.2 HTTP(S)转HTTP(S)+SOCKS5+SS

proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
proxy sps -S http -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
proxy sps -S http -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass

6.3 SOCKS5转HTTP(S)+SOCKS5+SS

proxy sps -S socks -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass
proxy sps -S socks -T tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass
proxy sps -S socks -T kcp -P 127.0.0.1:8080 -t tcp -p :18080 --kcp-key demo123 -h aes-192-cfb -j pass

6.4 SS转HTTP(S)+SOCKS5+SS

proxy sps -S ss -H aes-256-cfb -J pass -T tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass

6.5 链式连接

proxy http -t tcp -p 127.0.0.1:8080
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tls -p :8081 -C proxy.crt -K proxy.key
proxy sps -S http -T tls -P 2.2.2.2:8081 -t tls -p :8082 -C proxy.crt -K proxy.key
proxy sps -S http -T tls -P 3.3.3.3:8082 -t tcp -p :18080 -C proxy.crt -K proxy.key

完成。

6.6 认证功能

user-authlocal-authparent-authauth-info-to-parent
user-auth local-auth parent-auth auth-info-to-paren
有/没有 来自parent-auth
有/没有 没有 来自parent-auth
有/没有 没有
没有 没有 没有
没有 没有 来自user-auth
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0:0:"用户名:密码:连接数:速率:上级proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -F auth-file.txt
proxy sps -S http -T tcp -P 127.0.0.1:8080 -t tcp -p ":33080" -a "user1:pass1:0:0:" -a "user2:pass2:0:0:"proxy sps -S http -T tcp -P 127.0.0.1:8080 -A "user1:pass1" -t tcp -p ":33080" 
9.API认证10.本地认证

6.7 多个上级

如果存在多个上级,可以通过多个-P指定。

比如:

proxy sps -P http://127.0.0.1:3100  -P socks5://127.0.0.1:3200
-P
protocol://a:b@2.2.2.2:33080#1

下面对每部分进行解释:

protocol://
a:babhttp://2.2.2.2:33080
2.2.2.2:33080IP(或域名):端口2.2.2.2:33080/wsmkws\wss加密方法密码2.2.2.2:33080/ws?m=aes-192-cfb&k=password
#1

6.8 自定义加密

proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行
自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义
一个密码即可,加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。

自定义加密要求两端都是proxy才可以。

下面分别用二级,三级为例:

6.6.6.6:6666

二级实例

proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080

三级实例

proxy sps -S http -T tcp -P 6.6.6.6:6666 -t tcp -z demo_password -p :7777proxy sps -T tcp -P 2.2.2.2:7777 -Z demo_password -t tcp -z other_password -p :8888proxy sps -T tcp -P 3.3.3.3:8888 -Z other_password -t tcp -p :8080

6.9 压缩传输

proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。

压缩要求两端都是proxy才可以,压缩也在一定程度上保护了(加密)数据。

下面分别用二级,三级为例:

二级实例

proxy sps -t tcp -m -p :7777proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080

三级实例

proxy sps -t tcp -m -p :7777proxy sps -T tcp -P 2.2.2.2:7777 -M -t tcp -m -p :8888proxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080

6.10 禁用协议

--disable-httpproxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-http
--disable-socksproxy sps -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080 --disable-socks

6.11 限速

假设存在SOCKS5上级:

proxy socks -p 2.2.2.2:33080 -z password -t tcp

sps下级,限速100K

proxy sps -S socks -P 2.2.2.2:33080 -T tcp -Z password -l 100K -t tcp -p :33080
-l

6.12 指定出口IP

--bind-listen入口IP入口IP出口IP

普通多IP用法:

proxy sps -t tcp -p :33080 --bind-listen
3.3.3.33.3.3.33.3.3.33.3.3.3入口IP出口IP入口IP出口IP--bind-listen入口IP出口IP

单独用法:

5.5.5.566665.5.5.5:66665.5.5.5

命令如下:

proxy sps -t tcp -p 5.5.5.5:6666 --bind-listen

自由指定出口IP

--bind-listen入口IP出口IP--bind-ipIP:端口1.1.1.1:8080[2000:0:0:0:0:0:0:1]:8080--bind-ip
5.5.5.56.6.6.688887777
proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888
77775.5.5.588886.6.6.6--bind-ip--bind-listen--bind-ip
--bind-ipIP网卡名称通配符
--bind-ip eth0:77777777--bind-ip eth0.*:77777777eth0.--bind-ip 192.168.?.*:77777777192.168.?.*--bind-ip pppoe??,192.168.?.*:77777777pppoe??192.168.?.**?--bind-refresh5

提示

  • sps提供的ss服务的udp功能不支持指定出口IP。
  • sps提供的http(s)/socks5/ss均支持指定出口ip。
  • sps提供的socks5的udp功能支持指定出口ip。

6.13 证书参数使用base64数据

默认情况下-C,-K参数是crt证书和key文件的路径,

如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。

6.14 独立服务

http(s)\socks\ssproxy sps -p :33080 --ssudp --udp --udp-port 0

6.15 目标重定向

sps功能提供的http(s)\socks5\ss代理功能,客户端通过sps代理去连接指定的“目标”,这个“目标”一般是网站也可能是任意的tcp地址,
网站”目标“一般是foo.com:80,foo.com:443,sps支持使用--rewrite参数指定一个“目标”重定向规则文件,对目标进行重定向,客户端是无感知的,
比如你对“目标”:demo.com:80重定向到192.168.0.12:80,那么客户端访问网站demo.com,其实访问的是192.168.0.12提供的网站服务。
“目标”重定向规则文件示例:

6.16 固定UDP功能端口

rfc1982草案
--udp-port 端口号
proxy sps -t tcp -p "0.0.0.0:38080" --udp-port 38081

需要注意的是,sps的ss功能也有UDP功能,而且ss的UDP端口和tcp端口是一样的,所以要避免socks5的UDP端口和ss的UDP端口冲突,

要指定和tcp端口不一样的端口。

6.17 iptables 透明代理

sps模式支持Linux系统的iptables转发支持,也就是通常所说的iptables透明代理,如果在网关设备上进行iptables透明代理,那么对通过网关联网的设备就能实现无感知的代理。

启动命令实例:

proxy sps --redir -p :8888 -P httpws://1.1.1.1:33080

这里假设存在一个http的上级代理1.1.1.1:33080,使用ws传输数据。

然后添加iptables规则,下面是参考规则:

  • 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
  • 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X PROXY
  • 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN

6.18 查看帮助

proxy help sps

7.KCP配置

7.1 配置介绍

proxy的很多功能都支持kcp协议,凡是使用了kcp协议的功能都支持这里介绍的配置参数。
所以这里统一对KCP配置参数进行介绍。

7.2 详细配置

所有的KCP配置参数共有17个,你可以都不用设置,他们都有默认值,如果为了或者最好的效果,
就需要自己根据自己根据网络情况对参数进行配置。由于kcp配置很复杂需要一定的网络基础知识,
如果想获得kcp参数更详细的配置和解说,请自行搜索。每个参数的命令行名称以及默认值和简单的功能说明如下:

--nodelay=0 --interval=40 --resend=2 --nc=1--nodelay=0 --interval=30 --resend=2 --nc=1--nodelay=1 --interval=20 --resend=2 --nc=1--nodelay=1 --interval=10 --resend=2 --nc=1

8.安全DNS

8.1 介绍

众所周知DNS是UDP端口53提供的服务,但是随着网络的发展一些知名DNS服务器也支持TCP方式dns查询,比如谷歌的8.8.8.8,proxy的DNS防污染服务器原理就是在本地启动一个proxy的DNS代理服务器,它用TCP的方式通过上级代理进行dns查询。如果它和上级代理通讯采用加密的方式,那么就可以进行安全无污染的DNS解析,还支持独立服务,并发解析,支持增强的hosts文件功能支持灵活的并发解析转发。

dns解析顺序:
1.使用参数--hosts解析。
2.要解析的域名在1中没有找到,就使用参数--forward规则解析。
3.要解析的域名在1和2中都没有找到,就使用默认--default解析,--default默认行为参数值有三种:proxy,direct,system。
三种参数值解释如下:
proxy:通过上级去连接-q参数指定的dns服务器去解析域名。
direct:通过本地网络去连接-q参数指定的dns服务器去解析域名。
system:通过系统dns去解析域名。

提示:
--hosts 参数指定的host文件格式和系统hosts文件一致,而且域名支持通配符,可以参考hosts文件。
--forward 参数指定的解析转发规则文件,格式可以参考resolve.rules文件,域名支持通配符,支持为每个域名指定多个dns服务器并发解析,谁最快解析成功就用谁的解析结果。
-q 参数可以指定多个远程dns服务器,执行并发解析谁最快解析成功就用谁的解析结果,默认是:1.1.1.1,8.8.8.8,9.9.9.9,多个用逗号分割,
比如还可以带端口:1.1.1.1,8.8.8.8#53,9.9.9.9

proxy dns --default system -p :5353proxy dns --default direct -p :5353

8.2 使用示例

8.2.1 普通HTTP(S)上级代理

proxy dns -S http -T tcp -P 2.2.2.2:33080 -p :53

8.2.2 普通SOCKS5上级代理

proxy dns -S socks -T tcp -P 2.2.2.2:33080 -p :53

8.2.3 TLS加密的HTTP(S)上级代理

proxy http -t tls -C proxy.crt -K proxy.key -p :33080proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53

8.2.4 TLS加密的SOCKS5上级代理

proxy socks -t tls -C proxy.crt -K proxy.key -p :33080proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53

8.2.5 KCP加密的HTTP(S)上级代理

proxy http -t kcp -p :33080proxy dns -S http -T kcp -P 2.2.2.2:33080 -p :53

8.2.6 KCP加密的SOCKS5上级代理

proxy socks -t kcp -p :33080proxy dns -S socks -T kcp -P 2.2.2.2:33080 -p :53

8.2.7 自定义加密的HTTP(S)上级代理

proxy http -t tcp -p :33080 -z passwordproxy dns -S http -T tcp -Z password -P 2.2.2.2:33080 -p :53

8.2.8 自定义加密的SOCKS5上级代理

proxy socks -t kcp -p :33080 -z passwordproxy dns -S socks -T tcp -Z password -P 2.2.2.2:33080 -p :53

9.API认证,限速,控制连接数,限流量

proxy的http(s)/socks5/sps代理功能,支持通过API控制用户对代理对访问。

通过API可以干什么?

  • 用户维度,控制单个连接速率,控制最大连接数,控制连接的QPS。
  • IP维度,控制单个连接速率,控制最大连接数,控制连接的QPS。
  • 动态上级,可以根据用户或者客户端IP,动态的从API获取其上级,支持http(s)/socks5/ss上级。
  • 认证每一个连接,无论是否要求客户端认证。
  • 缓存认证结果,时间可以设置,减轻API压力。
  • 用户维度、客户端IP维度、端口维度的总限速。

具体使用

--auth-url--auth-nouser--auth-cache--auth-url
http://test.com/auth.php?user=a&pass=b&client_addr=127.0.0.1:49892&local_addr=127.0.0.1:8100&target=http%3A%2F%2Fwww.baidu.com&service=http&sps=0

参数说明

user和passclient_addrlocal_addrservicespstarget
proxy--auth-url

示例

假设--auth-url http://127.0.0.1:333/auth.php 指向了一个php接口地址.
auth.php内容如下:

HTTP HEADER 头部字段解释

userconnsipconnsuserrateiprateuserqpsipqpsupstreamoutgoinguserTotalRateipTotalRateportTotalRate

限速详细说明

userrateiprateuserTotalRateipTotalRateportTotalRateuserTotalRateuserrateuserTotalRateipTotalRateportTotalRateuserTotalRateipTotalRateportTotalRateuserTotalRateportTotalRate--auth-nouser同一个空用户名用户

提示

--auth-url--auth-nouser--auth-url--auth-cache

upstream详细说明

spshttp://127.0.0.1:3100?argk=argvsocks5://127.0.0.1:3100?argk=argv
http://socks5://127.0.0.1:3100
spsprotocol://a:b@2.2.2.2:33080?argk=argv-P?argk=argv&
  1. parent-type : 上级底层传输类型,支持 tcp,tls,ws,wss。
  2. parent-ws-method : 上级底层ws传输类型的加密方法,支持的值和命令行支持的值范围一样。
  3. parent-ws-password : 上级底层ws传输类型的加密密码,数字字母组成的密码。
  4. parent-tls-single : 上级底层tls传输类型是否是单向tls,可以是:true | false。
  5. timeout : 建立tcp连接的超时时间,数字,单位毫秒。
  6. ca : 上级底层tls传输类型的ca证书文件经过base64编码后的字符串。
  7. cert : 上级底层tls传输类型的证书文件经过base64编码后的字符串。
  8. key : 上级底层tls传输类型的证书密钥文件经过base64编码后的字符串。
  9. luminati:上级是否是luminati代理,可以是:true | false。

流量上报/流量统计/流量限制

--traffic-url--traffic-url--traffic-modenormalfast
normal--traffic-urlfast定时--traffic-url定时--traffic-interval定时fast--fast-global--traffic-mode=fast--traffic-url定时POSTContent-Typeapplication/jsonJSON 数组[{},{}]请求参数说明

下面是一个完整的URL请求实例:

http://127.0.0.1:8080/auth.php?act=traffic&bytes=7627&client_addr=127.0.0.1%3A63637 &id=http&out_local_addr=127.0.0.1%3A63640&out_remote_addr=127.0.0.1%3A63639 &server_addr=127.0.0.1%3A33080&target_addr=www.baidu.com%3A443 &upstream=http%3A%2F%2F127.0.0.1%3A3100&username=a
idserver_addrIP:端口client_addrIP:端口target_addrIP:端口usernamebytesout_local_addrIP:端口out_remote_addrIP:端口upstream

提示

--traffic-url204

流量上报原理

traffic

主动断开用户连接

控制接口--control-url定期--control-url定期--control-sleep定期

控制接口请求说明

表单conns12.2
user
ip
conns[{"id":"ab7bf1f10501d6f7","client":"127.0.0.1:62112","server":"127.0.0.1:9092","user":""}]

控制接口返回数据说明

conns12.2{"user":"a,b","ip":"",conns:["ab7bf1f10501d6f7","cb7bf1f10501d6f7"]}
user
ip
conns控制接口请求说明

说明:

用户IP

示例

http://127.0.0.1:33088/user/control.php
--control-gzip

使用代理

--auth-url--control-url--traffic-url--auth-proxy--jumper--jumper

10.本地认证,限速,控制连接数

proxy的http(s)/socks5/sps代理功能,支持通过配置文件控制用户对代理对访问,支持开启http(s)代理``Proxy Basic 代理认证`,socks5代理认证。

开始使用

--auth-file--max-conns--ip-limit--rate-limit-a

参数详细解释

--auth-file
连接数速率上级--auth-file-a-aproxy http -a a:b:0:0: -a c:d:0:0:
user:pass:100:10240:http://192.168.1.1:3100userpass10010240http://192.168.1.1:3100
--max-conns

限制代理服务的全局最大连接数,一个数字,0为不限制,默认0。

--ip-limit
127.0.0.1:100:10240:http://192.168.1.1:3100127.0.0.110010240http://192.168.1.1:3100
--rate-limit

限制服务的每一个tcp连接的速度,比如:100K 2000K 1M . 0意味着无限制,默认0。

11.集群管理

proxyadmin集群版
1.1.1.1:55333

命令示例如下:

proxy agent -k xxx -c 1.1.1.1:55333 -i test

命令解释:

agent : 是功能参数,表示运行agent模式。

proxyadmin集群版proxyadmin集群版
proxyadmin集群版
唯一标识唯一标识
--jumper--jumper

提示:

{AGENT_ID}

比如client服务参数:

client -T tcp -P 1.1.1.1:30000 --k {AGENT_ID}
-u-i

12.http、https 网站反向代理

proxy可以对 http 和 https 网站进行反向代理。

支持特性如下:

  • http和https相互转换。
  • 多个后端。
  • 多个后端负载均衡。
  • 多个后端高可用。
  • 目录映射转发。
  • 路径保护。
  • 绑定的域名,可以另外指定别名。
rhttp.toml

具体使用可以参考配置文件 rhttp.toml ,里面有完整配置说明。

13.典型用法-拨号VPS

为了方便说明,假设背景情况如下:

pppoe_

实现的效果:

1.1.1.177777777

操作步骤:

proxy sps -p :7777 --bind-ip pppoe_*:7777 -a user1:password1 -a user2:password2 -a代理认证用户-a用户名:密码API认证认证

14.典型用法-多IP的VPS

为了方便说明,假设背景情况如下:

eth0eth0eth0:1eth0:255eth0:

实现的效果:

1.1.1.177777777

操作步骤:

proxy sps -p :7777 --bind-ip eth0:*:7777 -a user1:password1 -a user2:password2 -a代理认证用户-a用户名:密码API认证认证

15.典型用法-拨号的VPS集群

为了方便说明,假设背景情况如下:

pppoe_

2、有一个VPS作为代理入口,它的ip是2.2.2.2。

实现的效果:

2.2.2.22.2.2.2888888888888

操作步骤:

拨号VPS:

proxy sps -p :7777 --bind-ip pppoe_*:7777 

入口VPS:

2.2.2.2proxy sps -p :8888 -a user1:password1 -a user2:password2 -P http://x.x.x.1:7777  -P http://x.x.x.2:7777-a代理认证用户-a用户名:密码x.x.x.1x.x.x.2-P

16.典型用法-对接Luminati

Luminati提供了高质量稳定的住宅IP可以做很多事情,但是价格也不菲,如果买了一个线路,可以通过proxy把它转成有子账号的代理,二次分发。

为了方便说明,假设背景情况如下:

xxx.com:8888:username:passwordxxx.com:8888username:password

实现的效果:

  1. 访问1.1.1.1的7777端口,使用Luminati的线路出去。
  2. 7777端口具有认证功能。

操作步骤:

proxy sps -p :7777 --disable-socks --disable-ss -a user1:pass1 -a user2:pass2 -P http://username:password@xxx.com:8888-a代理认证用户-a用户名:密码

提醒,此种做法,有可能带来Luminati限制你的账号风险,VPS的IP也有可能被可能Luminati屏蔽导致转换不能工作,风险自负。

--luminati
1.proxy sps -p :7777 --luminati --disable-ss -a user1:pass1 -a user2:pass2 -P http://username:password@xxx.com:8888

17.典型用法-认证转为无认证

通过proxy可以把有认证功能的代理转成没有认证的代理。

为了方便说明,假设背景情况如下:

  1. 有一个http认证代理,地址是:2.2.2.2:8888,认证账号:abc,密码是:123。
  2. 有一个自己的VPS,IP是1.1.1.1。

实现的效果:

  1. 访问1.1.1.1的7777端口,无需认证,会转给2.2.2.2:8888代理。

操作步骤:

proxy sps -p :7777 -P http://abc:123@2.2.2.2:8888

18.典型用法-镜像网站

有时候访问GitHub很慢,导致学习困难,可以用proxy镜像GitHub加速访问。

为了方便说明,假设背景情况如下:

  1. 有一个自己的VPS,IP是1.1.1.1,可以访问GitHub,而且速度还可以。

实现的效果:

  1. 访问1.1.1.1的7777端口,就是访问GitHub。

操作步骤:

  1. 准备配置文件github.toml,写入如下内容:
proxy rhttp -c github.tomlhttp://1.1.1.1:7777/snail007/proxy rhttp -c github.toml --daemon --log /tmp/github.logproxyv11.2

如果是想使用域名比如a.com,那么:

bind="http://1.1.1.1:7777/"bind="http://a.com:7777/"http://a.com:7777/snail007/bind="http://a.com/"http://a.com/snail007/