update
This commit is contained in:
@@ -12,6 +12,7 @@ The GoProxy is a high-performance http proxy, https proxy, socks5 proxy, ss prox
|
|||||||
[](https://github.com/snail007/goproxy/) []() [](https://github.com/snail007/goproxy/releases) [](https://github.com/snail007/goproxy/releases)
|
[](https://github.com/snail007/goproxy/) []() [](https://github.com/snail007/goproxy/releases) [](https://github.com/snail007/goproxy/releases)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
## 中文用户请看中文说明,中文与英文内容的安装等资源链接是不一样的,谢谢合作!
|
||||||
|
|
||||||
### [点击我观看视频教程](https://space.bilibili.com/472844633)
|
### [点击我观看视频教程](https://space.bilibili.com/472844633)
|
||||||
- [使用必读](https://github.com/snail007/goproxy/blob/master/README_ZH.md)
|
- [使用必读](https://github.com/snail007/goproxy/blob/master/README_ZH.md)
|
||||||
|
|||||||
+306
-103
@@ -220,6 +220,7 @@ Proxy is licensed under GPLv3 license。
|
|||||||
|
|
||||||
|
|
||||||
### 稳定优质IP代理商推荐
|
### 稳定优质IP代理商推荐
|
||||||
|
|
||||||
<a href="https://brightdata.grsm.io/9gnzdzgpvtmo">
|
<a href="https://brightdata.grsm.io/9gnzdzgpvtmo">
|
||||||
<img width="auto" height="100" src="https://mirrors.host900.com/https://raw.githubusercontent.com/snail007/goproxy/master/doc/images/brightdata.png"/>
|
<img width="auto" height="100" src="https://mirrors.host900.com/https://raw.githubusercontent.com/snail007/goproxy/master/doc/images/brightdata.png"/>
|
||||||
</a>
|
</a>
|
||||||
@@ -313,7 +314,6 @@ http
|
|||||||
|
|
||||||
比如: --log proxy.log,日志就会输出到proxy.log方便排除问题。
|
比如: --log proxy.log,日志就会输出到proxy.log方便排除问题。
|
||||||
|
|
||||||
|
|
||||||
### 5. 生成加密通讯需要的证书文件
|
### 5. 生成加密通讯需要的证书文件
|
||||||
|
|
||||||
http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。
|
http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。
|
||||||
@@ -343,6 +343,7 @@ http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和
|
|||||||
`proxy http -t tcp -p "0.0.0.0:38080" --daemon`
|
`proxy http -t tcp -p "0.0.0.0:38080" --daemon`
|
||||||
|
|
||||||
### 7. 守护运行
|
### 7. 守护运行
|
||||||
|
|
||||||
守护运行参数--forever,比如: `proxy http --forever` ,
|
守护运行参数--forever,比如: `proxy http --forever` ,
|
||||||
|
|
||||||
proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程。
|
proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程。
|
||||||
@@ -369,13 +370,13 @@ HTTP(S)\SOCKS5\SPS\TCP代理支持上级负载均衡和高可用,多个上级
|
|||||||
|
|
||||||
roundrobin 轮流使用
|
roundrobin 轮流使用
|
||||||
|
|
||||||
leastconn 使用最小连接数的
|
leastconn 使用最小连接数的
|
||||||
|
|
||||||
leasttime 使用连接时间最小的
|
leasttime 使用连接时间最小的
|
||||||
|
|
||||||
hash 使用根据客户端地址计算出一个固定上级
|
hash 使用根据客户端地址计算出一个固定上级
|
||||||
|
|
||||||
weight 根据每个上级的权重和连接数情况,选择出一个上级
|
weight 根据每个上级的权重和连接数情况,选择出一个上级
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
@@ -492,8 +493,7 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
|
|
||||||
### 15 监听多个端口
|
### 15 监听多个端口
|
||||||
|
|
||||||
`tcp/http/socks/sps`支持同时监听多个端口以及范围端口。
|
`tcp/http/socks/sps`支持同时监听多个端口以及范围端口。 一般情况下监听一个端口就可以,不过如果需要同时监听多个两个端口,或者范围端口,那么-p参数是支持的,
|
||||||
一般情况下监听一个端口就可以,不过如果需要同时监听多个两个端口,或者范围端口,那么-p参数是支持的,
|
|
||||||
格式是:`-p 0.0.0.0:80,0.0.0.0:443,0.0.0.0:8000-9000,:5000-6000`,多个绑定用逗号分隔即可。
|
格式是:`-p 0.0.0.0:80,0.0.0.0:443,0.0.0.0:8000-9000,:5000-6000`,多个绑定用逗号分隔即可。
|
||||||
|
|
||||||
## 1.HTTP代理
|
## 1.HTTP代理
|
||||||
@@ -541,6 +541,7 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||||
|
|
||||||
### 1.4.HTTP三级代理(加密)
|
### 1.4.HTTP三级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级HTTP代理VPS_01,IP:22.22.22.22
|
一级HTTP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
`proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||||
@@ -555,24 +556,31 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
请参考`9.API认证` 和 `10.本地认证`
|
请参考`9.API认证` 和 `10.本地认证`
|
||||||
|
|
||||||
### 1.6.HTTP代理流量强制走上级HTTP代理
|
### 1.6.HTTP代理流量强制走上级HTTP代理
|
||||||
|
|
||||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级HTTP代理.通过--always可以使全部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`
|
`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代理访问目标地址。
|
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
||||||
假设有:vps
|
假设有:vps
|
||||||
|
|
||||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||||
- 用户user的ssh私钥名称是user.key
|
- 用户user的ssh私钥名称是user.key
|
||||||
|
|
||||||
#### *1.7.1 ssh用户名和密码的方式*
|
#### *1.7.1 ssh用户名和密码的方式*
|
||||||
|
|
||||||
本地HTTP(S)代理28080端口,执行:
|
本地HTTP(S)代理28080端口,执行:
|
||||||
`proxy http -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":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端口,执行:
|
本地HTTP(S)代理28080端口,执行:
|
||||||
`proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"`
|
`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协议需要--kcp-key参数设置一个密码用于加密解密数据
|
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
||||||
|
|
||||||
@@ -584,6 +592,7 @@ KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
|||||||
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输,注意kcp走的是udp协议协议,所以防火墙需放开38080的udp协议。
|
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输,注意kcp走的是udp协议协议,所以防火墙需放开38080的udp协议。
|
||||||
|
|
||||||
### 1.9 HTTP(S)反向代理
|
### 1.9 HTTP(S)反向代理
|
||||||
|
|
||||||

|

|
||||||
proxy不仅支持在其他软件里面通过设置代理的方式,为其他软件提供代理服务,而且支持直接把请求的网站域名解析到proxy监听的ip上,然后proxy监听80和443端口,那么proxy就会自动为你代理访问需要访问的HTTP(S)网站。
|
proxy不仅支持在其他软件里面通过设置代理的方式,为其他软件提供代理服务,而且支持直接把请求的网站域名解析到proxy监听的ip上,然后proxy监听80和443端口,那么proxy就会自动为你代理访问需要访问的HTTP(S)网站。
|
||||||
|
|
||||||
@@ -600,11 +609,13 @@ proxy不仅支持在其他软件里面通过设置代理的方式,为其他软
|
|||||||
proxy所在的服务器的DNS解析结果不能受到自定义的解析影响,不然就死循环了,proxy代理最好指定`--dns 8.8.8.8`参数。
|
proxy所在的服务器的DNS解析结果不能受到自定义的解析影响,不然就死循环了,proxy代理最好指定`--dns 8.8.8.8`参数。
|
||||||
|
|
||||||
### 1.10 HTTP(S)透明代理
|
### 1.10 HTTP(S)透明代理
|
||||||
|
|
||||||
该模式需要具有一定的网络基础,相关概念不懂的请自行搜索解决。
|
该模式需要具有一定的网络基础,相关概念不懂的请自行搜索解决。
|
||||||
假设proxy现在在路由器上运行,启动命令如下:
|
假设proxy现在在路由器上运行,启动命令如下:
|
||||||
`proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key`
|
`proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
然后添加iptables规则,下面是参考规则:
|
然后添加iptables规则,下面是参考规则:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#上级proxy服务端服务器IP地址:
|
#上级proxy服务端服务器IP地址:
|
||||||
proxy_server_ip=2.2.2.2
|
proxy_server_ip=2.2.2.2
|
||||||
@@ -640,17 +651,20 @@ iptables -t nat -A PREROUTING -p tcp -j PROXY
|
|||||||
# Apply the rules to localhost
|
# Apply the rules to localhost
|
||||||
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
||||||
```
|
```
|
||||||
|
|
||||||
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
||||||
- 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X 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
|
- 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN
|
||||||
|
|
||||||
### 1.11 自定义DNS
|
### 1.11 自定义DNS
|
||||||
|
|
||||||
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
||||||
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
||||||
比如:
|
比如:
|
||||||
`proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
`proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
||||||
|
|
||||||
### 1.12 自定义加密
|
### 1.12 自定义加密
|
||||||
|
|
||||||
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义
|
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义
|
||||||
加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
||||||
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
@@ -664,7 +678,6 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
`proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -676,6 +689,7 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 1.13 压缩传输
|
### 1.13 压缩传输
|
||||||
|
|
||||||
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以对数据进行压缩,
|
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以对数据进行压缩,
|
||||||
也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,一部分是本地(-m)是否压缩传输,
|
也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,一部分是本地(-m)是否压缩传输,
|
||||||
一部分是与上级(-M)传输是否压缩。
|
一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -689,7 +703,6 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
`proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -732,8 +745,8 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy http -t tcp -p :33080 --bind-listen`
|
`proxy http -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -745,16 +758,26 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy http -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy http -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 1.17 证书参数使用base64数据
|
### 1.17 证书参数使用base64数据
|
||||||
|
|
||||||
默认情况下-C,-K参数是crt证书和key文件的路径,
|
默认情况下-C,-K参数是crt证书和key文件的路径,
|
||||||
@@ -762,6 +785,7 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
### 1.18 智能模式
|
### 1.18 智能模式
|
||||||
|
|
||||||
智能模式设置,可以是intelligent|direct|parent三者之一。
|
智能模式设置,可以是intelligent|direct|parent三者之一。
|
||||||
默认是:parent。
|
默认是:parent。
|
||||||
每个值的含义如下:
|
每个值的含义如下:
|
||||||
@@ -770,11 +794,13 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
`--intelligent=intelligent`,blocked和direct里面都没有的目标,智能判断是否使用上级访问目标。
|
`--intelligent=intelligent`,blocked和direct里面都没有的目标,智能判断是否使用上级访问目标。
|
||||||
|
|
||||||
### 1.19 查看帮助
|
### 1.19 查看帮助
|
||||||
|
|
||||||
`proxy help http`
|
`proxy help http`
|
||||||
|
|
||||||
## 2.TCP代理
|
## 2.TCP代理
|
||||||
|
|
||||||
### 2.1 普通一级TCP代理
|
### 2.1 普通一级TCP代理
|
||||||
|
|
||||||

|

|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"`
|
`proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"`
|
||||||
@@ -802,8 +828,8 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port`
|
`proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port`
|
||||||
|
|
||||||
|
|
||||||
### 2.2 普通二级TCP代理
|
### 2.2 普通二级TCP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"`
|
`proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"`
|
||||||
@@ -812,6 +838,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地23080端口就是访问22.22.22.33的8080端口。
|
那么访问本地23080端口就是访问22.22.22.33的8080端口。
|
||||||
|
|
||||||
### 2.3 普通三级TCP代理
|
### 2.3 普通三级TCP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"`
|
`proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"`
|
||||||
@@ -822,6 +849,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
||||||
|
|
||||||
### 2.4 加密二级TCP代理
|
### 2.4 加密二级TCP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key`
|
||||||
@@ -830,6 +858,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口。
|
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口。
|
||||||
|
|
||||||
### 2.5 加密三级TCP代理
|
### 2.5 加密三级TCP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
||||||
@@ -840,6 +869,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
||||||
|
|
||||||
### 2.6 通过代理连接上级
|
### 2.6 通过代理连接上级
|
||||||
|
|
||||||
有时候proxy所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
有时候proxy所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
||||||
-J参数就可以帮助你让proxy的tcp端口映射的时候通过https或者socks5代理去连接上级-P,将外部端口映射到本地。
|
-J参数就可以帮助你让proxy的tcp端口映射的时候通过https或者socks5代理去连接上级-P,将外部端口映射到本地。
|
||||||
-J参数格式如下:
|
-J参数格式如下:
|
||||||
@@ -861,14 +891,15 @@ port:代理的端口
|
|||||||
|
|
||||||
### 2.7 指定出口IP
|
### 2.7 指定出口IP
|
||||||
|
|
||||||
当TCP代理当上级类型(参数:-T)是tcp当时候,支持指定`出口IP`。`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`访问目标网站的功能。如果绑定了不正确的IP会导致代理不能工作。
|
当TCP代理当上级类型(参数:-T)是tcp当时候,支持指定`出口IP`。`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`
|
||||||
|
访问目标网站的功能。如果绑定了不正确的IP会导致代理不能工作。
|
||||||
|
|
||||||
普通多IP用法:
|
普通多IP用法:
|
||||||
|
|
||||||
`proxy tcp -t tcp -p :33080 --bind-listen -T tcp -P 2.2.2.2:3322`
|
`proxy tcp -t tcp -p :33080 --bind-listen -T tcp -P 2.2.2.2:3322`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -876,20 +907,30 @@ port:代理的端口
|
|||||||
|
|
||||||
命令如下:
|
命令如下:
|
||||||
|
|
||||||
`proxy tcp -t tcp -p 5.5.5.5:6666 --bind-listen -T tcp -P 2.2.2.2:3322`
|
`proxy tcp -t tcp -p 5.5.5.5:6666 --bind-listen -T tcp -P 2.2.2.2:3322`
|
||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`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`
|
`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`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 2.8 限速,限制连接数
|
### 2.8 限速,限制连接数
|
||||||
|
|
||||||
参数`--max-conns`可以限制每个端口的最大连接数。
|
参数`--max-conns`可以限制每个端口的最大连接数。
|
||||||
@@ -911,11 +952,13 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
`proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C`
|
`proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C`
|
||||||
|
|
||||||
### 2.10 查看帮助
|
### 2.10 查看帮助
|
||||||
|
|
||||||
`proxy help tcp`
|
`proxy help tcp`
|
||||||
|
|
||||||
## 3.UDP代理
|
## 3.UDP代理
|
||||||
|
|
||||||
### 3.1.普通一级UDP代理
|
### 3.1.普通一级UDP代理
|
||||||
|
|
||||||

|

|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy udp -p ":5353" -T udp -P "8.8.8.8:53"`
|
`proxy udp -p ":5353" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -944,6 +987,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
`proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port`
|
`proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port`
|
||||||
|
|
||||||
### 3.2.普通二级UDP代理
|
### 3.2.普通二级UDP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"`
|
`proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -952,6 +996,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
||||||
|
|
||||||
### 3.3.普通三级UDP代理
|
### 3.3.普通三级UDP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"`
|
`proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -962,6 +1007,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口。
|
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口。
|
||||||
|
|
||||||
### 3.4.加密二级UDP代理
|
### 3.4.加密二级UDP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
@@ -970,6 +1016,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
||||||
|
|
||||||
### 3.5.加密三级UDP代理
|
### 3.5.加密三级UDP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
@@ -981,16 +1028,21 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
### 3.6 指定出口IP
|
### 3.6 指定出口IP
|
||||||
|
|
||||||
当UDP代理当上级类型(参数:-T)是udp当时候,支持指定`出口IP`。使用`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`访问目标的功能。如果绑定了不正确的IP会导致代理不能工作。
|
当UDP代理当上级类型(参数:-T)是udp当时候,支持指定`出口IP`。使用`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`
|
||||||
|
访问目标的功能。如果绑定了不正确的IP会导致代理不能工作。
|
||||||
|
|
||||||
`proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B`
|
`proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B`
|
||||||
|
|
||||||
### 3.7 查看帮助
|
### 3.7 查看帮助
|
||||||
|
|
||||||
`proxy help udp`
|
`proxy help udp`
|
||||||
|
|
||||||
## 4.内网穿透
|
## 4.内网穿透
|
||||||
|
|
||||||
### 4.1、原理说明
|
### 4.1、原理说明
|
||||||
|
|
||||||
内网穿透,分为两个版本,“多链接版本”和“多路复用版本”,一般像web服务这种不是长时间连接的服务建议用“多链接版本”,如果是要保持长时间连接建议使用“多路复用版本”。
|
内网穿透,分为两个版本,“多链接版本”和“多路复用版本”,一般像web服务这种不是长时间连接的服务建议用“多链接版本”,如果是要保持长时间连接建议使用“多路复用版本”。
|
||||||
|
|
||||||
1. 多链接版本,对应的子命令是tserver,tclient,tbridge。
|
1. 多链接版本,对应的子命令是tserver,tclient,tbridge。
|
||||||
1. 多路复用版本,对应的子命令是server,client,bridge。
|
1. 多路复用版本,对应的子命令是server,client,bridge。
|
||||||
1. 多链接版本和多路复用版本的参数和使用方式完全一样。
|
1. 多链接版本和多路复用版本的参数和使用方式完全一样。
|
||||||
@@ -1001,7 +1053,9 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。
|
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。
|
||||||
|
|
||||||
### 4.2、TCP普通用法
|
### 4.2、TCP普通用法
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口
|
- 公司机器A提供了web服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -1009,17 +1063,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
|
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.3、微信接口本地开发
|
### 4.3、微信接口本地开发
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 自己的笔记本提供了nginx服务80端口
|
- 自己的笔记本提供了nginx服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -1029,19 +1086,21 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
|
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
|
||||||
配置域名wx-dev.xxx.com到具体的目录即可。
|
配置域名wx-dev.xxx.com到具体的目录即可。
|
||||||
|
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行,确保vps的80端口没被其它程序占用。
|
1. 在vps上执行,确保vps的80端口没被其它程序占用。
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在自己笔记本上面执行
|
1. 在自己笔记本上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.4、UDP普通用法
|
### 4.4、UDP普通用法
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了DNS解析服务,UDP:53端口
|
- 公司机器A提供了DNS解析服务,UDP:53端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -1049,17 +1108,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。
|
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.5、高级用法一
|
### 4.5、高级用法一
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口
|
- 公司机器A提供了web服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -1068,18 +1130,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
通过加密隧道访问到公司机器A的80端口。
|
通过加密隧道访问到公司机器A的80端口。
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在家里电脑上执行
|
1. 在家里电脑上执行
|
||||||
`proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.6、高级用法二
|
### 4.6、高级用法二
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
|
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
|
||||||
只要在同一个bridge上唯一即可。
|
只要在同一个bridge上唯一即可。
|
||||||
@@ -1087,6 +1151,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。
|
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口,ftp服务21端口
|
- 公司机器A提供了web服务80端口,ftp服务21端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -1095,16 +1160,18 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口
|
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.7.server的-r参数
|
### 4.7.server的-r参数
|
||||||
|
|
||||||
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
||||||
|
|
||||||
4.7.1.协议PROTOCOL:tcp、udp、ptcp、pudp。
|
4.7.1.协议PROTOCOL:tcp、udp、ptcp、pudp。
|
||||||
@@ -1120,6 +1187,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
||||||
|
|
||||||
### 4.8.server和client通过代理连接bridge
|
### 4.8.server和client通过代理连接bridge
|
||||||
|
|
||||||
有时候server或者client所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
有时候server或者client所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
||||||
-J参数就可以帮助你让server或者client通过https或者socks5代理去连接bridge。
|
-J参数就可以帮助你让server或者client通过https或者socks5代理去连接bridge。
|
||||||
-J参数格式如下:
|
-J参数格式如下:
|
||||||
@@ -1141,7 +1209,9 @@ port:代理的端口
|
|||||||
|
|
||||||
### 4.9.内网穿透HTTP服务
|
### 4.9.内网穿透HTTP服务
|
||||||
|
|
||||||
通常HTTP请求客户端会使用server的ip和端口去设置HOST字段,但是与期望的后端实际HOST不一样,这样就造成了tcp是通的, 但后端依赖HOST字段定位虚拟主机就不能工作.现在用`--http-host`参数强制设置http头部的HOST字段值为后端实际的域名和端口即可轻松解决,另外使用了`--http-host`参数之后,会在每个HTTP请求的头部增加两个头部 `X-Forwarded-For` 和 `X-Real-IP` 值是客户端IP, 这样后端http服务就能方便的获取用户端真实IP地址。
|
通常HTTP请求客户端会使用server的ip和端口去设置HOST字段,但是与期望的后端实际HOST不一样,这样就造成了tcp是通的, 但后端依赖HOST字段定位虚拟主机就不能工作.现在用`--http-host`
|
||||||
|
参数强制设置http头部的HOST字段值为后端实际的域名和端口即可轻松解决,另外使用了`--http-host`参数之后,会在每个HTTP请求的头部增加两个头部 `X-Forwarded-For` 和 `X-Real-IP`
|
||||||
|
值是客户端IP, 这样后端http服务就能方便的获取用户端真实IP地址。
|
||||||
|
|
||||||
`server`的--http-host参数格式如下:
|
`server`的--http-host参数格式如下:
|
||||||
|
|
||||||
@@ -1163,7 +1233,6 @@ port:代理的端口
|
|||||||
|
|
||||||
另外只有设置了`--http-host`参数
|
另外只有设置了`--http-host`参数
|
||||||
|
|
||||||
|
|
||||||
### 4.10 关于流量统计
|
### 4.10 关于流量统计
|
||||||
|
|
||||||
如果单独启动一个server对接上级是proxy-admin控制面板,需要在上级控制面板里面新建一个映射,获得个映射规则的ID,
|
如果单独启动一个server对接上级是proxy-admin控制面板,需要在上级控制面板里面新建一个映射,获得个映射规则的ID,
|
||||||
@@ -1171,6 +1240,7 @@ port:代理的端口
|
|||||||
然后启动server的时候加上参数 --server-id=映射规则的ID 才能统计到流量。
|
然后启动server的时候加上参数 --server-id=映射规则的ID 才能统计到流量。
|
||||||
|
|
||||||
### 4.11 关于p2p
|
### 4.11 关于p2p
|
||||||
|
|
||||||
内网穿透支持在server和client网络情况满足的情况下,server和client之间通过p2p直接连接,开启方法是:
|
内网穿透支持在server和client网络情况满足的情况下,server和client之间通过p2p直接连接,开启方法是:
|
||||||
|
|
||||||
在启动bridge,server,client到时候都加上`--p2p`参数即可。server的-r参数可以针对端口是否启用p2p(ptcp和pudp)。
|
在启动bridge,server,client到时候都加上`--p2p`参数即可。server的-r参数可以针对端口是否启用p2p(ptcp和pudp)。
|
||||||
@@ -1178,6 +1248,7 @@ port:代理的端口
|
|||||||
如果server和client之间p2p打洞失败,那么会自动切换使用bridge中转传输数据。
|
如果server和client之间p2p打洞失败,那么会自动切换使用bridge中转传输数据。
|
||||||
|
|
||||||
### 4.12 客户端key白名单
|
### 4.12 客户端key白名单
|
||||||
|
|
||||||
内网穿透bridge可以设置客户端key白名单,参数是--client-keys,格式可以是:
|
内网穿透bridge可以设置客户端key白名单,参数是--client-keys,格式可以是:
|
||||||
|
|
||||||
a.文件名,文件内容一行一个客户端key只能包含数字字母下划线,也就是客户端启动参数--k的值,只有客户端key在此白名单的客户端才能连接。# 开头的行,为注释。
|
a.文件名,文件内容一行一个客户端key只能包含数字字母下划线,也就是客户端启动参数--k的值,只有客户端key在此白名单的客户端才能连接。# 开头的行,为注释。
|
||||||
@@ -1193,11 +1264,13 @@ c.”str://“开头的英文逗号分割的多个key,比如:str://default,c
|
|||||||
nat类型判断,方便查看网络是否支持p2p,可以执行:`proxy tools -a nattype`
|
nat类型判断,方便查看网络是否支持p2p,可以执行:`proxy tools -a nattype`
|
||||||
|
|
||||||
### 4.14 查看帮助
|
### 4.14 查看帮助
|
||||||
|
|
||||||
`proxy help bridge`
|
`proxy help bridge`
|
||||||
`proxy help server`
|
`proxy help server`
|
||||||
`proxy help client`
|
`proxy help client`
|
||||||
|
|
||||||
## 5.SOCKS5代理
|
## 5.SOCKS5代理
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证。
|
SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证。
|
||||||
@@ -1206,10 +1279,10 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
|
|
||||||
***那么需要加上`-g VPS公网IP`参数,SOCKS5代理的UDP功能才能正常工作。***
|
***那么需要加上`-g VPS公网IP`参数,SOCKS5代理的UDP功能才能正常工作。***
|
||||||
|
|
||||||
***socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能,
|
***socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。***
|
||||||
通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。***
|
|
||||||
|
|
||||||
### 5.1 普通SOCKS5代理
|
### 5.1 普通SOCKS5代理
|
||||||
|
|
||||||
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 0 --udp`
|
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 0 --udp`
|
||||||
|
|
||||||
-p参数支持的写法:
|
-p参数支持的写法:
|
||||||
@@ -1221,56 +1294,67 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
```
|
```
|
||||||
|
|
||||||
### 5.2.普通二级SOCKS5代理
|
### 5.2.普通二级SOCKS5代理
|
||||||
|
|
||||||

|

|
||||||
使用本地端口8090,假设上级SOCKS5代理是`22.22.22.22:8080`
|
使用本地端口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" --udp-port 0 --udp`
|
`proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" --udp-port 0 --udp`
|
||||||
我们还可以指定网站域名的黑白名单文件,一行一个域名,匹配规则是最右匹配,比如:baidu.com,匹配的是*.*.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 --udp-port 0 --udp`
|
.baidu.com,黑名单的域名域名直接走上级代理,白名单的域名不走上级代理;如果域名即在黑名单又在白名单中,那么黑名单起作用。
|
||||||
|
`proxy 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二级代理(加密)
|
### 5.3.SOCKS二级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级SOCKS代理(VPS,IP:22.22.22.22)
|
一级SOCKS代理(VPS,IP:22.22.22.22)
|
||||||
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
|
|
||||||
二级SOCKS代理(本地Linux)
|
二级SOCKS代理(本地Linux)
|
||||||
`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 socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
那么访问本地的8080端口就是访问VPS上面的代理端口38080。
|
那么访问本地的8080端口就是访问VPS上面的代理端口38080。
|
||||||
|
|
||||||
二级SOCKS代理(本地windows)
|
二级SOCKS代理(本地windows)
|
||||||
`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`
|
`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`
|
||||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||||
|
|
||||||
### 5.4.SOCKS三级代理(加密)
|
### 5.4.SOCKS三级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级SOCKS代理VPS_01,IP:22.22.22.22
|
一级SOCKS代理VPS_01,IP:22.22.22.22
|
||||||
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
二级SOCKS代理VPS_02,IP:33.33.33.33
|
二级SOCKS代理VPS_02,IP:33.33.33.33
|
||||||
`proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
三级SOCKS代理(本地)
|
三级SOCKS代理(本地)
|
||||||
`proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080。
|
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080。
|
||||||
|
|
||||||
### 5.5.SOCKS代理流量强制走上级SOCKS代理
|
### 5.5.SOCKS代理流量强制走上级SOCKS代理
|
||||||
|
|
||||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级SOCKS代理.通过--always可以使全部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 --udp-port 0 --udp`
|
`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.SOCKS通过SSH中转
|
||||||
|
|
||||||

|

|
||||||
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
||||||
假设有:vps
|
假设有:vps
|
||||||
|
|
||||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||||
- 用户user的ssh私钥名称是user.key
|
- 用户user的ssh私钥名称是user.key
|
||||||
|
|
||||||
#### *5.6.1 ssh用户名和密码的方式*
|
#### *5.6.1 ssh用户名和密码的方式*
|
||||||
|
|
||||||
本地SOCKS5代理28080端口,执行:
|
本地SOCKS5代理28080端口,执行:
|
||||||
`proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080" --udp-port 0 --udp`
|
`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用户名和密钥的方式*
|
#### *5.6.2 ssh用户名和密钥的方式*
|
||||||
|
|
||||||
本地SOCKS5代理28080端口,执行:
|
本地SOCKS5代理28080端口,执行:
|
||||||
`proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080" --udp-port 0 --udp`
|
`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访问目标地址。
|
那么访问本地的28080端口就是通过VPS访问目标地址。
|
||||||
|
|
||||||
### 5.7.认证
|
### 5.7.认证
|
||||||
|
|
||||||
对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
|
对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
|
||||||
`proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
`proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
||||||
多个用户,重复-a参数即可。
|
多个用户,重复-a参数即可。
|
||||||
@@ -1278,6 +1362,7 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
`proxy socks -t tcp -p ":33080" -F auth-file.txt`
|
`proxy socks -t tcp -p ":33080" -F auth-file.txt`
|
||||||
|
|
||||||
### 5.8.KCP协议传输
|
### 5.8.KCP协议传输
|
||||||
|
|
||||||
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
||||||
|
|
||||||
一级HTTP代理(VPS,IP:22.22.22.22)
|
一级HTTP代理(VPS,IP:22.22.22.22)
|
||||||
@@ -1292,12 +1377,14 @@ KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
|||||||
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
||||||
|
|
||||||
### 5.9.自定义DNS
|
### 5.9.自定义DNS
|
||||||
|
|
||||||
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
||||||
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
||||||
比如:
|
比如:
|
||||||
`proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
`proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
||||||
|
|
||||||
### 5.10 自定义加密
|
### 5.10 自定义加密
|
||||||
|
|
||||||
proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
||||||
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
|
|
||||||
@@ -1312,7 +1399,6 @@ proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密t
|
|||||||
`proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
`proxy socks -t tcp -z demo_password -p :7777`
|
`proxy socks -t tcp -z demo_password -p :7777`
|
||||||
@@ -1323,6 +1409,7 @@ proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密t
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 5.11 压缩传输
|
### 5.11 压缩传输
|
||||||
|
|
||||||
proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
||||||
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
||||||
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -1339,7 +1426,6 @@ proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以
|
|||||||
`proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1350,12 +1436,11 @@ proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以
|
|||||||
`proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080`
|
`proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
### 5.12 负载均衡
|
### 5.12 负载均衡
|
||||||
|
|
||||||
SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
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`
|
`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 设置重试间隔和超时时间
|
### 5.12.1 设置重试间隔和超时时间
|
||||||
|
|
||||||
@@ -1383,8 +1468,8 @@ SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy socks -t tcp -p :33080 --bind-listen`
|
`proxy socks -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -1396,16 +1481,26 @@ SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 5.15 级联认证
|
### 5.15 级联认证
|
||||||
|
|
||||||
SOCKS5支持级联认证,-A可以设置上级认证信息。
|
SOCKS5支持级联认证,-A可以设置上级认证信息。
|
||||||
@@ -1426,8 +1521,8 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
|
|
||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
|
|
||||||
### 5.17 智能模式
|
### 5.17 智能模式
|
||||||
|
|
||||||
智能模式设置,可以是intelligent|direct|parent三者之一。
|
智能模式设置,可以是intelligent|direct|parent三者之一。
|
||||||
默认是:parent。
|
默认是:parent。
|
||||||
每个值的含义如下:
|
每个值的含义如下:
|
||||||
@@ -1444,14 +1539,19 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080`
|
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080`
|
||||||
|
|
||||||
### 5.19 查看帮助
|
### 5.19 查看帮助
|
||||||
|
|
||||||
`proxy help socks`
|
`proxy help socks`
|
||||||
|
|
||||||
## 6.SPS协议转换
|
## 6.SPS协议转换
|
||||||
|
|
||||||
### 6.1 功能介绍
|
### 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`功能支持的加密方法为:aes-128-cfb , aes-128-ctr , aes-128-gcm , aes-192-cfb , aes-192-ctr , aes-192-gcm , aes-256-cfb , aes-256-ctr , aes-256-gcm , bf-cfb , cast5-cfb , chacha20 , chacha20-ietf , chacha20-ietf-poly1305 , des-cfb , rc4-md5 , rc4-md5-6 , salsa20 , xchacha20
|
代理协议转换使用的是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`功能支持的加密方法为:aes-128-cfb , aes-128-ctr , aes-128-gcm , aes-192-cfb , aes-192-ctr , aes-192-gcm , aes-256-cfb ,
|
||||||
|
aes-256-ctr , aes-256-gcm , bf-cfb , cast5-cfb , chacha20 , chacha20-ietf , chacha20-ietf-poly1305 , des-cfb , rc4-md5 ,
|
||||||
|
rc4-md5-6 , salsa20 , xchacha20
|
||||||
|
|
||||||
本地监听端口-p参数支持的写法:
|
本地监听端口-p参数支持的写法:
|
||||||
|
|
||||||
@@ -1465,44 +1565,53 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
|
|
||||||
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
||||||
|
|
||||||
ss的udp功能默认关闭,可以通过--ssudp开启。socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能,
|
ss的udp功能默认关闭,可以通过--ssudp开启。socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port
|
||||||
通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。
|
0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。
|
||||||
|
|
||||||
### 6.2 HTTP(S)转HTTP(S)+SOCKS5+SS
|
### 6.2 HTTP(S)转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
转换后的SOCKS5或者SS代理不具备UDP功能。
|
转换后的SOCKS5或者SS代理不具备UDP功能。
|
||||||
假设已经存在一个普通的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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 tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个tls的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个tls的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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 tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个kcp的http(s)代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个kcp的http(s)代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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`
|
`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
|
### 6.3 SOCKS5转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
如果上级是SOCKS5而且支持UDP功能,那么转换后的SOCKS5或者SS代理仍然支持UDP功能。
|
如果上级是SOCKS5而且支持UDP功能,那么转换后的SOCKS5或者SS代理仍然支持UDP功能。
|
||||||
假设已经存在一个普通的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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 tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个tls的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个tls的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:
|
||||||
|
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 tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个kcp的socks5代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个kcp的socks5代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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`
|
`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
|
### 6.4 SS转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
SPS上级和本地支持ss协议,上级可以是SPS或者标准的ss服务,转换后的SOCKS5或者SS代理不具备UDP功能。
|
SPS上级和本地支持ss协议,上级可以是SPS或者标准的ss服务,转换后的SOCKS5或者SS代理不具备UDP功能。
|
||||||
假设已经存在一个普通的SS或者SPS代理(开启了ss,加密方式:aes-256-cfb,密码:demo):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,转换后的ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的SS或者SPS代理(开启了ss,加密方式:aes-256-cfb,密码:demo):127.0.0.1:8080,现在我们把它转为同时支持http(s)
|
||||||
|
和socks5和ss的普通代理,转换后的本地端口为18080,转换后的ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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`。
|
`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 链式连接
|
### 6.5 链式连接
|
||||||
|
|
||||||

|

|
||||||
上面提过多个sps结点可以层级连接构建加密通道,假设有如下vps和家里的pc电脑。
|
上面提过多个sps结点可以层级连接构建加密通道,假设有如下vps和家里的pc电脑。
|
||||||
vps01:2.2.2.2
|
vps01:2.2.2.2
|
||||||
@@ -1523,6 +1632,7 @@ vps02:3.3.3.3
|
|||||||
完成。
|
完成。
|
||||||
|
|
||||||
### 6.6 认证功能
|
### 6.6 认证功能
|
||||||
|
|
||||||
sps支持http(s)\socks5代理认证,可以级联认证,有四个重要的信息:
|
sps支持http(s)\socks5代理认证,可以级联认证,有四个重要的信息:
|
||||||
1:用户发送认证信息`user-auth`。
|
1:用户发送认证信息`user-auth`。
|
||||||
2:设置的本地认证信息`local-auth`。
|
2:设置的本地认证信息`local-auth`。
|
||||||
@@ -1588,6 +1698,7 @@ socks5wss 等价于 -S socks -T wss
|
|||||||
`#1`多个上级的负载均衡是权重策略时候,设置的权重,很少用到。
|
`#1`多个上级的负载均衡是权重策略时候,设置的权重,很少用到。
|
||||||
|
|
||||||
### 6.8 自定义加密
|
### 6.8 自定义加密
|
||||||
|
|
||||||
proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行
|
proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行
|
||||||
自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义
|
自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义
|
||||||
一个密码即可,加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
一个密码即可,加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
@@ -1606,7 +1717,6 @@ proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp
|
|||||||
`proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1618,6 +1728,7 @@ proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 6.9 压缩传输
|
### 6.9 压缩传输
|
||||||
|
|
||||||
proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
||||||
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
||||||
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -1634,7 +1745,6 @@ proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及
|
|||||||
`proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1646,6 +1756,7 @@ proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
### 6.10 禁用协议
|
### 6.10 禁用协议
|
||||||
|
|
||||||
SPS默认情况下一个端口支持http(s)和socks5两种代理协议,我们可以通过参数禁用某个协议
|
SPS默认情况下一个端口支持http(s)和socks5两种代理协议,我们可以通过参数禁用某个协议
|
||||||
比如:
|
比如:
|
||||||
1.禁用HTTP(S)代理功能只保留SOCKS5代理功能,参数:`--disable-http`。
|
1.禁用HTTP(S)代理功能只保留SOCKS5代理功能,参数:`--disable-http`。
|
||||||
@@ -1674,8 +1785,8 @@ sps下级,限速100K
|
|||||||
|
|
||||||
`proxy sps -t tcp -p :33080 --bind-listen`
|
`proxy sps -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -1687,16 +1798,26 @@ sps下级,限速100K
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 6.13 证书参数使用base64数据
|
### 6.13 证书参数使用base64数据
|
||||||
|
|
||||||
默认情况下-C,-K参数是crt证书和key文件的路径,
|
默认情况下-C,-K参数是crt证书和key文件的路径,
|
||||||
@@ -1704,11 +1825,13 @@ sps下级,限速100K
|
|||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
### 6.14 独立服务
|
### 6.14 独立服务
|
||||||
|
|
||||||
sps一个端口可完成完整功能的代理`http(s)\socks\ss`功能。
|
sps一个端口可完成完整功能的代理`http(s)\socks\ss`功能。
|
||||||
下面这个命令,就是一键开启http(s)\ss\socks服务,同时开启socks5的udp和ss的udp功能。
|
下面这个命令,就是一键开启http(s)\ss\socks服务,同时开启socks5的udp和ss的udp功能。
|
||||||
`proxy sps -p :33080 --ssudp --udp --udp-port 0`
|
`proxy sps -p :33080 --ssudp --udp --udp-port 0`
|
||||||
|
|
||||||
### 6.15 目标重定向
|
### 6.15 目标重定向
|
||||||
|
|
||||||
sps功能提供的http(s)\socks5\ss代理功能,客户端通过sps代理去连接指定的“目标”,这个“目标”一般是网站也可能是任意的tcp地址,
|
sps功能提供的http(s)\socks5\ss代理功能,客户端通过sps代理去连接指定的“目标”,这个“目标”一般是网站也可能是任意的tcp地址,
|
||||||
网站”目标“一般是foo.com:80,foo.com:443,sps支持使用--rewrite参数指定一个“目标”重定向规则文件,对目标进行重定向,客户端是无感知的,
|
网站”目标“一般是foo.com:80,foo.com:443,sps支持使用--rewrite参数指定一个“目标”重定向规则文件,对目标进行重定向,客户端是无感知的,
|
||||||
比如你对“目标”:demo.com:80重定向到192.168.0.12:80,那么客户端访问网站demo.com,其实访问的是192.168.0.12提供的网站服务。
|
比如你对“目标”:demo.com:80重定向到192.168.0.12:80,那么客户端访问网站demo.com,其实访问的是192.168.0.12提供的网站服务。
|
||||||
@@ -1734,6 +1857,7 @@ www.a.com:80 10.0.0.2:8080
|
|||||||
要指定和tcp端口不一样的端口。
|
要指定和tcp端口不一样的端口。
|
||||||
|
|
||||||
### 6.17 iptables 透明代理
|
### 6.17 iptables 透明代理
|
||||||
|
|
||||||
sps模式支持Linux系统的iptables转发支持,也就是通常所说的iptables透明代理,如果在网关设备上进行iptables透明代理,那么对通过网关联网的设备就能实现无感知的代理。
|
sps模式支持Linux系统的iptables转发支持,也就是通常所说的iptables透明代理,如果在网关设备上进行iptables透明代理,那么对通过网关联网的设备就能实现无感知的代理。
|
||||||
|
|
||||||
启动命令实例:
|
启动命令实例:
|
||||||
@@ -1743,6 +1867,7 @@ sps模式支持Linux系统的iptables转发支持,也就是通常所说的ipta
|
|||||||
这里假设存在一个http的上级代理1.1.1.1:33080,使用ws传输数据。
|
这里假设存在一个http的上级代理1.1.1.1:33080,使用ws传输数据。
|
||||||
|
|
||||||
然后添加iptables规则,下面是参考规则:
|
然后添加iptables规则,下面是参考规则:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#上级proxy服务端服务器IP地址:
|
#上级proxy服务端服务器IP地址:
|
||||||
proxy_server_ip=1.1.1.1
|
proxy_server_ip=1.1.1.1
|
||||||
@@ -1776,6 +1901,7 @@ iptables -t nat -A PREROUTING -p tcp -j PROXY
|
|||||||
# Apply the rules to localhost
|
# Apply the rules to localhost
|
||||||
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
||||||
```
|
```
|
||||||
|
|
||||||
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
||||||
- 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X 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
|
- 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN
|
||||||
@@ -1787,13 +1913,16 @@ iptables -t nat -A OUTPUT -p tcp -j PROXY
|
|||||||
## 7.KCP配置
|
## 7.KCP配置
|
||||||
|
|
||||||
### 7.1 配置介绍
|
### 7.1 配置介绍
|
||||||
|
|
||||||
proxy的很多功能都支持kcp协议,凡是使用了kcp协议的功能都支持这里介绍的配置参数。
|
proxy的很多功能都支持kcp协议,凡是使用了kcp协议的功能都支持这里介绍的配置参数。
|
||||||
所以这里统一对KCP配置参数进行介绍。
|
所以这里统一对KCP配置参数进行介绍。
|
||||||
|
|
||||||
### 7.2 详细配置
|
### 7.2 详细配置
|
||||||
|
|
||||||
所有的KCP配置参数共有17个,你可以都不用设置,他们都有默认值,如果为了或者最好的效果,
|
所有的KCP配置参数共有17个,你可以都不用设置,他们都有默认值,如果为了或者最好的效果,
|
||||||
就需要自己根据自己根据网络情况对参数进行配置。由于kcp配置很复杂需要一定的网络基础知识,
|
就需要自己根据自己根据网络情况对参数进行配置。由于kcp配置很复杂需要一定的网络基础知识,
|
||||||
如果想获得kcp参数更详细的配置和解说,请自行搜索。每个参数的命令行名称以及默认值和简单的功能说明如下:
|
如果想获得kcp参数更详细的配置和解说,请自行搜索。每个参数的命令行名称以及默认值和简单的功能说明如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
--kcp-key="secrect" pre-shared secret between client and server
|
--kcp-key="secrect" pre-shared secret between client and server
|
||||||
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
|
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
|
||||||
@@ -1814,6 +1943,7 @@ twofish, cast5, 3des, tea, xtea, xor, sm4, none
|
|||||||
--kcp-sockbuf=4194304 be carefull!
|
--kcp-sockbuf=4194304 be carefull!
|
||||||
--kcp-keepalive=10 be carefull!
|
--kcp-keepalive=10 be carefull!
|
||||||
```
|
```
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
参数:--kcp-mode中的四种fast3, fast2, fast, normal模式,
|
参数:--kcp-mode中的四种fast3, fast2, fast, normal模式,
|
||||||
相当于设置了下面四个参数:
|
相当于设置了下面四个参数:
|
||||||
@@ -1825,6 +1955,7 @@ fast3:`--nodelay=1 --interval=10 --resend=2 --nc=1`
|
|||||||
## 8.安全DNS
|
## 8.安全DNS
|
||||||
|
|
||||||
### 8.1 介绍
|
### 8.1 介绍
|
||||||
|
|
||||||
众所周知DNS是UDP端口53提供的服务,但是随着网络的发展一些知名DNS服务器也支持TCP方式dns查询,比如谷歌的8.8.8.8,proxy的DNS防污染服务器原理就是在本地启动一个proxy的DNS代理服务器,它用TCP的方式通过上级代理进行dns查询。如果它和上级代理通讯采用加密的方式,那么就可以进行安全无污染的DNS解析,还支持独立服务,并发解析,支持增强的hosts文件功能支持灵活的并发解析转发。
|
众所周知DNS是UDP端口53提供的服务,但是随着网络的发展一些知名DNS服务器也支持TCP方式dns查询,比如谷歌的8.8.8.8,proxy的DNS防污染服务器原理就是在本地启动一个proxy的DNS代理服务器,它用TCP的方式通过上级代理进行dns查询。如果它和上级代理通讯采用加密的方式,那么就可以进行安全无污染的DNS解析,还支持独立服务,并发解析,支持增强的hosts文件功能支持灵活的并发解析转发。
|
||||||
|
|
||||||
dns解析顺序:
|
dns解析顺序:
|
||||||
@@ -1837,9 +1968,9 @@ direct:通过本地网络去连接-q参数指定的dns服务器去解析域名
|
|||||||
system:通过系统dns去解析域名。
|
system:通过系统dns去解析域名。
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
--hosts 参数指定的host文件格式和系统hosts文件一致,而且域名支持通配符,可以参考hosts文件。
|
--hosts 参数指定的host文件格式和系统hosts文件一致,而且域名支持通配符,可以参考hosts文件。
|
||||||
--forward 参数指定的解析转发规则文件,格式可以参考resolve.rules文件,域名支持通配符,支持为每个域名指定多个dns服务器并发解析,谁最快解析成功就用谁的解析结果。
|
--forward 参数指定的解析转发规则文件,格式可以参考resolve.rules文件,域名支持通配符,支持为每个域名指定多个dns服务器并发解析,谁最快解析成功就用谁的解析结果。
|
||||||
-q 参数可以指定多个远程dns服务器,执行并发解析谁最快解析成功就用谁的解析结果,默认是:1.1.1.1,8.8.8.8,9.9.9.9,多个用逗号分割,
|
-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
|
比如还可以带端口:1.1.1.1,8.8.8.8#53,9.9.9.9
|
||||||
|
|
||||||
如果独立服务,不需要上级:
|
如果独立服务,不需要上级:
|
||||||
@@ -1870,7 +2001,7 @@ or
|
|||||||
上级代理执行的命令是:
|
上级代理执行的命令是:
|
||||||
`proxy http -t tls -C proxy.crt -K proxy.key -p :33080`
|
`proxy http -t tls -C proxy.crt -K proxy.key -p :33080`
|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
`proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
||||||
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
||||||
|
|
||||||
#### 8.2.4 TLS加密的SOCKS5上级代理
|
#### 8.2.4 TLS加密的SOCKS5上级代理
|
||||||
@@ -1879,7 +2010,7 @@ or
|
|||||||
上级代理执行的命令是:
|
上级代理执行的命令是:
|
||||||
`proxy socks -t tls -C proxy.crt -K proxy.key -p :33080`
|
`proxy socks -t tls -C proxy.crt -K proxy.key -p :33080`
|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
`proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
||||||
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
||||||
|
|
||||||
#### 8.2.5 KCP加密的HTTP(S)上级代理
|
#### 8.2.5 KCP加密的HTTP(S)上级代理
|
||||||
@@ -1931,6 +2062,7 @@ proxy的http(s)/socks5/sps代理功能,支持通过API控制用户对代理对
|
|||||||
- 缓存认证结果,时间可以设置,减轻API压力。
|
- 缓存认证结果,时间可以设置,减轻API压力。
|
||||||
|
|
||||||
#### 具体使用
|
#### 具体使用
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`和`--auth-cache`三个参数控制。
|
proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`和`--auth-cache`三个参数控制。
|
||||||
参数`--auth-url`是HTTP API接口地址,客户端连接的时候,proxy会GET方式请求这url,带上下面参数,如果返回HTTP状态码204,代表认证成功,其它情况认为认证失败。
|
参数`--auth-url`是HTTP API接口地址,客户端连接的时候,proxy会GET方式请求这url,带上下面参数,如果返回HTTP状态码204,代表认证成功,其它情况认为认证失败。
|
||||||
|
|
||||||
@@ -1938,6 +2070,7 @@ proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`
|
|||||||
`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`
|
`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和pass` 当代理开启了认证功能,这里就是客户端提供的用户名和密码。
|
`user和pass` 当代理开启了认证功能,这里就是客户端提供的用户名和密码。
|
||||||
`client_addr` 客户端访问代理时的用的地址,格式IP:端口。
|
`client_addr` 客户端访问代理时的用的地址,格式IP:端口。
|
||||||
`local_addr` 客户端访问的代理地址,格式IP:端口。
|
`local_addr` 客户端访问的代理地址,格式IP:端口。
|
||||||
@@ -1946,6 +2079,7 @@ proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`
|
|||||||
`target` 客户端要访问的目标,如果是http(s)代理,target是访问的具体url;如果是socks5代理,target是空。
|
`target` 客户端要访问的目标,如果是http(s)代理,target是访问的具体url;如果是socks5代理,target是空。
|
||||||
|
|
||||||
#### 示例
|
#### 示例
|
||||||
|
|
||||||
假设--auth-url http://127.0.0.1:333/auth.php 指向了一个php接口地址.
|
假设--auth-url http://127.0.0.1:333/auth.php 指向了一个php接口地址.
|
||||||
auth.php内容如下:
|
auth.php内容如下:
|
||||||
|
|
||||||
@@ -1986,6 +2120,7 @@ if($ok){
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### 解释
|
#### 解释
|
||||||
|
|
||||||
userconns:用户的最大连接数,不限制为0或者不设置这个头部。
|
userconns:用户的最大连接数,不限制为0或者不设置这个头部。
|
||||||
ipconns:用户IP的最大连接数,不限制为0或者不设置这个头部。
|
ipconns:用户IP的最大连接数,不限制为0或者不设置这个头部。
|
||||||
userrate:用户的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
|
userrate:用户的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
|
||||||
@@ -1993,7 +2128,9 @@ iprate:用户IP的单个TCP连接速率限制,单位:字节/秒,不限
|
|||||||
upstream:使用的上级,没有为空,或者不设置这个头部。
|
upstream:使用的上级,没有为空,或者不设置这个头部。
|
||||||
|
|
||||||
#### 提示
|
#### 提示
|
||||||
1.默认情况下,设置了`--auth-url`是强制要求客户端提供用户名和密码的;如果不需要强制要求客户端提供用户名密码,并认证,可以加上`--auth-nouser`,每次访问仍然会访问认证地址`--auth-url`进行认证,当客户端没有发生认证信息当时候,php接口里面接收的$user认证用户名和$pass认证密码都为空。
|
|
||||||
|
1.默认情况下,设置了`--auth-url`是强制要求客户端提供用户名和密码的;如果不需要强制要求客户端提供用户名密码,并认证,可以加上`--auth-nouser`,每次访问仍然会访问认证地址`--auth-url`
|
||||||
|
进行认证,当客户端没有发生认证信息当时候,php接口里面接收的$user认证用户名和$pass认证密码都为空。
|
||||||
2.连接数限制优先级:用户认证文件连接数限制-》文件ip.limit连接数限制-》API用户连接数限制-》API的IP连接数限制-》命令行全局连接数限制。
|
2.连接数限制优先级:用户认证文件连接数限制-》文件ip.limit连接数限制-》API用户连接数限制-》API的IP连接数限制-》命令行全局连接数限制。
|
||||||
3.速率限制优先级:用户认证文件速率限制-》文件ip.limit速率限制-》API用户速率限制-》API的IP速率限制-》命令行全局速率限制。
|
3.速率限制优先级:用户认证文件速率限制-》文件ip.limit速率限制-》API用户速率限制-》API的IP速率限制-》命令行全局速率限制。
|
||||||
3.上级获取优先级:用户认证文件的upstream-》文件ip.limit的upstream-》API的upstream-》命令行指定的上级。
|
3.上级获取优先级:用户认证文件的upstream-》文件ip.limit的upstream-》API的upstream-》命令行指定的上级。
|
||||||
@@ -2013,6 +2150,7 @@ service是socks时,upstream只支持socks5代理,格式:
|
|||||||
upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2.2.2.2:33080?argk=argv`,具体介绍请参考SPS章节的,**多个上级**,`-P`参数的说明。
|
upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2.2.2.2:33080?argk=argv`,具体介绍请参考SPS章节的,**多个上级**,`-P`参数的说明。
|
||||||
3.参数,`?`后面`argk=argv`是参数:参数名称=参数值,多个参数用`&`连接。
|
3.参数,`?`后面`argk=argv`是参数:参数名称=参数值,多个参数用`&`连接。
|
||||||
支持的所有参数如下,和命令行同名参数意义一致。
|
支持的所有参数如下,和命令行同名参数意义一致。
|
||||||
|
|
||||||
1. parent-type : 上级底层传输类型,支持 tcp,tls,ws,wss。
|
1. parent-type : 上级底层传输类型,支持 tcp,tls,ws,wss。
|
||||||
2. parent-ws-method : 上级底层ws传输类型的加密方法,支持的值和命令行支持的值范围一样。
|
2. parent-ws-method : 上级底层ws传输类型的加密方法,支持的值和命令行支持的值范围一样。
|
||||||
3. parent-ws-password : 上级底层ws传输类型的加密密码,数字字母组成的密码。
|
3. parent-ws-password : 上级底层ws传输类型的加密密码,数字字母组成的密码。
|
||||||
@@ -2027,19 +2165,18 @@ upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2
|
|||||||
proxy的http(s)/socks5/sps/tcp/udp代理功能支持流量上报,可以通过参数`--traffic-url`设置一个http接口地址。
|
proxy的http(s)/socks5/sps/tcp/udp代理功能支持流量上报,可以通过参数`--traffic-url`设置一个http接口地址。
|
||||||
proxy会把连接使用的流量上报到这个地址,具体情况是,proxy发送一个HTTP到GET请求到`--traffic-url`设置的HTTP URL地址.
|
proxy会把连接使用的流量上报到这个地址,具体情况是,proxy发送一个HTTP到GET请求到`--traffic-url`设置的HTTP URL地址.
|
||||||
上报模式有两种,可以通过`--traffic-mode`参数指定,可以是`normal`普通模式上报,也可以是`fast`快速模式上报。
|
上报模式有两种,可以通过`--traffic-mode`参数指定,可以是`normal`普通模式上报,也可以是`fast`快速模式上报。
|
||||||
|
|
||||||
1. `normal`普通模式上报
|
1. `normal`普通模式上报
|
||||||
当连接释放时,proxy会把此次连接使用的流量上报到这个`--traffic-url`地址.
|
当连接释放时,proxy会把此次连接使用的流量上报到这个`--traffic-url`地址.
|
||||||
2. `fast`快速模式上报
|
2. `fast`快速模式上报
|
||||||
对已经建立的每个连接,proxy会`定时`把这个连接产生的流量上报到这个这个`--traffic-url`地址.
|
对已经建立的每个连接,proxy会`定时`把这个连接产生的流量上报到这个这个`--traffic-url`地址.
|
||||||
`定时`默认是5秒,可以通过参数`--traffic-interval`修改`定时`为合适的秒数。
|
`定时`默认是5秒,可以通过参数`--traffic-interval`修改`定时`为合适的秒数。
|
||||||
流量上报功能结合上面的API认证功能可以实现实时控制用户的流量使用,流量统计,流量限制;流量上报到接口,接口把流量数据写入数据库,然后认证API查询数据库判断用户或者IP流量使用情况,用来确定用户是否可以认证成功.
|
流量上报功能结合上面的API认证功能可以实现实时控制用户的流量使用,流量统计,流量限制;流量上报到接口,接口把流量数据写入数据库,然后认证API查询数据库判断用户或者IP流量使用情况,用来确定用户是否可以认证成功.
|
||||||
|
|
||||||
下面是一个完整的URL请求实例:
|
下面是一个完整的URL请求实例:
|
||||||
|
|
||||||
`http://127.0.0.1:8080/auth.php?act=traffic&bytes=7627&client_addr=127.0.0.1%3A63637
|
`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
|
&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`
|
||||||
&server_addr=127.0.0.1%3A33080&target_addr=www.baidu.com%3A443
|
|
||||||
&upstream=http%3A%2F%2F127.0.0.1%3A3100&username=a`
|
|
||||||
|
|
||||||
请求参数说明:
|
请求参数说明:
|
||||||
id: 服务id标志。
|
id: 服务id标志。
|
||||||
@@ -2062,10 +2199,10 @@ upstream: 使用的上级,格式是标准URL格式,如果没有使用上级
|
|||||||
|
|
||||||
### 主动断开用户连接
|
### 主动断开用户连接
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能支持`控制接口`,可以通过参数`--control-url`指定的http接口地址,
|
proxy的http(s)/socks5/sps代理功能支持`控制接口`,可以通过参数`--control-url`指定的http接口地址, 那么proxy就会`定期`
|
||||||
那么proxy就会`定期`的把当前连接到proxy的全部用户名或客户端IP发送到此URL,具体情况是,proxy发送一个HTTP的POST请求到`--control-url`设置的HTTP URL地址.`定期`默认是30秒,可以通过`--control-sleep`参数修改此值。
|
的把当前连接到proxy的全部用户名或客户端IP发送到此URL,具体情况是,proxy发送一个HTTP的POST请求到`--control-url`设置的HTTP URL地址.`定期`默认是30秒,可以通过`--control-sleep`
|
||||||
当用户过期,或者用户流量已经用完,通过认证API只能控制用户不能新建连接,但是已经和proxy建立当连接没法立刻断开,
|
参数修改此值。
|
||||||
那么通过控制接口可以解决这个问题,控制接口会在最慢`定期`时间内通过控制接口返回的内容,结束已经无效的用户建立的连接。
|
当用户过期,或者用户流量已经用完,通过认证API只能控制用户不能新建连接,但是已经和proxy建立当连接没法立刻断开, 那么通过控制接口可以解决这个问题,控制接口会在最慢`定期`时间内通过控制接口返回的内容,结束已经无效的用户建立的连接。
|
||||||
|
|
||||||
#### 控制接口请求说明
|
#### 控制接口请求说明
|
||||||
|
|
||||||
@@ -2088,6 +2225,7 @@ ip:当前连接到proxy的客户端ip地址,多个使用英文逗号分割
|
|||||||
返回的用户和ip已经建立的连接会被proxy断开。
|
返回的用户和ip已经建立的连接会被proxy断开。
|
||||||
|
|
||||||
#### 示例
|
#### 示例
|
||||||
|
|
||||||
假设--control-url `http://127.0.0.1:33088/user/control.php` 指向了一个php接口地址.
|
假设--control-url `http://127.0.0.1:33088/user/control.php` 指向了一个php接口地址.
|
||||||
control.php内容如下:
|
control.php内容如下:
|
||||||
|
|
||||||
@@ -2111,19 +2249,22 @@ echo json_encode($data);
|
|||||||
|
|
||||||
### 使用代理
|
### 使用代理
|
||||||
|
|
||||||
http(s)/socks5/sps认证API(`--auth-url`)、控制API(`--control-url`)、流量上报API(`--traffic-url`)三个地址的访问,支持通过代理访问,参数是:`--auth-proxy`,格式和`--jumper`格式一致,详细详细请参考`--jumper`。
|
http(s)/socks5/sps认证API(`--auth-url`)、控制API(`--control-url`)、流量上报API(`--traffic-url`)三个地址的访问,支持通过代理访问,参数是:`--auth-proxy`
|
||||||
|
,格式和`--jumper`格式一致,详细详细请参考`--jumper`。
|
||||||
|
|
||||||
## 10.本地认证,限速,控制连接数
|
## 10.本地认证,限速,控制连接数
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能,支持通过配置文件控制用户对代理对访问,支持开启http(s)代理``Proxy Basic 代理认证`,socks5代理认证。
|
proxy的http(s)/socks5/sps代理功能,支持通过配置文件控制用户对代理对访问,支持开启http(s)代理``Proxy Basic 代理认证`,socks5代理认证。
|
||||||
|
|
||||||
### 开始使用
|
### 开始使用
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能可以通过
|
proxy的http(s)/socks5/sps代理功能可以通过
|
||||||
`--auth-file`,`--max-conns`,`--ip-limit`,`--rate-limit`,`-a`这五个参数控制。
|
`--auth-file`,`--max-conns`,`--ip-limit`,`--rate-limit`,`-a`这五个参数控制。
|
||||||
|
|
||||||
#### 参数详细解释
|
#### 参数详细解释
|
||||||
|
|
||||||
##### `--auth-file`
|
##### `--auth-file`
|
||||||
|
|
||||||
认证的用户名和密码文件,该参数指定一个文件,一行一条规则,格式是:"用户名:密码:连接数:速率:上级"。
|
认证的用户名和密码文件,该参数指定一个文件,一行一条规则,格式是:"用户名:密码:连接数:速率:上级"。
|
||||||
`连接数`是用户最大连接数,`速率`是用户每个tcp连接最大速度,单位是:字节/秒,`上级`是用户使用的上级。
|
`连接数`是用户最大连接数,`速率`是用户每个tcp连接最大速度,单位是:字节/秒,`上级`是用户使用的上级。
|
||||||
不仅可以通过`--auth-file`设置认证用户,也可以直接用`-a`参数设置,多个用户就重复多个`-a`参数即可。
|
不仅可以通过`--auth-file`设置认证用户,也可以直接用`-a`参数设置,多个用户就重复多个`-a`参数即可。
|
||||||
@@ -2138,9 +2279,11 @@ proxy的http(s)/socks5/sps代理功能可以通过
|
|||||||
`http://192.168.1.1:3100`是这个用户使用的上级,没有就留空
|
`http://192.168.1.1:3100`是这个用户使用的上级,没有就留空
|
||||||
|
|
||||||
##### `--max-conns`
|
##### `--max-conns`
|
||||||
|
|
||||||
限制代理服务的全局最大连接数,一个数字,0为不限制,默认0。
|
限制代理服务的全局最大连接数,一个数字,0为不限制,默认0。
|
||||||
|
|
||||||
##### `--ip-limit`
|
##### `--ip-limit`
|
||||||
|
|
||||||
控制客户端IP的连接数和连接速率,该参数指定一个文件,一行一条规则,#开头的是注视。
|
控制客户端IP的连接数和连接速率,该参数指定一个文件,一行一条规则,#开头的是注视。
|
||||||
示例文件ip.limit,规则格式如下:
|
示例文件ip.limit,规则格式如下:
|
||||||
`127.0.0.1:100:10240:http://192.168.1.1:3100`
|
`127.0.0.1:100:10240:http://192.168.1.1:3100`
|
||||||
@@ -2151,6 +2294,7 @@ proxy的http(s)/socks5/sps代理功能可以通过
|
|||||||
`http://192.168.1.1:3100`是这个IP使用的上级,没有就留空
|
`http://192.168.1.1:3100`是这个IP使用的上级,没有就留空
|
||||||
|
|
||||||
##### `--rate-limit`
|
##### `--rate-limit`
|
||||||
|
|
||||||
限制服务的每一个tcp连接的速度,比如:100K 2000K 1M . 0意味着无限制,默认0。
|
限制服务的每一个tcp连接的速度,比如:100K 2000K 1M . 0意味着无限制,默认0。
|
||||||
|
|
||||||
## 11.集群管理
|
## 11.集群管理
|
||||||
@@ -2172,10 +2316,10 @@ agent : 是功能参数,表示运行agent模式。
|
|||||||
-c :`proxyadmin集群版`的集群端口地址,格式:IP:端口。
|
-c :`proxyadmin集群版`的集群端口地址,格式:IP:端口。
|
||||||
|
|
||||||
-i : agent唯一标识,保证每个agent的都不一样,此处指定的`唯一标识`,在控制面板添加节点的时候用到,IP一栏填写这个`唯一标识`。
|
-i : agent唯一标识,保证每个agent的都不一样,此处指定的`唯一标识`,在控制面板添加节点的时候用到,IP一栏填写这个`唯一标识`。
|
||||||
如果-i不指定,默认是空,控制面板添加节点的时候IP一栏填写:agent的出口IP。
|
如果-i不指定,默认是空,控制面板添加节点的时候IP一栏填写:agent的出口IP。
|
||||||
|
|
||||||
-u: 代理参数,默认是空。可以指定一个代理,agent会通过这个代理与cluster通讯。
|
-u: 代理参数,默认是空。可以指定一个代理,agent会通过这个代理与cluster通讯。
|
||||||
格式和`--jumper`格式一致,详细情况请参考手册中`--jumper`部分。
|
格式和`--jumper`格式一致,详细情况请参考手册中`--jumper`部分。
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
@@ -2188,12 +2332,12 @@ client服务参数里面可以通过使用占位符:`{AGENT_ID}`引用agent的
|
|||||||
|
|
||||||
2.如果使用了代理参数`-u`,务必设置唯一标示参数`-i`,不然cluster无法区分不同的agent,agent将不能正常工作。
|
2.如果使用了代理参数`-u`,务必设置唯一标示参数`-i`,不然cluster无法区分不同的agent,agent将不能正常工作。
|
||||||
|
|
||||||
|
|
||||||
## 12.http、https 网站反向代理
|
## 12.http、https 网站反向代理
|
||||||
|
|
||||||
proxy可以对 http 和 https 网站进行反向代理。
|
proxy可以对 http 和 https 网站进行反向代理。
|
||||||
|
|
||||||
支持特性如下:
|
支持特性如下:
|
||||||
|
|
||||||
- http和https相互转换。
|
- http和https相互转换。
|
||||||
- 多个后端。
|
- 多个后端。
|
||||||
- 多个后端负载均衡。
|
- 多个后端负载均衡。
|
||||||
@@ -2210,3 +2354,62 @@ proxy rhttp -c rhttp.toml
|
|||||||
|
|
||||||
具体使用可以参考配置文件 [rhttp.toml](https://github.com/snail007/goproxy/blob/master/rhttp.toml) ,里面有完整配置说明。
|
具体使用可以参考配置文件 [rhttp.toml](https://github.com/snail007/goproxy/blob/master/rhttp.toml) ,里面有完整配置说明。
|
||||||
|
|
||||||
|
## 13.典型用法-拨号VPS
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、vps有一个主网卡,名称是eth0,ip是1.1.1.1,然后vps可以pppoe拨号,拨号建立的网卡名称前缀都是`pppoe_`。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- 提供动态IP代理服务,客户端访问`1.1.1.1`的代理端口`7777`,可以使用拨号的ip随机选择一个作为出口,`7777`端口支持代理认证。
|
||||||
|
- 7777端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
1. vps执行`proxy sps -p :7777 --bind-ip pppoe_*:7777 -a user1:password1 -a user2:password2 `。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. 更多认证方式可以参考手册`API认证`,`认证`部分。
|
||||||
|
|
||||||
|
## 14.典型用法-多IP的VPS
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、vps有一个主网卡,名称是`eth0`,ip是1.1.1.1,然后`eth0`配置了255个子网卡并设置了IP,比如:`eth0:1`,`eth0:255`,子网卡名称前缀都是:`eth0:`。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- 提供动态IP代理服务,客户端访问`1.1.1.1`的代理端口`7777`,可以使用配置的255个子网卡的ip中随机选择一个作为出口,`7777`端口支持代理认证。
|
||||||
|
- 7777端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
1. vps执行`proxy sps -p :7777 --bind-ip eth0::7777 -a user1:password1 -a user2:password2 `。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. 更多认证方式可以参考手册`API认证`,`认证`部分。
|
||||||
|
|
||||||
|
## 15.典型用法-拨号的VPS集群
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、有一批vps,它们每个都有一个主网卡配置了固定的IP:x.x.x.x,然后vps可以pppoe拨号,拨号建立的网卡名称前缀都是`pppoe_`。
|
||||||
|
|
||||||
|
2、有一个VPS作为代理入口,它的ip是2.2.2.2。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- `2.2.2.2`提供动态IP代理服务,客户端访问`2.2.2.2`的代理端口`8888`,可以随机选择拨号vps集群中一个,然后使用拨号vps的拨号ip随机选择一个作为出口ip,`8888`端口支持代理认证。
|
||||||
|
- `8888`端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
拨号VPS:
|
||||||
|
|
||||||
|
1. 拨号的vps执行`proxy sps -p :7777 --bind-ip pppoe_:7777 `。
|
||||||
|
|
||||||
|
入口VPS:
|
||||||
|
|
||||||
|
1. `2.2.2.2`
|
||||||
|
的vps执行`proxy sps -p :8888 -a user1:password1 -a user2:password2 -P http://x.x.x.1:7777 -P http://x.x.x.2:7777`。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. `x.x.x.1`,`x.x.x.2`是拨号vps的固定IP,有多个,重复`-P`参数即可
|
||||||
|
|||||||
+306
-103
@@ -1,4 +1,5 @@
|
|||||||
### 稳定优质IP代理商推荐
|
### 稳定优质IP代理商推荐
|
||||||
|
|
||||||
<a href="https://brightdata.grsm.io/9gnzdzgpvtmo">
|
<a href="https://brightdata.grsm.io/9gnzdzgpvtmo">
|
||||||
<img width="auto" height="100" src="https://mirrors.host900.com/https://raw.githubusercontent.com/snail007/goproxy/master/doc/images/brightdata.png"/>
|
<img width="auto" height="100" src="https://mirrors.host900.com/https://raw.githubusercontent.com/snail007/goproxy/master/doc/images/brightdata.png"/>
|
||||||
</a>
|
</a>
|
||||||
@@ -92,7 +93,6 @@ http
|
|||||||
|
|
||||||
比如: --log proxy.log,日志就会输出到proxy.log方便排除问题。
|
比如: --log proxy.log,日志就会输出到proxy.log方便排除问题。
|
||||||
|
|
||||||
|
|
||||||
### 5. 生成加密通讯需要的证书文件
|
### 5. 生成加密通讯需要的证书文件
|
||||||
|
|
||||||
http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。
|
http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和上级通讯的时候,为了安全我们采用TLS加密通讯,当然可以选择不加密通信通讯,本教程所有和上级通讯都采用加密,需要证书文件。
|
||||||
@@ -122,6 +122,7 @@ http(s)代理、tcp代理、udp代理、socks5代理、内网穿透等功能和
|
|||||||
`proxy http -t tcp -p "0.0.0.0:38080" --daemon`
|
`proxy http -t tcp -p "0.0.0.0:38080" --daemon`
|
||||||
|
|
||||||
### 7. 守护运行
|
### 7. 守护运行
|
||||||
|
|
||||||
守护运行参数--forever,比如: `proxy http --forever` ,
|
守护运行参数--forever,比如: `proxy http --forever` ,
|
||||||
|
|
||||||
proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程。
|
proxy会fork子进程,然后监控子进程,如果子进程异常退出,5秒后重启子进程。
|
||||||
@@ -148,13 +149,13 @@ HTTP(S)\SOCKS5\SPS\TCP代理支持上级负载均衡和高可用,多个上级
|
|||||||
|
|
||||||
roundrobin 轮流使用
|
roundrobin 轮流使用
|
||||||
|
|
||||||
leastconn 使用最小连接数的
|
leastconn 使用最小连接数的
|
||||||
|
|
||||||
leasttime 使用连接时间最小的
|
leasttime 使用连接时间最小的
|
||||||
|
|
||||||
hash 使用根据客户端地址计算出一个固定上级
|
hash 使用根据客户端地址计算出一个固定上级
|
||||||
|
|
||||||
weight 根据每个上级的权重和连接数情况,选择出一个上级
|
weight 根据每个上级的权重和连接数情况,选择出一个上级
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
@@ -271,8 +272,7 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
|
|
||||||
### 15 监听多个端口
|
### 15 监听多个端口
|
||||||
|
|
||||||
`tcp/http/socks/sps`支持同时监听多个端口以及范围端口。
|
`tcp/http/socks/sps`支持同时监听多个端口以及范围端口。 一般情况下监听一个端口就可以,不过如果需要同时监听多个两个端口,或者范围端口,那么-p参数是支持的,
|
||||||
一般情况下监听一个端口就可以,不过如果需要同时监听多个两个端口,或者范围端口,那么-p参数是支持的,
|
|
||||||
格式是:`-p 0.0.0.0:80,0.0.0.0:443,0.0.0.0:8000-9000,:5000-6000`,多个绑定用逗号分隔即可。
|
格式是:`-p 0.0.0.0:80,0.0.0.0:443,0.0.0.0:8000-9000,:5000-6000`,多个绑定用逗号分隔即可。
|
||||||
|
|
||||||
## 1.HTTP代理
|
## 1.HTTP代理
|
||||||
@@ -320,6 +320,7 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
然后设置你的windos系统中,需要通过代理上网的程序的代理为http模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||||
|
|
||||||
### 1.4.HTTP三级代理(加密)
|
### 1.4.HTTP三级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级HTTP代理VPS_01,IP:22.22.22.22
|
一级HTTP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
`proxy http -t tls -p ":38080" -C proxy.crt -K proxy.key`
|
||||||
@@ -334,24 +335,31 @@ socks5\sps\http代理,控制客户端并发连接数参数是:`--max-conns-rate`
|
|||||||
请参考`9.API认证` 和 `10.本地认证`
|
请参考`9.API认证` 和 `10.本地认证`
|
||||||
|
|
||||||
### 1.6.HTTP代理流量强制走上级HTTP代理
|
### 1.6.HTTP代理流量强制走上级HTTP代理
|
||||||
|
|
||||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级HTTP代理.通过--always可以使全部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`
|
`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代理访问目标地址。
|
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
||||||
假设有:vps
|
假设有:vps
|
||||||
|
|
||||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||||
- 用户user的ssh私钥名称是user.key
|
- 用户user的ssh私钥名称是user.key
|
||||||
|
|
||||||
#### *1.7.1 ssh用户名和密码的方式*
|
#### *1.7.1 ssh用户名和密码的方式*
|
||||||
|
|
||||||
本地HTTP(S)代理28080端口,执行:
|
本地HTTP(S)代理28080端口,执行:
|
||||||
`proxy http -T ssh -P "2.2.2.2:22" -u user -A demo -t tcp -p ":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端口,执行:
|
本地HTTP(S)代理28080端口,执行:
|
||||||
`proxy http -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080"`
|
`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协议需要--kcp-key参数设置一个密码用于加密解密数据
|
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
||||||
|
|
||||||
@@ -363,6 +371,7 @@ KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
|||||||
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输,注意kcp走的是udp协议协议,所以防火墙需放开38080的udp协议。
|
那么访问本地的8080端口就是访问VPS上面的代理端口38080,数据通过kcp协议传输,注意kcp走的是udp协议协议,所以防火墙需放开38080的udp协议。
|
||||||
|
|
||||||
### 1.9 HTTP(S)反向代理
|
### 1.9 HTTP(S)反向代理
|
||||||
|
|
||||||

|

|
||||||
proxy不仅支持在其他软件里面通过设置代理的方式,为其他软件提供代理服务,而且支持直接把请求的网站域名解析到proxy监听的ip上,然后proxy监听80和443端口,那么proxy就会自动为你代理访问需要访问的HTTP(S)网站。
|
proxy不仅支持在其他软件里面通过设置代理的方式,为其他软件提供代理服务,而且支持直接把请求的网站域名解析到proxy监听的ip上,然后proxy监听80和443端口,那么proxy就会自动为你代理访问需要访问的HTTP(S)网站。
|
||||||
|
|
||||||
@@ -379,11 +388,13 @@ proxy不仅支持在其他软件里面通过设置代理的方式,为其他软
|
|||||||
proxy所在的服务器的DNS解析结果不能受到自定义的解析影响,不然就死循环了,proxy代理最好指定`--dns 8.8.8.8`参数。
|
proxy所在的服务器的DNS解析结果不能受到自定义的解析影响,不然就死循环了,proxy代理最好指定`--dns 8.8.8.8`参数。
|
||||||
|
|
||||||
### 1.10 HTTP(S)透明代理
|
### 1.10 HTTP(S)透明代理
|
||||||
|
|
||||||
该模式需要具有一定的网络基础,相关概念不懂的请自行搜索解决。
|
该模式需要具有一定的网络基础,相关概念不懂的请自行搜索解决。
|
||||||
假设proxy现在在路由器上运行,启动命令如下:
|
假设proxy现在在路由器上运行,启动命令如下:
|
||||||
`proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key`
|
`proxy http -t tcp -p :33080 -T tls -P "2.2.2.2:33090" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
然后添加iptables规则,下面是参考规则:
|
然后添加iptables规则,下面是参考规则:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#上级proxy服务端服务器IP地址:
|
#上级proxy服务端服务器IP地址:
|
||||||
proxy_server_ip=2.2.2.2
|
proxy_server_ip=2.2.2.2
|
||||||
@@ -419,17 +430,20 @@ iptables -t nat -A PREROUTING -p tcp -j PROXY
|
|||||||
# Apply the rules to localhost
|
# Apply the rules to localhost
|
||||||
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
||||||
```
|
```
|
||||||
|
|
||||||
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
||||||
- 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X 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
|
- 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN
|
||||||
|
|
||||||
### 1.11 自定义DNS
|
### 1.11 自定义DNS
|
||||||
|
|
||||||
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
||||||
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
||||||
比如:
|
比如:
|
||||||
`proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
`proxy http -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
||||||
|
|
||||||
### 1.12 自定义加密
|
### 1.12 自定义加密
|
||||||
|
|
||||||
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义
|
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义
|
||||||
加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
||||||
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
@@ -443,7 +457,6 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
`proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy http -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -455,6 +468,7 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 1.13 压缩传输
|
### 1.13 压缩传输
|
||||||
|
|
||||||
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以对数据进行压缩,
|
proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以对数据进行压缩,
|
||||||
也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,一部分是本地(-m)是否压缩传输,
|
也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,一部分是本地(-m)是否压缩传输,
|
||||||
一部分是与上级(-M)传输是否压缩。
|
一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -468,7 +482,6 @@ proxy的http(s)代理在tcp之上可以通过tls标准加密以及kcp协议加
|
|||||||
`proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy http -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -511,8 +524,8 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy http -t tcp -p :33080 --bind-listen`
|
`proxy http -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -524,16 +537,26 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy http -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy http -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 1.17 证书参数使用base64数据
|
### 1.17 证书参数使用base64数据
|
||||||
|
|
||||||
默认情况下-C,-K参数是crt证书和key文件的路径,
|
默认情况下-C,-K参数是crt证书和key文件的路径,
|
||||||
@@ -541,6 +564,7 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
### 1.18 智能模式
|
### 1.18 智能模式
|
||||||
|
|
||||||
智能模式设置,可以是intelligent|direct|parent三者之一。
|
智能模式设置,可以是intelligent|direct|parent三者之一。
|
||||||
默认是:parent。
|
默认是:parent。
|
||||||
每个值的含义如下:
|
每个值的含义如下:
|
||||||
@@ -549,11 +573,13 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
`--intelligent=intelligent`,blocked和direct里面都没有的目标,智能判断是否使用上级访问目标。
|
`--intelligent=intelligent`,blocked和direct里面都没有的目标,智能判断是否使用上级访问目标。
|
||||||
|
|
||||||
### 1.19 查看帮助
|
### 1.19 查看帮助
|
||||||
|
|
||||||
`proxy help http`
|
`proxy help http`
|
||||||
|
|
||||||
## 2.TCP代理
|
## 2.TCP代理
|
||||||
|
|
||||||
### 2.1 普通一级TCP代理
|
### 2.1 普通一级TCP代理
|
||||||
|
|
||||||

|

|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"`
|
`proxy tcp -p ":33080" -T tcp -P "192.168.22.33:22"`
|
||||||
@@ -581,8 +607,8 @@ HTTP(S)代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port`
|
`proxy tcp -p ":33080-33085" -T tcp -P "192.168.22.33:22" --lock-port`
|
||||||
|
|
||||||
|
|
||||||
### 2.2 普通二级TCP代理
|
### 2.2 普通二级TCP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"`
|
`proxy tcp -p ":33080" -T tcp -P "127.0.0.1:8080"`
|
||||||
@@ -591,6 +617,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地23080端口就是访问22.22.22.33的8080端口。
|
那么访问本地23080端口就是访问22.22.22.33的8080端口。
|
||||||
|
|
||||||
### 2.3 普通三级TCP代理
|
### 2.3 普通三级TCP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"`
|
`proxy tcp -p ":38080" -T tcp -P "66.66.66.66:8080"`
|
||||||
@@ -601,6 +628,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
||||||
|
|
||||||
### 2.4 加密二级TCP代理
|
### 2.4 加密二级TCP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":33080" -T tcp -P "127.0.0.1:8080" -C proxy.crt -K proxy.key`
|
||||||
@@ -609,6 +637,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口。
|
那么访问本地23080端口就是通过加密TCP隧道访问22.22.22.33的8080端口。
|
||||||
|
|
||||||
### 2.5 加密三级TCP代理
|
### 2.5 加密三级TCP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":38080" -T tcp -P "66.66.66.66:8080" -C proxy.crt -K proxy.key`
|
||||||
@@ -619,6 +648,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
那么访问本地8080端口就是通过加密TCP隧道访问66.66.66.66的8080端口。
|
||||||
|
|
||||||
### 2.6 通过代理连接上级
|
### 2.6 通过代理连接上级
|
||||||
|
|
||||||
有时候proxy所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
有时候proxy所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
||||||
-J参数就可以帮助你让proxy的tcp端口映射的时候通过https或者socks5代理去连接上级-P,将外部端口映射到本地。
|
-J参数就可以帮助你让proxy的tcp端口映射的时候通过https或者socks5代理去连接上级-P,将外部端口映射到本地。
|
||||||
-J参数格式如下:
|
-J参数格式如下:
|
||||||
@@ -640,14 +670,15 @@ port:代理的端口
|
|||||||
|
|
||||||
### 2.7 指定出口IP
|
### 2.7 指定出口IP
|
||||||
|
|
||||||
当TCP代理当上级类型(参数:-T)是tcp当时候,支持指定`出口IP`。`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`访问目标网站的功能。如果绑定了不正确的IP会导致代理不能工作。
|
当TCP代理当上级类型(参数:-T)是tcp当时候,支持指定`出口IP`。`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`
|
||||||
|
访问目标网站的功能。如果绑定了不正确的IP会导致代理不能工作。
|
||||||
|
|
||||||
普通多IP用法:
|
普通多IP用法:
|
||||||
|
|
||||||
`proxy tcp -t tcp -p :33080 --bind-listen -T tcp -P 2.2.2.2:3322`
|
`proxy tcp -t tcp -p :33080 --bind-listen -T tcp -P 2.2.2.2:3322`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -655,20 +686,30 @@ port:代理的端口
|
|||||||
|
|
||||||
命令如下:
|
命令如下:
|
||||||
|
|
||||||
`proxy tcp -t tcp -p 5.5.5.5:6666 --bind-listen -T tcp -P 2.2.2.2:3322`
|
`proxy tcp -t tcp -p 5.5.5.5:6666 --bind-listen -T tcp -P 2.2.2.2:3322`
|
||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`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`
|
`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`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 2.8 限速,限制连接数
|
### 2.8 限速,限制连接数
|
||||||
|
|
||||||
参数`--max-conns`可以限制每个端口的最大连接数。
|
参数`--max-conns`可以限制每个端口的最大连接数。
|
||||||
@@ -690,11 +731,13 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
`proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C`
|
`proxy tcp -t tcp -p ":23080" -T tcp -P "22.22.22.33:33080" --C`
|
||||||
|
|
||||||
### 2.10 查看帮助
|
### 2.10 查看帮助
|
||||||
|
|
||||||
`proxy help tcp`
|
`proxy help tcp`
|
||||||
|
|
||||||
## 3.UDP代理
|
## 3.UDP代理
|
||||||
|
|
||||||
### 3.1.普通一级UDP代理
|
### 3.1.普通一级UDP代理
|
||||||
|
|
||||||

|

|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy udp -p ":5353" -T udp -P "8.8.8.8:53"`
|
`proxy udp -p ":5353" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -723,6 +766,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
`proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port`
|
`proxy udp -p ":33080-33085" -T udp -P "192.168.22.33:2222" --lock-port`
|
||||||
|
|
||||||
### 3.2.普通二级UDP代理
|
### 3.2.普通二级UDP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"`
|
`proxy tcp -p ":33080" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -731,6 +775,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
那么访问本地UDP:5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
||||||
|
|
||||||
### 3.3.普通三级UDP代理
|
### 3.3.普通三级UDP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"`
|
`proxy tcp -p ":38080" -T udp -P "8.8.8.8:53"`
|
||||||
@@ -741,6 +786,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口。
|
那么访问本地5353端口就是通过TCP隧道,通过VPS访问8.8.8.8的53端口。
|
||||||
|
|
||||||
### 3.4.加密二级UDP代理
|
### 3.4.加密二级UDP代理
|
||||||
|
|
||||||

|

|
||||||
VPS(IP:22.22.22.33)执行:
|
VPS(IP:22.22.22.33)执行:
|
||||||
`proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":33080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
@@ -749,6 +795,7 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
那么访问本地UDP:5353端口就是通过加密TCP隧道,通过VPS访问8.8.8.8的UDP:53端口。
|
||||||
|
|
||||||
### 3.5.加密三级UDP代理
|
### 3.5.加密三级UDP代理
|
||||||
|
|
||||||

|

|
||||||
一级TCP代理VPS_01,IP:22.22.22.22
|
一级TCP代理VPS_01,IP:22.22.22.22
|
||||||
`proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
`proxy tcp -t tls -p ":38080" -T udp -P "8.8.8.8:53" -C proxy.crt -K proxy.key`
|
||||||
@@ -760,16 +807,21 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
|
|
||||||
### 3.6 指定出口IP
|
### 3.6 指定出口IP
|
||||||
|
|
||||||
当UDP代理当上级类型(参数:-T)是udp当时候,支持指定`出口IP`。使用`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`访问目标的功能。如果绑定了不正确的IP会导致代理不能工作。
|
当UDP代理当上级类型(参数:-T)是udp当时候,支持指定`出口IP`。使用`--bind-listen`参数,就可以开启客户端用`入口IP`连接过来的,就用`入口IP`作为`出口IP`
|
||||||
|
访问目标的功能。如果绑定了不正确的IP会导致代理不能工作。
|
||||||
|
|
||||||
`proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B`
|
`proxy udp -p ":33080" -T udp -P "192.168.22.33:2222" -B`
|
||||||
|
|
||||||
### 3.7 查看帮助
|
### 3.7 查看帮助
|
||||||
|
|
||||||
`proxy help udp`
|
`proxy help udp`
|
||||||
|
|
||||||
## 4.内网穿透
|
## 4.内网穿透
|
||||||
|
|
||||||
### 4.1、原理说明
|
### 4.1、原理说明
|
||||||
|
|
||||||
内网穿透,分为两个版本,“多链接版本”和“多路复用版本”,一般像web服务这种不是长时间连接的服务建议用“多链接版本”,如果是要保持长时间连接建议使用“多路复用版本”。
|
内网穿透,分为两个版本,“多链接版本”和“多路复用版本”,一般像web服务这种不是长时间连接的服务建议用“多链接版本”,如果是要保持长时间连接建议使用“多路复用版本”。
|
||||||
|
|
||||||
1. 多链接版本,对应的子命令是tserver,tclient,tbridge。
|
1. 多链接版本,对应的子命令是tserver,tclient,tbridge。
|
||||||
1. 多路复用版本,对应的子命令是server,client,bridge。
|
1. 多路复用版本,对应的子命令是server,client,bridge。
|
||||||
1. 多链接版本和多路复用版本的参数和使用方式完全一样。
|
1. 多链接版本和多路复用版本的参数和使用方式完全一样。
|
||||||
@@ -780,7 +832,9 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。
|
内网穿透由三部分组成:client端,server端,bridge端;client和server主动连接bridge端进行桥接。
|
||||||
|
|
||||||
### 4.2、TCP普通用法
|
### 4.2、TCP普通用法
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口
|
- 公司机器A提供了web服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -788,17 +842,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
|
在家里能够通过访问VPS的28080端口访问到公司机器A的80端口
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.3、微信接口本地开发
|
### 4.3、微信接口本地开发
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 自己的笔记本提供了nginx服务80端口
|
- 自己的笔记本提供了nginx服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -808,19 +865,21 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
|
比如:wx-dev.xxx.com解析到22.22.22.22,然后在自己笔记本的nginx里
|
||||||
配置域名wx-dev.xxx.com到具体的目录即可。
|
配置域名wx-dev.xxx.com到具体的目录即可。
|
||||||
|
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行,确保vps的80端口没被其它程序占用。
|
1. 在vps上执行,确保vps的80端口没被其它程序占用。
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":80@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在自己笔记本上面执行
|
1. 在自己笔记本上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.4、UDP普通用法
|
### 4.4、UDP普通用法
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了DNS解析服务,UDP:53端口
|
- 公司机器A提供了DNS解析服务,UDP:53端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -828,17 +887,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。
|
在家里能够通过设置本地dns为22.22.22.22,使用公司机器A进行域名解析服务。
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server --udp -r ":53@:53" -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.5、高级用法一
|
### 4.5、高级用法一
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口
|
- 公司机器A提供了web服务80端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -847,18 +909,20 @@ VPS(IP:22.22.22.33)执行:
|
|||||||
通过加密隧道访问到公司机器A的80端口。
|
通过加密隧道访问到公司机器A的80端口。
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在家里电脑上执行
|
1. 在家里电脑上执行
|
||||||
`proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.6、高级用法二
|
### 4.6、高级用法二
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
|
如果同时有多个client连接到同一个bridge,需要指定不同的key,可以通过--k参数设定,--k可以是任意唯一字符串,
|
||||||
只要在同一个bridge上唯一即可。
|
只要在同一个bridge上唯一即可。
|
||||||
@@ -866,6 +930,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。
|
暴露多个端口重复-r参数即可.-r格式是:"本地IP:本地端口@clientHOST:client端口"。
|
||||||
|
|
||||||
背景:
|
背景:
|
||||||
|
|
||||||
- 公司机器A提供了web服务80端口,ftp服务21端口
|
- 公司机器A提供了web服务80端口,ftp服务21端口
|
||||||
- 有VPS一个,公网IP:22.22.22.22
|
- 有VPS一个,公网IP:22.22.22.22
|
||||||
|
|
||||||
@@ -874,16 +939,18 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口
|
在家里能够通过访问VPS的29090端口访问到公司机器A的21端口
|
||||||
|
|
||||||
步骤:
|
步骤:
|
||||||
|
|
||||||
1. 在vps上执行
|
1. 在vps上执行
|
||||||
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
`proxy bridge -p ":33080" -C proxy.crt -K proxy.key`
|
||||||
`proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
`proxy server -r ":28080@:80" -r ":29090@:21" --k test -P "127.0.0.1:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 在公司机器A上面执行
|
1. 在公司机器A上面执行
|
||||||
`proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
`proxy client --k test -P "22.22.22.22:33080" -C proxy.crt -K proxy.key`
|
||||||
|
|
||||||
1. 完成
|
1. 完成
|
||||||
|
|
||||||
### 4.7.server的-r参数
|
### 4.7.server的-r参数
|
||||||
|
|
||||||
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
-r完整格式是:`PROTOCOL://LOCAL_IP:LOCAL_PORT@[CLIENT_KEY]CLIENT_LOCAL_HOST:CLIENT_LOCAL_PORT`
|
||||||
|
|
||||||
4.7.1.协议PROTOCOL:tcp、udp、ptcp、pudp。
|
4.7.1.协议PROTOCOL:tcp、udp、ptcp、pudp。
|
||||||
@@ -899,6 +966,7 @@ server连接到bridge的时候,如果同时有多个client连接到同一个br
|
|||||||
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
4.7.3.LOCAL_IP为空默认是:`0.0.0.0`,CLIENT_LOCAL_HOST为空默认是:`127.0.0.1`;
|
||||||
|
|
||||||
### 4.8.server和client通过代理连接bridge
|
### 4.8.server和client通过代理连接bridge
|
||||||
|
|
||||||
有时候server或者client所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
有时候server或者client所在的网络不能直接访问外网,需要通过一个https或者socks5代理才能上网,那么这个时候
|
||||||
-J参数就可以帮助你让server或者client通过https或者socks5代理去连接bridge。
|
-J参数就可以帮助你让server或者client通过https或者socks5代理去连接bridge。
|
||||||
-J参数格式如下:
|
-J参数格式如下:
|
||||||
@@ -920,7 +988,9 @@ port:代理的端口
|
|||||||
|
|
||||||
### 4.9.内网穿透HTTP服务
|
### 4.9.内网穿透HTTP服务
|
||||||
|
|
||||||
通常HTTP请求客户端会使用server的ip和端口去设置HOST字段,但是与期望的后端实际HOST不一样,这样就造成了tcp是通的, 但后端依赖HOST字段定位虚拟主机就不能工作.现在用`--http-host`参数强制设置http头部的HOST字段值为后端实际的域名和端口即可轻松解决,另外使用了`--http-host`参数之后,会在每个HTTP请求的头部增加两个头部 `X-Forwarded-For` 和 `X-Real-IP` 值是客户端IP, 这样后端http服务就能方便的获取用户端真实IP地址。
|
通常HTTP请求客户端会使用server的ip和端口去设置HOST字段,但是与期望的后端实际HOST不一样,这样就造成了tcp是通的, 但后端依赖HOST字段定位虚拟主机就不能工作.现在用`--http-host`
|
||||||
|
参数强制设置http头部的HOST字段值为后端实际的域名和端口即可轻松解决,另外使用了`--http-host`参数之后,会在每个HTTP请求的头部增加两个头部 `X-Forwarded-For` 和 `X-Real-IP`
|
||||||
|
值是客户端IP, 这样后端http服务就能方便的获取用户端真实IP地址。
|
||||||
|
|
||||||
`server`的--http-host参数格式如下:
|
`server`的--http-host参数格式如下:
|
||||||
|
|
||||||
@@ -942,7 +1012,6 @@ port:代理的端口
|
|||||||
|
|
||||||
另外只有设置了`--http-host`参数
|
另外只有设置了`--http-host`参数
|
||||||
|
|
||||||
|
|
||||||
### 4.10 关于流量统计
|
### 4.10 关于流量统计
|
||||||
|
|
||||||
如果单独启动一个server对接上级是proxy-admin控制面板,需要在上级控制面板里面新建一个映射,获得个映射规则的ID,
|
如果单独启动一个server对接上级是proxy-admin控制面板,需要在上级控制面板里面新建一个映射,获得个映射规则的ID,
|
||||||
@@ -950,6 +1019,7 @@ port:代理的端口
|
|||||||
然后启动server的时候加上参数 --server-id=映射规则的ID 才能统计到流量。
|
然后启动server的时候加上参数 --server-id=映射规则的ID 才能统计到流量。
|
||||||
|
|
||||||
### 4.11 关于p2p
|
### 4.11 关于p2p
|
||||||
|
|
||||||
内网穿透支持在server和client网络情况满足的情况下,server和client之间通过p2p直接连接,开启方法是:
|
内网穿透支持在server和client网络情况满足的情况下,server和client之间通过p2p直接连接,开启方法是:
|
||||||
|
|
||||||
在启动bridge,server,client到时候都加上`--p2p`参数即可。server的-r参数可以针对端口是否启用p2p(ptcp和pudp)。
|
在启动bridge,server,client到时候都加上`--p2p`参数即可。server的-r参数可以针对端口是否启用p2p(ptcp和pudp)。
|
||||||
@@ -957,6 +1027,7 @@ port:代理的端口
|
|||||||
如果server和client之间p2p打洞失败,那么会自动切换使用bridge中转传输数据。
|
如果server和client之间p2p打洞失败,那么会自动切换使用bridge中转传输数据。
|
||||||
|
|
||||||
### 4.12 客户端key白名单
|
### 4.12 客户端key白名单
|
||||||
|
|
||||||
内网穿透bridge可以设置客户端key白名单,参数是--client-keys,格式可以是:
|
内网穿透bridge可以设置客户端key白名单,参数是--client-keys,格式可以是:
|
||||||
|
|
||||||
a.文件名,文件内容一行一个客户端key只能包含数字字母下划线,也就是客户端启动参数--k的值,只有客户端key在此白名单的客户端才能连接。# 开头的行,为注释。
|
a.文件名,文件内容一行一个客户端key只能包含数字字母下划线,也就是客户端启动参数--k的值,只有客户端key在此白名单的客户端才能连接。# 开头的行,为注释。
|
||||||
@@ -972,11 +1043,13 @@ c.”str://“开头的英文逗号分割的多个key,比如:str://default,c
|
|||||||
nat类型判断,方便查看网络是否支持p2p,可以执行:`proxy tools -a nattype`
|
nat类型判断,方便查看网络是否支持p2p,可以执行:`proxy tools -a nattype`
|
||||||
|
|
||||||
### 4.14 查看帮助
|
### 4.14 查看帮助
|
||||||
|
|
||||||
`proxy help bridge`
|
`proxy help bridge`
|
||||||
`proxy help server`
|
`proxy help server`
|
||||||
`proxy help client`
|
`proxy help client`
|
||||||
|
|
||||||
## 5.SOCKS5代理
|
## 5.SOCKS5代理
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证。
|
SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码认证。
|
||||||
@@ -985,10 +1058,10 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
|
|
||||||
***那么需要加上`-g VPS公网IP`参数,SOCKS5代理的UDP功能才能正常工作。***
|
***那么需要加上`-g VPS公网IP`参数,SOCKS5代理的UDP功能才能正常工作。***
|
||||||
|
|
||||||
***socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能,
|
***socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。***
|
||||||
通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。***
|
|
||||||
|
|
||||||
### 5.1 普通SOCKS5代理
|
### 5.1 普通SOCKS5代理
|
||||||
|
|
||||||
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 0 --udp`
|
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 0 --udp`
|
||||||
|
|
||||||
-p参数支持的写法:
|
-p参数支持的写法:
|
||||||
@@ -1000,56 +1073,67 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
```
|
```
|
||||||
|
|
||||||
### 5.2.普通二级SOCKS5代理
|
### 5.2.普通二级SOCKS5代理
|
||||||
|
|
||||||

|

|
||||||
使用本地端口8090,假设上级SOCKS5代理是`22.22.22.22:8080`
|
使用本地端口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" --udp-port 0 --udp`
|
`proxy socks -t tcp -p "0.0.0.0:8090" -T tcp -P "22.22.22.22:8080" --udp-port 0 --udp`
|
||||||
我们还可以指定网站域名的黑白名单文件,一行一个域名,匹配规则是最右匹配,比如:baidu.com,匹配的是*.*.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 --udp-port 0 --udp`
|
.baidu.com,黑名单的域名域名直接走上级代理,白名单的域名不走上级代理;如果域名即在黑名单又在白名单中,那么黑名单起作用。
|
||||||
|
`proxy 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二级代理(加密)
|
### 5.3.SOCKS二级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级SOCKS代理(VPS,IP:22.22.22.22)
|
一级SOCKS代理(VPS,IP:22.22.22.22)
|
||||||
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
|
|
||||||
二级SOCKS代理(本地Linux)
|
二级SOCKS代理(本地Linux)
|
||||||
`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 socks -t tcp -p ":8080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
那么访问本地的8080端口就是访问VPS上面的代理端口38080。
|
那么访问本地的8080端口就是访问VPS上面的代理端口38080。
|
||||||
|
|
||||||
二级SOCKS代理(本地windows)
|
二级SOCKS代理(本地windows)
|
||||||
`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`
|
`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`
|
||||||
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
然后设置你的windos系统中,需要通过代理上网的程序的代理为socks5模式,地址为:127.0.0.1,端口为:8080,程序即可通过加密通道通过vps上网。
|
||||||
|
|
||||||
### 5.4.SOCKS三级代理(加密)
|
### 5.4.SOCKS三级代理(加密)
|
||||||
|
|
||||||

|

|
||||||
一级SOCKS代理VPS_01,IP:22.22.22.22
|
一级SOCKS代理VPS_01,IP:22.22.22.22
|
||||||
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
二级SOCKS代理VPS_02,IP:33.33.33.33
|
二级SOCKS代理VPS_02,IP:33.33.33.33
|
||||||
`proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tls -p ":28080" -T tls -P "22.22.22.22:38080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
三级SOCKS代理(本地)
|
三级SOCKS代理(本地)
|
||||||
`proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
`proxy socks -t tcp -p ":8080" -T tls -P "33.33.33.33:28080" -C proxy.crt -K proxy.key --udp-port 0 --udp`
|
||||||
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080。
|
那么访问本地的8080端口就是访问一级SOCKS代理上面的代理端口38080。
|
||||||
|
|
||||||
### 5.5.SOCKS代理流量强制走上级SOCKS代理
|
### 5.5.SOCKS代理流量强制走上级SOCKS代理
|
||||||
|
|
||||||
默认情况下,proxy会智能判断一个网站域名是否无法访问,如果无法访问才走上级SOCKS代理.通过--always可以使全部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 --udp-port 0 --udp`
|
`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.SOCKS通过SSH中转
|
||||||
|
|
||||||

|

|
||||||
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
说明:ssh中转的原理是利用了ssh的转发功能,就是你连接上ssh之后,可以通过ssh代理访问目标地址。
|
||||||
假设有:vps
|
假设有:vps
|
||||||
|
|
||||||
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
- IP是2.2.2.2, ssh端口是22, ssh用户名是:user, ssh用户密码是:demo
|
||||||
- 用户user的ssh私钥名称是user.key
|
- 用户user的ssh私钥名称是user.key
|
||||||
|
|
||||||
#### *5.6.1 ssh用户名和密码的方式*
|
#### *5.6.1 ssh用户名和密码的方式*
|
||||||
|
|
||||||
本地SOCKS5代理28080端口,执行:
|
本地SOCKS5代理28080端口,执行:
|
||||||
`proxy socks -T ssh -P "2.2.2.2:22" -u user -D demo -t tcp -p ":28080" --udp-port 0 --udp`
|
`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用户名和密钥的方式*
|
#### *5.6.2 ssh用户名和密钥的方式*
|
||||||
|
|
||||||
本地SOCKS5代理28080端口,执行:
|
本地SOCKS5代理28080端口,执行:
|
||||||
`proxy socks -T ssh -P "2.2.2.2:22" -u user -S user.key -t tcp -p ":28080" --udp-port 0 --udp`
|
`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访问目标地址。
|
那么访问本地的28080端口就是通过VPS访问目标地址。
|
||||||
|
|
||||||
### 5.7.认证
|
### 5.7.认证
|
||||||
|
|
||||||
对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
|
对于socks5代理协议我们可以进行用户名密码认证,认证的用户名和密码可以在命令行指定
|
||||||
`proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
`proxy socks -t tcp -p ":33080" -a "user1:pass1" -a "user2:pass2"`
|
||||||
多个用户,重复-a参数即可。
|
多个用户,重复-a参数即可。
|
||||||
@@ -1057,6 +1141,7 @@ SOCKS5代理,支持CONNECT,UDP协议,不支持BIND,支持用户名密码
|
|||||||
`proxy socks -t tcp -p ":33080" -F auth-file.txt`
|
`proxy socks -t tcp -p ":33080" -F auth-file.txt`
|
||||||
|
|
||||||
### 5.8.KCP协议传输
|
### 5.8.KCP协议传输
|
||||||
|
|
||||||
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
||||||
|
|
||||||
一级HTTP代理(VPS,IP:22.22.22.22)
|
一级HTTP代理(VPS,IP:22.22.22.22)
|
||||||
@@ -1071,12 +1156,14 @@ KCP协议需要--kcp-key参数设置一个密码用于加密解密数据
|
|||||||
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
||||||
|
|
||||||
### 5.9.自定义DNS
|
### 5.9.自定义DNS
|
||||||
|
|
||||||
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
--dns-address和--dns-ttl参数,用于自己指定proxy访问域名的时候使用的dns(--dns-address)
|
||||||
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
以及解析结果缓存时间(--dns-ttl)秒数,避免系统dns对proxy的干扰,另外缓存功能还能减少dns解析时间提高访问速度。
|
||||||
比如:
|
比如:
|
||||||
`proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
`proxy socks -p ":33080" --dns-address "8.8.8.8:53" --dns-ttl 300`
|
||||||
|
|
||||||
### 5.10 自定义加密
|
### 5.10 自定义加密
|
||||||
|
|
||||||
proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义一个密码即可,
|
||||||
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
|
|
||||||
@@ -1091,7 +1178,6 @@ proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密t
|
|||||||
`proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy socks -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
`proxy socks -t tcp -z demo_password -p :7777`
|
`proxy socks -t tcp -z demo_password -p :7777`
|
||||||
@@ -1102,6 +1188,7 @@ proxy的socks代理在tcp之上可以通过tls标准加密以及kcp协议加密t
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 5.11 压缩传输
|
### 5.11 压缩传输
|
||||||
|
|
||||||
proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
||||||
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
||||||
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -1118,7 +1205,6 @@ proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以
|
|||||||
`proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy socks -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1129,12 +1215,11 @@ proxy的socks代理在tcp之上可以通过自定义加密和tls标准加密以
|
|||||||
`proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080`
|
`proxy socks -T tcp -P 3.3.3.3:8888 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
### 5.12 负载均衡
|
### 5.12 负载均衡
|
||||||
|
|
||||||
SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
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`
|
`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 设置重试间隔和超时时间
|
### 5.12.1 设置重试间隔和超时时间
|
||||||
|
|
||||||
@@ -1162,8 +1247,8 @@ SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
`proxy socks -t tcp -p :33080 --bind-listen`
|
`proxy socks -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -1175,16 +1260,26 @@ SOCKS代理支持上级负载均衡,多个上级重复-P参数即可。
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy socks -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 5.15 级联认证
|
### 5.15 级联认证
|
||||||
|
|
||||||
SOCKS5支持级联认证,-A可以设置上级认证信息。
|
SOCKS5支持级联认证,-A可以设置上级认证信息。
|
||||||
@@ -1205,8 +1300,8 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
|
|
||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
|
|
||||||
### 5.17 智能模式
|
### 5.17 智能模式
|
||||||
|
|
||||||
智能模式设置,可以是intelligent|direct|parent三者之一。
|
智能模式设置,可以是intelligent|direct|parent三者之一。
|
||||||
默认是:parent。
|
默认是:parent。
|
||||||
每个值的含义如下:
|
每个值的含义如下:
|
||||||
@@ -1223,14 +1318,19 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080`
|
`proxy socks -t tcp -p "0.0.0.0:38080" --udp-port 38080`
|
||||||
|
|
||||||
### 5.19 查看帮助
|
### 5.19 查看帮助
|
||||||
|
|
||||||
`proxy help socks`
|
`proxy help socks`
|
||||||
|
|
||||||
## 6.SPS协议转换
|
## 6.SPS协议转换
|
||||||
|
|
||||||
### 6.1 功能介绍
|
### 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`功能支持的加密方法为:aes-128-cfb , aes-128-ctr , aes-128-gcm , aes-192-cfb , aes-192-ctr , aes-192-gcm , aes-256-cfb , aes-256-ctr , aes-256-gcm , bf-cfb , cast5-cfb , chacha20 , chacha20-ietf , chacha20-ietf-poly1305 , des-cfb , rc4-md5 , rc4-md5-6 , salsa20 , xchacha20
|
代理协议转换使用的是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`功能支持的加密方法为:aes-128-cfb , aes-128-ctr , aes-128-gcm , aes-192-cfb , aes-192-ctr , aes-192-gcm , aes-256-cfb ,
|
||||||
|
aes-256-ctr , aes-256-gcm , bf-cfb , cast5-cfb , chacha20 , chacha20-ietf , chacha20-ietf-poly1305 , des-cfb , rc4-md5 ,
|
||||||
|
rc4-md5-6 , salsa20 , xchacha20
|
||||||
|
|
||||||
本地监听端口-p参数支持的写法:
|
本地监听端口-p参数支持的写法:
|
||||||
|
|
||||||
@@ -1244,44 +1344,53 @@ SOCKS5支持级联认证,-A可以设置上级认证信息。
|
|||||||
|
|
||||||
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
当本地使用kcp协议时,需要用-g指定vps公网IP,socks5的UDP功能才能正常使用.这时-g是返回给客户端的UDP地址中的IP地址.
|
||||||
|
|
||||||
ss的udp功能默认关闭,可以通过--ssudp开启。socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能,
|
ss的udp功能默认关闭,可以通过--ssudp开启。socks5的udp功能默认关闭,可以通过--udp开启,默认是握手随机端口,可以通过固定一个端口提高性能, 通过参数--udp-port
|
||||||
通过参数--udp-port 0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。
|
0设置,0代表随机选择一个空闲端口,也可以手动指定一个具体端口。
|
||||||
|
|
||||||
### 6.2 HTTP(S)转HTTP(S)+SOCKS5+SS
|
### 6.2 HTTP(S)转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
转换后的SOCKS5或者SS代理不具备UDP功能。
|
转换后的SOCKS5或者SS代理不具备UDP功能。
|
||||||
假设已经存在一个普通的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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 tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个tls的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个tls的http(s)代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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 tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个kcp的http(s)代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个kcp的http(s)代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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`
|
`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
|
### 6.3 SOCKS5转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
如果上级是SOCKS5而且支持UDP功能,那么转换后的SOCKS5或者SS代理仍然支持UDP功能。
|
如果上级是SOCKS5而且支持UDP功能,那么转换后的SOCKS5或者SS代理仍然支持UDP功能。
|
||||||
假设已经存在一个普通的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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 tcp -P 127.0.0.1:8080 -t tcp -p :18080 -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个tls的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个tls的socks5代理:127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,tls需要证书文件,ss加密方式:aes-192-cfb,ss密码:
|
||||||
|
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 tls -P 127.0.0.1:8080 -t tcp -p :18080 -C proxy.crt -K proxy.key -h aes-192-cfb -j pass`
|
||||||
|
|
||||||
假设已经存在一个kcp的socks5代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个kcp的socks5代理(密码是:demo123):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,ss加密方式:
|
||||||
|
aes-192-cfb,ss密码: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`
|
`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
|
### 6.4 SS转HTTP(S)+SOCKS5+SS
|
||||||
|
|
||||||
SPS上级和本地支持ss协议,上级可以是SPS或者标准的ss服务,转换后的SOCKS5或者SS代理不具备UDP功能。
|
SPS上级和本地支持ss协议,上级可以是SPS或者标准的ss服务,转换后的SOCKS5或者SS代理不具备UDP功能。
|
||||||
假设已经存在一个普通的SS或者SPS代理(开启了ss,加密方式:aes-256-cfb,密码:demo):127.0.0.1:8080,现在我们把它转为同时支持http(s)和socks5和ss的普通代理,转换后的本地端口为18080,转换后的ss加密方式:aes-192-cfb,ss密码:pass。
|
假设已经存在一个普通的SS或者SPS代理(开启了ss,加密方式:aes-256-cfb,密码:demo):127.0.0.1:8080,现在我们把它转为同时支持http(s)
|
||||||
|
和socks5和ss的普通代理,转换后的本地端口为18080,转换后的ss加密方式:aes-192-cfb,ss密码:pass。
|
||||||
命令如下:
|
命令如下:
|
||||||
`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`。
|
`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 链式连接
|
### 6.5 链式连接
|
||||||
|
|
||||||

|

|
||||||
上面提过多个sps结点可以层级连接构建加密通道,假设有如下vps和家里的pc电脑。
|
上面提过多个sps结点可以层级连接构建加密通道,假设有如下vps和家里的pc电脑。
|
||||||
vps01:2.2.2.2
|
vps01:2.2.2.2
|
||||||
@@ -1302,6 +1411,7 @@ vps02:3.3.3.3
|
|||||||
完成。
|
完成。
|
||||||
|
|
||||||
### 6.6 认证功能
|
### 6.6 认证功能
|
||||||
|
|
||||||
sps支持http(s)\socks5代理认证,可以级联认证,有四个重要的信息:
|
sps支持http(s)\socks5代理认证,可以级联认证,有四个重要的信息:
|
||||||
1:用户发送认证信息`user-auth`。
|
1:用户发送认证信息`user-auth`。
|
||||||
2:设置的本地认证信息`local-auth`。
|
2:设置的本地认证信息`local-auth`。
|
||||||
@@ -1367,6 +1477,7 @@ socks5wss 等价于 -S socks -T wss
|
|||||||
`#1`多个上级的负载均衡是权重策略时候,设置的权重,很少用到。
|
`#1`多个上级的负载均衡是权重策略时候,设置的权重,很少用到。
|
||||||
|
|
||||||
### 6.8 自定义加密
|
### 6.8 自定义加密
|
||||||
|
|
||||||
proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行
|
proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp数据,除此之外还支持在tls和kcp之后进行
|
||||||
自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义
|
自定义加密,也就是说自定义加密和tls|kcp是可以联合使用的,内部采用AES256加密,使用的时候只需要自己定义
|
||||||
一个密码即可,加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
一个密码即可,加密分为两个部分,一部分是本地(-z)是否加密解密,一部分是与上级(-Z)传输是否加密解密。
|
||||||
@@ -1385,7 +1496,6 @@ proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp
|
|||||||
`proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
`proxy sps -T tcp -P 2.2.2.2:777 -Z demo_password -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1397,6 +1507,7 @@ proxy的sps代理在tcp之上可以通过tls标准加密以及kcp协议加密tcp
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级加密传输访问目标网站。
|
||||||
|
|
||||||
### 6.9 压缩传输
|
### 6.9 压缩传输
|
||||||
|
|
||||||
proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及kcp协议加密tcp数据,在自定义加密之前还可以
|
||||||
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
对数据进行压缩,也就是说压缩功能和自定义加密和tls|kcp是可以联合使用的,压缩分为两个部分,
|
||||||
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
一部分是本地(-m)是否压缩传输,一部分是与上级(-M)传输是否压缩。
|
||||||
@@ -1413,7 +1524,6 @@ proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及
|
|||||||
`proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
`proxy sps -T tcp -P 2.2.2.2:777 -M -t tcp -p :8080`
|
||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
|
|
||||||
三级实例
|
三级实例
|
||||||
|
|
||||||
一级vps(ip:2.2.2.2)上执行:
|
一级vps(ip:2.2.2.2)上执行:
|
||||||
@@ -1425,6 +1535,7 @@ proxy的sps代理在tcp之上可以通过自定义加密和tls标准加密以及
|
|||||||
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
这样通过本地代理8080访问网站的时候就是通过与上级压缩传输访问目标网站。
|
||||||
|
|
||||||
### 6.10 禁用协议
|
### 6.10 禁用协议
|
||||||
|
|
||||||
SPS默认情况下一个端口支持http(s)和socks5两种代理协议,我们可以通过参数禁用某个协议
|
SPS默认情况下一个端口支持http(s)和socks5两种代理协议,我们可以通过参数禁用某个协议
|
||||||
比如:
|
比如:
|
||||||
1.禁用HTTP(S)代理功能只保留SOCKS5代理功能,参数:`--disable-http`。
|
1.禁用HTTP(S)代理功能只保留SOCKS5代理功能,参数:`--disable-http`。
|
||||||
@@ -1453,8 +1564,8 @@ sps下级,限速100K
|
|||||||
|
|
||||||
`proxy sps -t tcp -p :33080 --bind-listen`
|
`proxy sps -t tcp -p :33080 --bind-listen`
|
||||||
|
|
||||||
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP,
|
上面的写法适合本机有大量IP,不想一个一个单独写,比如本机有IP`3.3.3.3`,当客户端使用`3.3.3.3`连接代理,那么`3.3.3.3`就会作为客户端的出口IP, 这里的`3.3.3.3`就是`入口IP`和`出口IP`
|
||||||
这里的`3.3.3.3`就是`入口IP`和`出口IP`,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
,你会发现`入口IP`和`出口IP`是一样的,`--bind-listen`这种模式人为不能干预`入口IP`和`出口IP`。
|
||||||
|
|
||||||
单独用法:
|
单独用法:
|
||||||
|
|
||||||
@@ -1466,16 +1577,26 @@ sps下级,限速100K
|
|||||||
|
|
||||||
#### 自由指定出口IP
|
#### 自由指定出口IP
|
||||||
|
|
||||||
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样,
|
上面的`--bind-listen`参数虽然可以指定出口IP,但是`入口IP`和`出口IP`不能人为干预。如果想入口IP和出口IP不一样, 可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`
|
||||||
可以使用`--bind-ip`参数,格式:`IP:端口`,比如: `1.1.1.1:8080`,`[2000:0:0:0:0:0:0:1]:8080`。
|
,`[2000:0:0:0:0:0:0:1]:8080`。 多个绑定需求,可以重复`--bind-ip`参数即可。
|
||||||
多个绑定需求,可以重复`--bind-ip`参数即可。
|
|
||||||
|
|
||||||
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
比如本机有IP`5.5.5.5`,`6.6.6.6`,监听了`8888`和`7777`两个端口,命令如下:
|
||||||
|
|
||||||
`proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
`proxy sps -t tcp -p :8888,:7777 --bind-ip 5.5.5.5:7777 --bind-ip 6.6.6.6:8888`
|
||||||
|
|
||||||
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
那么客户端访问`7777`端口,出口IP就是`5.5.5.5`,访问`8888`端口,出口IP就是`6.6.6.6`,如果同时设置了`--bind-ip`和`--bind-listen`,`--bind-ip`的优先级更高。
|
||||||
|
|
||||||
|
另外,`--bind-ip`参数的`IP`部分,支持指定`网卡名称`,`通配符`,还能指定多个,详细说明如下:
|
||||||
|
|
||||||
|
- 指定网卡名称,比如:`--bind-ip eth0:7777`,那么客户端访问`7777`端口,出口IP就是eth0网卡的IP。
|
||||||
|
- 网卡名称支持通配符,比如:`--bind-ip eth0.*:7777`,那么客户端访问`7777`端口,出口IP就是`eth0.`开头网卡的IP中随机选择的一个。
|
||||||
|
- IP支持通配符,比如:`--bind-ip 192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器所有IP中,匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 还可以是网卡名称和IP的多个组合,多个使用半角逗号分割,比如:`--bind-ip pppoe??,192.168.?.*:7777`,那么客户端访问`7777`端口,出口IP就是机器网卡名称匹配`pppoe??`
|
||||||
|
和机器所有IP中匹配`192.168.?.*`的IP中随机选择的一个。
|
||||||
|
- 通配符`*`代表0至任意多个字符,`?`代表1个字符。
|
||||||
|
- 如果网卡IP发生变化,也会实时生效。
|
||||||
|
- 可以通过`--bind-refresh`参数,指定刷新本地网卡信息的间隔,默认`5`,单位秒。
|
||||||
|
|
||||||
### 6.13 证书参数使用base64数据
|
### 6.13 证书参数使用base64数据
|
||||||
|
|
||||||
默认情况下-C,-K参数是crt证书和key文件的路径,
|
默认情况下-C,-K参数是crt证书和key文件的路径,
|
||||||
@@ -1483,11 +1604,13 @@ sps下级,限速100K
|
|||||||
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
如果是base64://开头,那么就认为后面的数据是base64编码的,会解码后使用。
|
||||||
|
|
||||||
### 6.14 独立服务
|
### 6.14 独立服务
|
||||||
|
|
||||||
sps一个端口可完成完整功能的代理`http(s)\socks\ss`功能。
|
sps一个端口可完成完整功能的代理`http(s)\socks\ss`功能。
|
||||||
下面这个命令,就是一键开启http(s)\ss\socks服务,同时开启socks5的udp和ss的udp功能。
|
下面这个命令,就是一键开启http(s)\ss\socks服务,同时开启socks5的udp和ss的udp功能。
|
||||||
`proxy sps -p :33080 --ssudp --udp --udp-port 0`
|
`proxy sps -p :33080 --ssudp --udp --udp-port 0`
|
||||||
|
|
||||||
### 6.15 目标重定向
|
### 6.15 目标重定向
|
||||||
|
|
||||||
sps功能提供的http(s)\socks5\ss代理功能,客户端通过sps代理去连接指定的“目标”,这个“目标”一般是网站也可能是任意的tcp地址,
|
sps功能提供的http(s)\socks5\ss代理功能,客户端通过sps代理去连接指定的“目标”,这个“目标”一般是网站也可能是任意的tcp地址,
|
||||||
网站”目标“一般是foo.com:80,foo.com:443,sps支持使用--rewrite参数指定一个“目标”重定向规则文件,对目标进行重定向,客户端是无感知的,
|
网站”目标“一般是foo.com:80,foo.com:443,sps支持使用--rewrite参数指定一个“目标”重定向规则文件,对目标进行重定向,客户端是无感知的,
|
||||||
比如你对“目标”:demo.com:80重定向到192.168.0.12:80,那么客户端访问网站demo.com,其实访问的是192.168.0.12提供的网站服务。
|
比如你对“目标”:demo.com:80重定向到192.168.0.12:80,那么客户端访问网站demo.com,其实访问的是192.168.0.12提供的网站服务。
|
||||||
@@ -1513,6 +1636,7 @@ www.a.com:80 10.0.0.2:8080
|
|||||||
要指定和tcp端口不一样的端口。
|
要指定和tcp端口不一样的端口。
|
||||||
|
|
||||||
### 6.17 iptables 透明代理
|
### 6.17 iptables 透明代理
|
||||||
|
|
||||||
sps模式支持Linux系统的iptables转发支持,也就是通常所说的iptables透明代理,如果在网关设备上进行iptables透明代理,那么对通过网关联网的设备就能实现无感知的代理。
|
sps模式支持Linux系统的iptables转发支持,也就是通常所说的iptables透明代理,如果在网关设备上进行iptables透明代理,那么对通过网关联网的设备就能实现无感知的代理。
|
||||||
|
|
||||||
启动命令实例:
|
启动命令实例:
|
||||||
@@ -1522,6 +1646,7 @@ sps模式支持Linux系统的iptables转发支持,也就是通常所说的ipta
|
|||||||
这里假设存在一个http的上级代理1.1.1.1:33080,使用ws传输数据。
|
这里假设存在一个http的上级代理1.1.1.1:33080,使用ws传输数据。
|
||||||
|
|
||||||
然后添加iptables规则,下面是参考规则:
|
然后添加iptables规则,下面是参考规则:
|
||||||
|
|
||||||
```shell
|
```shell
|
||||||
#上级proxy服务端服务器IP地址:
|
#上级proxy服务端服务器IP地址:
|
||||||
proxy_server_ip=1.1.1.1
|
proxy_server_ip=1.1.1.1
|
||||||
@@ -1555,6 +1680,7 @@ iptables -t nat -A PREROUTING -p tcp -j PROXY
|
|||||||
# Apply the rules to localhost
|
# Apply the rules to localhost
|
||||||
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
iptables -t nat -A OUTPUT -p tcp -j PROXY
|
||||||
```
|
```
|
||||||
|
|
||||||
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
- 清空整个链 iptables -F 链名比如iptables -t nat -F PROXY
|
||||||
- 删除指定的用户自定义链 iptables -X 链名 比如 iptables -t nat -X 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
|
- 从所选链中删除规则 iptables -D 链名 规则详情 比如 iptables -t nat -D PROXY -d 223.223.192.0/255.255.240.0 -j RETURN
|
||||||
@@ -1566,13 +1692,16 @@ iptables -t nat -A OUTPUT -p tcp -j PROXY
|
|||||||
## 7.KCP配置
|
## 7.KCP配置
|
||||||
|
|
||||||
### 7.1 配置介绍
|
### 7.1 配置介绍
|
||||||
|
|
||||||
proxy的很多功能都支持kcp协议,凡是使用了kcp协议的功能都支持这里介绍的配置参数。
|
proxy的很多功能都支持kcp协议,凡是使用了kcp协议的功能都支持这里介绍的配置参数。
|
||||||
所以这里统一对KCP配置参数进行介绍。
|
所以这里统一对KCP配置参数进行介绍。
|
||||||
|
|
||||||
### 7.2 详细配置
|
### 7.2 详细配置
|
||||||
|
|
||||||
所有的KCP配置参数共有17个,你可以都不用设置,他们都有默认值,如果为了或者最好的效果,
|
所有的KCP配置参数共有17个,你可以都不用设置,他们都有默认值,如果为了或者最好的效果,
|
||||||
就需要自己根据自己根据网络情况对参数进行配置。由于kcp配置很复杂需要一定的网络基础知识,
|
就需要自己根据自己根据网络情况对参数进行配置。由于kcp配置很复杂需要一定的网络基础知识,
|
||||||
如果想获得kcp参数更详细的配置和解说,请自行搜索。每个参数的命令行名称以及默认值和简单的功能说明如下:
|
如果想获得kcp参数更详细的配置和解说,请自行搜索。每个参数的命令行名称以及默认值和简单的功能说明如下:
|
||||||
|
|
||||||
```
|
```
|
||||||
--kcp-key="secrect" pre-shared secret between client and server
|
--kcp-key="secrect" pre-shared secret between client and server
|
||||||
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
|
--kcp-method="aes" encrypt/decrypt method, can be: aes, aes-128, aes-192, salsa20, blowfish,
|
||||||
@@ -1593,6 +1722,7 @@ twofish, cast5, 3des, tea, xtea, xor, sm4, none
|
|||||||
--kcp-sockbuf=4194304 be carefull!
|
--kcp-sockbuf=4194304 be carefull!
|
||||||
--kcp-keepalive=10 be carefull!
|
--kcp-keepalive=10 be carefull!
|
||||||
```
|
```
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
参数:--kcp-mode中的四种fast3, fast2, fast, normal模式,
|
参数:--kcp-mode中的四种fast3, fast2, fast, normal模式,
|
||||||
相当于设置了下面四个参数:
|
相当于设置了下面四个参数:
|
||||||
@@ -1604,6 +1734,7 @@ fast3:`--nodelay=1 --interval=10 --resend=2 --nc=1`
|
|||||||
## 8.安全DNS
|
## 8.安全DNS
|
||||||
|
|
||||||
### 8.1 介绍
|
### 8.1 介绍
|
||||||
|
|
||||||
众所周知DNS是UDP端口53提供的服务,但是随着网络的发展一些知名DNS服务器也支持TCP方式dns查询,比如谷歌的8.8.8.8,proxy的DNS防污染服务器原理就是在本地启动一个proxy的DNS代理服务器,它用TCP的方式通过上级代理进行dns查询。如果它和上级代理通讯采用加密的方式,那么就可以进行安全无污染的DNS解析,还支持独立服务,并发解析,支持增强的hosts文件功能支持灵活的并发解析转发。
|
众所周知DNS是UDP端口53提供的服务,但是随着网络的发展一些知名DNS服务器也支持TCP方式dns查询,比如谷歌的8.8.8.8,proxy的DNS防污染服务器原理就是在本地启动一个proxy的DNS代理服务器,它用TCP的方式通过上级代理进行dns查询。如果它和上级代理通讯采用加密的方式,那么就可以进行安全无污染的DNS解析,还支持独立服务,并发解析,支持增强的hosts文件功能支持灵活的并发解析转发。
|
||||||
|
|
||||||
dns解析顺序:
|
dns解析顺序:
|
||||||
@@ -1616,9 +1747,9 @@ direct:通过本地网络去连接-q参数指定的dns服务器去解析域名
|
|||||||
system:通过系统dns去解析域名。
|
system:通过系统dns去解析域名。
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
--hosts 参数指定的host文件格式和系统hosts文件一致,而且域名支持通配符,可以参考hosts文件。
|
--hosts 参数指定的host文件格式和系统hosts文件一致,而且域名支持通配符,可以参考hosts文件。
|
||||||
--forward 参数指定的解析转发规则文件,格式可以参考resolve.rules文件,域名支持通配符,支持为每个域名指定多个dns服务器并发解析,谁最快解析成功就用谁的解析结果。
|
--forward 参数指定的解析转发规则文件,格式可以参考resolve.rules文件,域名支持通配符,支持为每个域名指定多个dns服务器并发解析,谁最快解析成功就用谁的解析结果。
|
||||||
-q 参数可以指定多个远程dns服务器,执行并发解析谁最快解析成功就用谁的解析结果,默认是:1.1.1.1,8.8.8.8,9.9.9.9,多个用逗号分割,
|
-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
|
比如还可以带端口:1.1.1.1,8.8.8.8#53,9.9.9.9
|
||||||
|
|
||||||
如果独立服务,不需要上级:
|
如果独立服务,不需要上级:
|
||||||
@@ -1649,7 +1780,7 @@ or
|
|||||||
上级代理执行的命令是:
|
上级代理执行的命令是:
|
||||||
`proxy http -t tls -C proxy.crt -K proxy.key -p :33080`
|
`proxy http -t tls -C proxy.crt -K proxy.key -p :33080`
|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
`proxy dns -S http -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
||||||
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
||||||
|
|
||||||
#### 8.2.4 TLS加密的SOCKS5上级代理
|
#### 8.2.4 TLS加密的SOCKS5上级代理
|
||||||
@@ -1658,7 +1789,7 @@ or
|
|||||||
上级代理执行的命令是:
|
上级代理执行的命令是:
|
||||||
`proxy socks -t tls -C proxy.crt -K proxy.key -p :33080`
|
`proxy socks -t tls -C proxy.crt -K proxy.key -p :33080`
|
||||||
本地执行:
|
本地执行:
|
||||||
`proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
`proxy dns -S socks -T tls -P 2.2.2.2:33080 -C proxy.crt -K proxy.key -p :53`
|
||||||
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
那么本地的UDP端口53就提供了安全防污染DNS解析功能。
|
||||||
|
|
||||||
#### 8.2.5 KCP加密的HTTP(S)上级代理
|
#### 8.2.5 KCP加密的HTTP(S)上级代理
|
||||||
@@ -1710,6 +1841,7 @@ proxy的http(s)/socks5/sps代理功能,支持通过API控制用户对代理对
|
|||||||
- 缓存认证结果,时间可以设置,减轻API压力。
|
- 缓存认证结果,时间可以设置,减轻API压力。
|
||||||
|
|
||||||
#### 具体使用
|
#### 具体使用
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`和`--auth-cache`三个参数控制。
|
proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`和`--auth-cache`三个参数控制。
|
||||||
参数`--auth-url`是HTTP API接口地址,客户端连接的时候,proxy会GET方式请求这url,带上下面参数,如果返回HTTP状态码204,代表认证成功,其它情况认为认证失败。
|
参数`--auth-url`是HTTP API接口地址,客户端连接的时候,proxy会GET方式请求这url,带上下面参数,如果返回HTTP状态码204,代表认证成功,其它情况认为认证失败。
|
||||||
|
|
||||||
@@ -1717,6 +1849,7 @@ proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`
|
|||||||
`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`
|
`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和pass` 当代理开启了认证功能,这里就是客户端提供的用户名和密码。
|
`user和pass` 当代理开启了认证功能,这里就是客户端提供的用户名和密码。
|
||||||
`client_addr` 客户端访问代理时的用的地址,格式IP:端口。
|
`client_addr` 客户端访问代理时的用的地址,格式IP:端口。
|
||||||
`local_addr` 客户端访问的代理地址,格式IP:端口。
|
`local_addr` 客户端访问的代理地址,格式IP:端口。
|
||||||
@@ -1725,6 +1858,7 @@ proxy的http(s)/socks5/sps代理API功能,通过`--auth-url`和`--auth-nouser`
|
|||||||
`target` 客户端要访问的目标,如果是http(s)代理,target是访问的具体url;如果是socks5代理,target是空。
|
`target` 客户端要访问的目标,如果是http(s)代理,target是访问的具体url;如果是socks5代理,target是空。
|
||||||
|
|
||||||
#### 示例
|
#### 示例
|
||||||
|
|
||||||
假设--auth-url http://127.0.0.1:333/auth.php 指向了一个php接口地址.
|
假设--auth-url http://127.0.0.1:333/auth.php 指向了一个php接口地址.
|
||||||
auth.php内容如下:
|
auth.php内容如下:
|
||||||
|
|
||||||
@@ -1765,6 +1899,7 @@ if($ok){
|
|||||||
```
|
```
|
||||||
|
|
||||||
#### 解释
|
#### 解释
|
||||||
|
|
||||||
userconns:用户的最大连接数,不限制为0或者不设置这个头部。
|
userconns:用户的最大连接数,不限制为0或者不设置这个头部。
|
||||||
ipconns:用户IP的最大连接数,不限制为0或者不设置这个头部。
|
ipconns:用户IP的最大连接数,不限制为0或者不设置这个头部。
|
||||||
userrate:用户的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
|
userrate:用户的单个TCP连接速率限制,单位:字节/秒,不限制为0或者不设置这个头部。
|
||||||
@@ -1772,7 +1907,9 @@ iprate:用户IP的单个TCP连接速率限制,单位:字节/秒,不限
|
|||||||
upstream:使用的上级,没有为空,或者不设置这个头部。
|
upstream:使用的上级,没有为空,或者不设置这个头部。
|
||||||
|
|
||||||
#### 提示
|
#### 提示
|
||||||
1.默认情况下,设置了`--auth-url`是强制要求客户端提供用户名和密码的;如果不需要强制要求客户端提供用户名密码,并认证,可以加上`--auth-nouser`,每次访问仍然会访问认证地址`--auth-url`进行认证,当客户端没有发生认证信息当时候,php接口里面接收的$user认证用户名和$pass认证密码都为空。
|
|
||||||
|
1.默认情况下,设置了`--auth-url`是强制要求客户端提供用户名和密码的;如果不需要强制要求客户端提供用户名密码,并认证,可以加上`--auth-nouser`,每次访问仍然会访问认证地址`--auth-url`
|
||||||
|
进行认证,当客户端没有发生认证信息当时候,php接口里面接收的$user认证用户名和$pass认证密码都为空。
|
||||||
2.连接数限制优先级:用户认证文件连接数限制-》文件ip.limit连接数限制-》API用户连接数限制-》API的IP连接数限制-》命令行全局连接数限制。
|
2.连接数限制优先级:用户认证文件连接数限制-》文件ip.limit连接数限制-》API用户连接数限制-》API的IP连接数限制-》命令行全局连接数限制。
|
||||||
3.速率限制优先级:用户认证文件速率限制-》文件ip.limit速率限制-》API用户速率限制-》API的IP速率限制-》命令行全局速率限制。
|
3.速率限制优先级:用户认证文件速率限制-》文件ip.limit速率限制-》API用户速率限制-》API的IP速率限制-》命令行全局速率限制。
|
||||||
3.上级获取优先级:用户认证文件的upstream-》文件ip.limit的upstream-》API的upstream-》命令行指定的上级。
|
3.上级获取优先级:用户认证文件的upstream-》文件ip.limit的upstream-》API的upstream-》命令行指定的上级。
|
||||||
@@ -1792,6 +1929,7 @@ service是socks时,upstream只支持socks5代理,格式:
|
|||||||
upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2.2.2.2:33080?argk=argv`,具体介绍请参考SPS章节的,**多个上级**,`-P`参数的说明。
|
upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2.2.2.2:33080?argk=argv`,具体介绍请参考SPS章节的,**多个上级**,`-P`参数的说明。
|
||||||
3.参数,`?`后面`argk=argv`是参数:参数名称=参数值,多个参数用`&`连接。
|
3.参数,`?`后面`argk=argv`是参数:参数名称=参数值,多个参数用`&`连接。
|
||||||
支持的所有参数如下,和命令行同名参数意义一致。
|
支持的所有参数如下,和命令行同名参数意义一致。
|
||||||
|
|
||||||
1. parent-type : 上级底层传输类型,支持 tcp,tls,ws,wss。
|
1. parent-type : 上级底层传输类型,支持 tcp,tls,ws,wss。
|
||||||
2. parent-ws-method : 上级底层ws传输类型的加密方法,支持的值和命令行支持的值范围一样。
|
2. parent-ws-method : 上级底层ws传输类型的加密方法,支持的值和命令行支持的值范围一样。
|
||||||
3. parent-ws-password : 上级底层ws传输类型的加密密码,数字字母组成的密码。
|
3. parent-ws-password : 上级底层ws传输类型的加密密码,数字字母组成的密码。
|
||||||
@@ -1806,19 +1944,18 @@ upstream支持socks5、http(s)代理,支持认证,格式:`protocol://a:b@2
|
|||||||
proxy的http(s)/socks5/sps/tcp/udp代理功能支持流量上报,可以通过参数`--traffic-url`设置一个http接口地址。
|
proxy的http(s)/socks5/sps/tcp/udp代理功能支持流量上报,可以通过参数`--traffic-url`设置一个http接口地址。
|
||||||
proxy会把连接使用的流量上报到这个地址,具体情况是,proxy发送一个HTTP到GET请求到`--traffic-url`设置的HTTP URL地址.
|
proxy会把连接使用的流量上报到这个地址,具体情况是,proxy发送一个HTTP到GET请求到`--traffic-url`设置的HTTP URL地址.
|
||||||
上报模式有两种,可以通过`--traffic-mode`参数指定,可以是`normal`普通模式上报,也可以是`fast`快速模式上报。
|
上报模式有两种,可以通过`--traffic-mode`参数指定,可以是`normal`普通模式上报,也可以是`fast`快速模式上报。
|
||||||
|
|
||||||
1. `normal`普通模式上报
|
1. `normal`普通模式上报
|
||||||
当连接释放时,proxy会把此次连接使用的流量上报到这个`--traffic-url`地址.
|
当连接释放时,proxy会把此次连接使用的流量上报到这个`--traffic-url`地址.
|
||||||
2. `fast`快速模式上报
|
2. `fast`快速模式上报
|
||||||
对已经建立的每个连接,proxy会`定时`把这个连接产生的流量上报到这个这个`--traffic-url`地址.
|
对已经建立的每个连接,proxy会`定时`把这个连接产生的流量上报到这个这个`--traffic-url`地址.
|
||||||
`定时`默认是5秒,可以通过参数`--traffic-interval`修改`定时`为合适的秒数。
|
`定时`默认是5秒,可以通过参数`--traffic-interval`修改`定时`为合适的秒数。
|
||||||
流量上报功能结合上面的API认证功能可以实现实时控制用户的流量使用,流量统计,流量限制;流量上报到接口,接口把流量数据写入数据库,然后认证API查询数据库判断用户或者IP流量使用情况,用来确定用户是否可以认证成功.
|
流量上报功能结合上面的API认证功能可以实现实时控制用户的流量使用,流量统计,流量限制;流量上报到接口,接口把流量数据写入数据库,然后认证API查询数据库判断用户或者IP流量使用情况,用来确定用户是否可以认证成功.
|
||||||
|
|
||||||
下面是一个完整的URL请求实例:
|
下面是一个完整的URL请求实例:
|
||||||
|
|
||||||
`http://127.0.0.1:8080/auth.php?act=traffic&bytes=7627&client_addr=127.0.0.1%3A63637
|
`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
|
&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`
|
||||||
&server_addr=127.0.0.1%3A33080&target_addr=www.baidu.com%3A443
|
|
||||||
&upstream=http%3A%2F%2F127.0.0.1%3A3100&username=a`
|
|
||||||
|
|
||||||
请求参数说明:
|
请求参数说明:
|
||||||
id: 服务id标志。
|
id: 服务id标志。
|
||||||
@@ -1841,10 +1978,10 @@ upstream: 使用的上级,格式是标准URL格式,如果没有使用上级
|
|||||||
|
|
||||||
### 主动断开用户连接
|
### 主动断开用户连接
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能支持`控制接口`,可以通过参数`--control-url`指定的http接口地址,
|
proxy的http(s)/socks5/sps代理功能支持`控制接口`,可以通过参数`--control-url`指定的http接口地址, 那么proxy就会`定期`
|
||||||
那么proxy就会`定期`的把当前连接到proxy的全部用户名或客户端IP发送到此URL,具体情况是,proxy发送一个HTTP的POST请求到`--control-url`设置的HTTP URL地址.`定期`默认是30秒,可以通过`--control-sleep`参数修改此值。
|
的把当前连接到proxy的全部用户名或客户端IP发送到此URL,具体情况是,proxy发送一个HTTP的POST请求到`--control-url`设置的HTTP URL地址.`定期`默认是30秒,可以通过`--control-sleep`
|
||||||
当用户过期,或者用户流量已经用完,通过认证API只能控制用户不能新建连接,但是已经和proxy建立当连接没法立刻断开,
|
参数修改此值。
|
||||||
那么通过控制接口可以解决这个问题,控制接口会在最慢`定期`时间内通过控制接口返回的内容,结束已经无效的用户建立的连接。
|
当用户过期,或者用户流量已经用完,通过认证API只能控制用户不能新建连接,但是已经和proxy建立当连接没法立刻断开, 那么通过控制接口可以解决这个问题,控制接口会在最慢`定期`时间内通过控制接口返回的内容,结束已经无效的用户建立的连接。
|
||||||
|
|
||||||
#### 控制接口请求说明
|
#### 控制接口请求说明
|
||||||
|
|
||||||
@@ -1867,6 +2004,7 @@ ip:当前连接到proxy的客户端ip地址,多个使用英文逗号分割
|
|||||||
返回的用户和ip已经建立的连接会被proxy断开。
|
返回的用户和ip已经建立的连接会被proxy断开。
|
||||||
|
|
||||||
#### 示例
|
#### 示例
|
||||||
|
|
||||||
假设--control-url `http://127.0.0.1:33088/user/control.php` 指向了一个php接口地址.
|
假设--control-url `http://127.0.0.1:33088/user/control.php` 指向了一个php接口地址.
|
||||||
control.php内容如下:
|
control.php内容如下:
|
||||||
|
|
||||||
@@ -1890,19 +2028,22 @@ echo json_encode($data);
|
|||||||
|
|
||||||
### 使用代理
|
### 使用代理
|
||||||
|
|
||||||
http(s)/socks5/sps认证API(`--auth-url`)、控制API(`--control-url`)、流量上报API(`--traffic-url`)三个地址的访问,支持通过代理访问,参数是:`--auth-proxy`,格式和`--jumper`格式一致,详细详细请参考`--jumper`。
|
http(s)/socks5/sps认证API(`--auth-url`)、控制API(`--control-url`)、流量上报API(`--traffic-url`)三个地址的访问,支持通过代理访问,参数是:`--auth-proxy`
|
||||||
|
,格式和`--jumper`格式一致,详细详细请参考`--jumper`。
|
||||||
|
|
||||||
## 10.本地认证,限速,控制连接数
|
## 10.本地认证,限速,控制连接数
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能,支持通过配置文件控制用户对代理对访问,支持开启http(s)代理``Proxy Basic 代理认证`,socks5代理认证。
|
proxy的http(s)/socks5/sps代理功能,支持通过配置文件控制用户对代理对访问,支持开启http(s)代理``Proxy Basic 代理认证`,socks5代理认证。
|
||||||
|
|
||||||
### 开始使用
|
### 开始使用
|
||||||
|
|
||||||
proxy的http(s)/socks5/sps代理功能可以通过
|
proxy的http(s)/socks5/sps代理功能可以通过
|
||||||
`--auth-file`,`--max-conns`,`--ip-limit`,`--rate-limit`,`-a`这五个参数控制。
|
`--auth-file`,`--max-conns`,`--ip-limit`,`--rate-limit`,`-a`这五个参数控制。
|
||||||
|
|
||||||
#### 参数详细解释
|
#### 参数详细解释
|
||||||
|
|
||||||
##### `--auth-file`
|
##### `--auth-file`
|
||||||
|
|
||||||
认证的用户名和密码文件,该参数指定一个文件,一行一条规则,格式是:"用户名:密码:连接数:速率:上级"。
|
认证的用户名和密码文件,该参数指定一个文件,一行一条规则,格式是:"用户名:密码:连接数:速率:上级"。
|
||||||
`连接数`是用户最大连接数,`速率`是用户每个tcp连接最大速度,单位是:字节/秒,`上级`是用户使用的上级。
|
`连接数`是用户最大连接数,`速率`是用户每个tcp连接最大速度,单位是:字节/秒,`上级`是用户使用的上级。
|
||||||
不仅可以通过`--auth-file`设置认证用户,也可以直接用`-a`参数设置,多个用户就重复多个`-a`参数即可。
|
不仅可以通过`--auth-file`设置认证用户,也可以直接用`-a`参数设置,多个用户就重复多个`-a`参数即可。
|
||||||
@@ -1917,9 +2058,11 @@ proxy的http(s)/socks5/sps代理功能可以通过
|
|||||||
`http://192.168.1.1:3100`是这个用户使用的上级,没有就留空
|
`http://192.168.1.1:3100`是这个用户使用的上级,没有就留空
|
||||||
|
|
||||||
##### `--max-conns`
|
##### `--max-conns`
|
||||||
|
|
||||||
限制代理服务的全局最大连接数,一个数字,0为不限制,默认0。
|
限制代理服务的全局最大连接数,一个数字,0为不限制,默认0。
|
||||||
|
|
||||||
##### `--ip-limit`
|
##### `--ip-limit`
|
||||||
|
|
||||||
控制客户端IP的连接数和连接速率,该参数指定一个文件,一行一条规则,#开头的是注视。
|
控制客户端IP的连接数和连接速率,该参数指定一个文件,一行一条规则,#开头的是注视。
|
||||||
示例文件ip.limit,规则格式如下:
|
示例文件ip.limit,规则格式如下:
|
||||||
`127.0.0.1:100:10240:http://192.168.1.1:3100`
|
`127.0.0.1:100:10240:http://192.168.1.1:3100`
|
||||||
@@ -1930,6 +2073,7 @@ proxy的http(s)/socks5/sps代理功能可以通过
|
|||||||
`http://192.168.1.1:3100`是这个IP使用的上级,没有就留空
|
`http://192.168.1.1:3100`是这个IP使用的上级,没有就留空
|
||||||
|
|
||||||
##### `--rate-limit`
|
##### `--rate-limit`
|
||||||
|
|
||||||
限制服务的每一个tcp连接的速度,比如:100K 2000K 1M . 0意味着无限制,默认0。
|
限制服务的每一个tcp连接的速度,比如:100K 2000K 1M . 0意味着无限制,默认0。
|
||||||
|
|
||||||
## 11.集群管理
|
## 11.集群管理
|
||||||
@@ -1951,10 +2095,10 @@ agent : 是功能参数,表示运行agent模式。
|
|||||||
-c :`proxyadmin集群版`的集群端口地址,格式:IP:端口。
|
-c :`proxyadmin集群版`的集群端口地址,格式:IP:端口。
|
||||||
|
|
||||||
-i : agent唯一标识,保证每个agent的都不一样,此处指定的`唯一标识`,在控制面板添加节点的时候用到,IP一栏填写这个`唯一标识`。
|
-i : agent唯一标识,保证每个agent的都不一样,此处指定的`唯一标识`,在控制面板添加节点的时候用到,IP一栏填写这个`唯一标识`。
|
||||||
如果-i不指定,默认是空,控制面板添加节点的时候IP一栏填写:agent的出口IP。
|
如果-i不指定,默认是空,控制面板添加节点的时候IP一栏填写:agent的出口IP。
|
||||||
|
|
||||||
-u: 代理参数,默认是空。可以指定一个代理,agent会通过这个代理与cluster通讯。
|
-u: 代理参数,默认是空。可以指定一个代理,agent会通过这个代理与cluster通讯。
|
||||||
格式和`--jumper`格式一致,详细情况请参考手册中`--jumper`部分。
|
格式和`--jumper`格式一致,详细情况请参考手册中`--jumper`部分。
|
||||||
|
|
||||||
提示:
|
提示:
|
||||||
|
|
||||||
@@ -1967,12 +2111,12 @@ client服务参数里面可以通过使用占位符:`{AGENT_ID}`引用agent的
|
|||||||
|
|
||||||
2.如果使用了代理参数`-u`,务必设置唯一标示参数`-i`,不然cluster无法区分不同的agent,agent将不能正常工作。
|
2.如果使用了代理参数`-u`,务必设置唯一标示参数`-i`,不然cluster无法区分不同的agent,agent将不能正常工作。
|
||||||
|
|
||||||
|
|
||||||
## 12.http、https 网站反向代理
|
## 12.http、https 网站反向代理
|
||||||
|
|
||||||
proxy可以对 http 和 https 网站进行反向代理。
|
proxy可以对 http 和 https 网站进行反向代理。
|
||||||
|
|
||||||
支持特性如下:
|
支持特性如下:
|
||||||
|
|
||||||
- http和https相互转换。
|
- http和https相互转换。
|
||||||
- 多个后端。
|
- 多个后端。
|
||||||
- 多个后端负载均衡。
|
- 多个后端负载均衡。
|
||||||
@@ -1989,3 +2133,62 @@ proxy rhttp -c rhttp.toml
|
|||||||
|
|
||||||
具体使用可以参考配置文件 [rhttp.toml](https://github.com/snail007/goproxy/blob/master/rhttp.toml) ,里面有完整配置说明。
|
具体使用可以参考配置文件 [rhttp.toml](https://github.com/snail007/goproxy/blob/master/rhttp.toml) ,里面有完整配置说明。
|
||||||
|
|
||||||
|
## 13.典型用法-拨号VPS
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、vps有一个主网卡,名称是eth0,ip是1.1.1.1,然后vps可以pppoe拨号,拨号建立的网卡名称前缀都是`pppoe_`。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- 提供动态IP代理服务,客户端访问`1.1.1.1`的代理端口`7777`,可以使用拨号的ip随机选择一个作为出口,`7777`端口支持代理认证。
|
||||||
|
- 7777端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
1. vps执行`proxy sps -p :7777 --bind-ip pppoe_*:7777 -a user1:password1 -a user2:password2 `。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. 更多认证方式可以参考手册`API认证`,`认证`部分。
|
||||||
|
|
||||||
|
## 14.典型用法-多IP的VPS
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、vps有一个主网卡,名称是`eth0`,ip是1.1.1.1,然后`eth0`配置了255个子网卡并设置了IP,比如:`eth0:1`,`eth0:255`,子网卡名称前缀都是:`eth0:`。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- 提供动态IP代理服务,客户端访问`1.1.1.1`的代理端口`7777`,可以使用配置的255个子网卡的ip中随机选择一个作为出口,`7777`端口支持代理认证。
|
||||||
|
- 7777端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
1. vps执行`proxy sps -p :7777 --bind-ip eth0::7777 -a user1:password1 -a user2:password2 `。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. 更多认证方式可以参考手册`API认证`,`认证`部分。
|
||||||
|
|
||||||
|
## 15.典型用法-拨号的VPS集群
|
||||||
|
|
||||||
|
为了方便说明,假设背景情况如下:
|
||||||
|
|
||||||
|
1、有一批vps,它们每个都有一个主网卡配置了固定的IP:x.x.x.x,然后vps可以pppoe拨号,拨号建立的网卡名称前缀都是`pppoe_`。
|
||||||
|
|
||||||
|
2、有一个VPS作为代理入口,它的ip是2.2.2.2。
|
||||||
|
|
||||||
|
实现的效果:
|
||||||
|
|
||||||
|
- `2.2.2.2`提供动态IP代理服务,客户端访问`2.2.2.2`的代理端口`8888`,可以随机选择拨号vps集群中一个,然后使用拨号vps的拨号ip随机选择一个作为出口ip,`8888`端口支持代理认证。
|
||||||
|
- `8888`端口同时支持http/socks5代理。
|
||||||
|
|
||||||
|
操作步骤:
|
||||||
|
|
||||||
|
拨号VPS:
|
||||||
|
|
||||||
|
1. 拨号的vps执行`proxy sps -p :7777 --bind-ip pppoe_:7777 `。
|
||||||
|
|
||||||
|
入口VPS:
|
||||||
|
|
||||||
|
1. `2.2.2.2`
|
||||||
|
的vps执行`proxy sps -p :8888 -a user1:password1 -a user2:password2 -P http://x.x.x.1:7777 -P http://x.x.x.2:7777`。
|
||||||
|
2. 命令中`-a`是设置`代理认证用户`,多个用户,可以重复`-a`参数,格式是:`用户名:密码`。
|
||||||
|
3. `x.x.x.1`,`x.x.x.2`是拨号vps的固定IP,有多个,重复`-P`参数即可
|
||||||
|
|||||||
Reference in New Issue
Block a user