前言

GOPROXY使用必读

  1. 手册和项目中使用了一部分的名词,它们本身的含义和在goproxy的专有含义是不一样的,所以前言中对这些名词做了解释,不然直接看具体手册章节必然会出现理解偏差,导致不能正确的使用goproxy。

  2. goproxy的很多功能都使用了相同的核心技术,比如底层传输:tcps传输协议,ws协议,kcp参数,黑白名单,认证等,它们的用法是一样的。 为了手册的简洁,相同的功能的说明,就放在这里统一说明,不在每个地方重复的说明。

  3. proxy功能很多,往往你想要用的只是其中一个功能,那么不要被手册其它功能内容吓到和干扰,你只需要看前言和你需要用到的功能的手册部分即可!

名词解释

本站包括项目手册,如果没有特殊说明:

  1. goproxyproxy,均指本项目:https://github.com/snail007/goproxy

  2. 本地,均指需要使用代理的应用程序直接连接的代理,一般是你日常使用的机器,也可能是一个服务器。

  3. 代理链,指多个相连的代理组成的一个代理链条,一个代理链中至少有两个上下相连的代理,链条中的每一个代理不一定都是proxy提供的,可以是第三方标准代理。

    为了区分,链条的 末端 是入口,称为本地代理是最后一级;链条的 顶端 是出口,称为一级代理。

    连接一级代理的是二级代理,连接二级代理的是三级级代理,以此类推。

    由此可见,本地和一级代理是链条的两端,链条中至少两个代理,链条中间的称为n级代理,越靠近本地n就越大。

    如果链条只有两个代理,那么二级代理和本地代理指的是同一个代理。

  4. 本级,均指链条中,任意一个代理。

  5. 上级父级parent,均指:本级代理连接的上一级代理,可以是proxy提供的代理也可以是第三方标准代理。

分层架构

  1. goproxy数据流动架构,主要分为两层。

  2. 上层是我们熟悉的各种标准服务:socks5代理,http(s)代理,sps代理(ss+http(s)+socks5),tcp代理,udp代理,dns代理,内网穿透。

    也就是命令中的第一参数,代表服务,也称为功能模块,功能。比如:http,socks,sps,tcp,udp,dns等。

  3. 下层也就是底层,负责数据传输,传输的协议和有很多,比如:tcp,tcps,ws,tls,wss,tou,kcp,不同的协议使用的基础协议也是不一样的,

    其中除了tou和kcp使用UDP作为基础协议之外,其它传输协议均是基于TCP。也就是说tou和kcp监听的是UDP端口,其它监听的是TCP端口。

    传输协议在proxy的参数中体现为-T、-t,-T是连接上级使用的传输协议。-t是本地监听的端口使用的传输协议。

    本级代理的-T和和上级代理的-t应该是一致的,不然是无法通讯的,这很好理解,对方说什么语言你用什么语言去聆听才能明白对方说些什么。

IP地址

由于代理示例用到各种IP,示例中统一用IP_X,X是机器名词代号,比如A,B,这样的形式表示一个机器的IP;你在复制命令后实际使用前,记得一定要根据自己情况替换IP_X为你自己的实际IP地址。如果示例中提到了机器A,那么默认它的IP地址就是IP_A,不再重复声明。

高级使用

proxy命令格式是:proxy 功能名称 参数1 参数2 参数n…,proxy功能名称和功能介绍如下:

http http(s)代理

socks socks5代理

sps http(s)+socks5+ss综合代理,一个端口同时支持3种代理

tcp tcp代理,tcp端口转发

udp udp代理,udp端口转发

dns dns代理,dns服务器,dns转发

bridge 多路复用版内网穿透的bridge端

client 多路复用版内网穿透的client端

server 多路复用版内网穿透的server端

tbridge 多链接版内网穿透的bridge端

tclient 多链接版内网穿透的client端

tserver 多链接版内网穿透的server端

由于每个功能参数众多,有的很少用,默认值就能很好工作,手册只是介绍了高频的参数的使用,未提及的参数可以通过 proxy help 功能名称 ,查看到功能相关所有的参数。

如果你想深入了解和掌握proxy每个功能的用法,那么动起手来试试每个参数吧,去体会,去感受就能深刻理解并熟练掌握它。

KCP配置

很多功能的底层传输协议都支持kcp,kcp参数都是以--kcp开头,可以通过proxy help 功能名称 ,比如:proxy help http,去查看所有的参数,包括kcp参数。

虽然参数很多,但是proxy针对大众情况,设置了一波默认值,如果发现默认参数不合你口味,那么你就需要自己搜索kcp每个参数的意思和用法,资料很多,本手册不再赘述。

当然最简单的用法就是设置一个kcp密码即可,KCP协议需要–kcp-key参数设置一个密码用于加密解密数据。

TLS证书

为了安全很多功能都可以使用底层tls传输协议加密传输数据,tls需要一个proxy.crt证书文件和一个私钥proxy.key文件。

这两个文件可以通过命令:proxy keygen proxy 生成。

另外,tls证书只需要在一个proxy端生成,其它端复制过去即可,要保证所有端证书一样。