Skip to content

Commit

Permalink
Update README.md
Browse files Browse the repository at this point in the history
  • Loading branch information
Jackarain committed Jun 4, 2024
1 parent bfbb252 commit a7d06fd
Showing 1 changed file with 21 additions and 9 deletions.
30 changes: 21 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,19 +7,19 @@

使用 `C++20协程` 通过编写为数不多的代码,实现具有极高性能且支持标准 `socks4`/`socks4a`/`socks5`/`http`/`https``server`/`client proxy` 实现,并且 `client``server` 之间可配置通过 `ssl` 加密通信,可配置多级代理,如下架构:

```
``` text
+--------------+ | +--------------+
browser/app --> | proxy server | ---ssl---> | proxy server | --> target server
+--------------+ | +--------------+
local Firewall remote
```

以及服务端可以使用比 `trojan` 更通用的 `https proxy` 协议服务,本质上 `trojan` 的做法就是利用了 `TLS` 而已但却不兼容标准 `https` 协议而失去了灵活生,这是因为 `https proxy` 在很多环境下可以直接,使用而不需要安装任何东西就可以使用(`trojan` 必须要安装本地端),如 `shell` 中声名 `HTTPS_PROXY` 环境变量指向 `proxy server``url` 就可以了。
上图中 `proxy server` 即可以作为 local 端的客户端, 也可以作为 remote 端的服务端, 它可以同时支持多种代理协议以及普通 `http/https` 协议的支持.

如果服务端被他人探测协议,只能得到它是一个 `nginx error page` 服务的结果,因为在探测者不知 `proxy auth` 认证信息的情况下,会导致认证出错,这时的 `proxy server` 将伪装成一个 `nginx` 服务,返回一个 `nginx error page` 页面信息。

```
``` text
| +--------------+
browser/app --> https proxy ---> | proxy server | --> target server
| +--------------+
Expand Down Expand Up @@ -48,7 +48,7 @@ C++ 编译器: Linux 平台 gcc 11 以上, 或 clang 14 以上, windows 平台

首先执行 `git` 克隆源码(源码无任何外部依赖)

```bash
``` bash
git clone <source url>
```

Expand All @@ -58,13 +58,13 @@ git clone <source url>

进入源码目录,执行如下操作:

```bash
``` bash
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
```

`cmake` 命令成功执行完成后,开始输入以下命令编译:

```bash
``` bash
cmake --build build
```

Expand All @@ -76,7 +76,7 @@ cmake --build build

在源码目录运行:

```bash
``` bash
docker build . -t proxy:v1
```

Expand Down Expand Up @@ -111,25 +111,37 @@ docker build . -t proxy:v1
| ssl_ciphers | `ssl` 协议允许的加密算法列表(此选项除非你知道在做什么, 否则不需要关心) |
| ssl_prefer_server_ciphers | 优先使用 server 端加密算法(此选项除非你知道在做什么, 否则不需要关心) |
| http_doc | 启用 `http` 静态文件服务器, 指定静态文件目录 |
| htpasswd | 启用 `http` 认证, 通过 http 访问静态文件时需要认证, auth_users 用于配置用户/密钥信息. |
| autoindex | 在启用 `http` 静态文件服务的情况下, 启用 `autoindex` 将允许浏览器浏览文件目录列表, 与 `nginx``autoindex` 选项功能一样 |
| ipip_db | 指定一个 ipip 数据库文件, 用于获取客户端的地区信息. |
| allow_region | 在启用 ip 数据库的情况下, 指定允许连接的客户端地区 (如: 北京\|河南\|武汉) |
| deny_region | 在启用 ip 数据库的情况下, 指定拒绝连接的客户端地区 (如: 广东\|上海\|山东) |
| udp_timeout | 在启用 udp 中转的情况下, 超过指定时间即回收 udp socket 等相关资源 |
| logs_path | 日志目录 |
| disable_logs | 是否禁止生成日志 |
| disable_http | 是否禁止 `http` 协议 |
| disable_socks | 是否禁止 `socks5`/`socks4` 协议 |
| disable_insecure | 是否禁止非安全连接(即 `ssl` 连接) |
| disable_udp | 是否禁止 udp 协议支持 |
| scramble | 数据是否启用噪声加扰(即通过随机噪声数据混淆数据传输), 此选项需要在2端同时开启 |
| noise_length | 在启用 `scramble` 的时候, 随机发送的噪声数据最大长度, 默认最大长度为4k |

## 静态文件 http 服务器

`proxy server` 不仅是一个 `proxy` 服务器,同时还可以做为一个真实的静态文件 `http` 服务,且支持 `http range`,所以也可以作为 `http` 视频文件服务器,播放器播放 `http` 视频文件时通过 `http range` 进行 `seek`(快进快退),使用方法如下
`proxy server` 不仅是一个 `proxy` 服务器,同时还可以做为一个真实的静态文件 `http` 服务,且支持 `http range`,所以也可以作为 `http` 视频文件服务器,播放器播放 `http` 视频文件时通过 `http``bytes range` 协议进行 `seek`(快进快退),使用方法如下

``` bash
./proxy_server --http_doc /user/doc --server_listen 0.0.0.0:8080
./proxy_server --autoindex true --http_doc /user/doc --server_listen 0.0.0.0:8080
```

然后使用浏览器打开地址 `http://localhost:8080/` 运行效果(浏览器打开):

![image](https://user-images.githubusercontent.com/378220/211153949-74a84038-f899-4e48-99c7-bd6af6bef82d.png)

## 其它相关

[在路由器上配置全局代理科学上网](https://github.com/Jackarain/proxy/wiki/%E5%9C%A8%E8%B7%AF%E7%94%B1%E5%99%A8%E4%B8%8A%E5%88%9B%E5%BB%BA%E5%85%A8%E5%B1%80%E4%BB%A3%E7%90%86%E6%A8%A1%E5%BC%8F)

---

有任何问题可加tg账号: [https://t.me/jackarain](https://t.me/jackarain) 或tg群组: [https://t.me/joinchat/C3WytT4RMvJ4lqxiJiIVhg](https://t.me/joinchat/C3WytT4RMvJ4lqxiJiIVhg)

0 comments on commit a7d06fd

Please sign in to comment.