- Jul 4, 2019
- usage

# 手册前言（使用必读）

### 前言

#### GOPROXY使用必读

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

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

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

#### 名词解释

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

1. `goproxy`，`proxy`，均指本项目：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端生成，其它端复制过去即可，要保证所有端证书一样。

comments powered by Disqus