#socks5-proxy #tls #bypass #tunnel #data #tcp-udp #networking

bin+lib overtls

一个简单的代理隧道,用于绕过GFW的最简工具

21个版本

0.2.31 2024年6月21日
0.2.30 2024年6月18日
0.2.25 2024年5月20日
0.2.22 2024年4月20日
0.2.10 2024年2月15日

#985 in 网络编程

Download history 19/week @ 2024-04-22 150/week @ 2024-04-29 152/week @ 2024-05-06 191/week @ 2024-05-20 330/week @ 2024-06-03 182/week @ 2024-06-10 299/week @ 2024-06-17 9/week @ 2024-06-24 122/week @ 2024-07-01

1,875 每月下载量

MITGPL-3.0-or-later

230KB
5K SLoC

Rust 3K SLoC // 0.0% comments Shell 2.5K SLoC // 0.1% comments

overtls

Crates.io overtls Documentation Download License

中文版

overtls 是一个 SOCKS5 类型代理,它通过TLS实现数据传输,并支持同时进行TCP和UDP流量转发。

功能完整,代码简洁,核心功能总计1200行代码。

OverTLS 是一个没有 SSRSSSSRoT 的Rust实现,只保留了 oT,速度快且稳定。

    fun isOverTLS() : Boolean =
        over_tls_enable && method == "none" && obfs == "plain" && protocol == "origin"

原理

为了有效地欺骗 GFW,直接使用 TLS 作为代理协议是最简单的方法,因为 TLS 协议实际上是互联网的数据传输标准,因此GFW无法阻止 TLS 协议,而 TLS 协议是一个加密协议,因此GFW无法知道通过 TLS 协议传输的数据内容。

我们可以利用这一特性,将客户端和服务器端的加密和解密过程封装为代理服务,从而在GFW的监视下进行加密的TCP和UDP代理。

overtls 客户端首先与 overtls 服务器建立 TLS 连接,然后 overtls 客户端和 overtls 服务器之间的数据交换被加密。

我们简单约定,访问唯一资源 uri 的 overtls 客户端被认为是代理,服务器将包含此 uri 的数据包转发到指定的目标地址。

这就是我们的代理是如何实现的。

因此,overtls 服务器和 overtls 客户端之间的数据交换是加密的,而 overtls 服务器和目标服务器之间的数据交换是“明文”。

总之,我们需要准备以下事项

  • 一个具有公共 IPVPS 主机,需要您自行购买。
  • 一个 域名,可以购买或免费申请,并将 域名 解析到 VPS 主机的 IP
  • 一对 https 证书/私钥,可以在 Let's Encrypt 免费购买或申请。
  • 一个 http 服务器软件(例如 nginx),用于伪装网站资源或作为前端的 反向代理

安装

从 crates.io 安装

如果您已安装 Rust,可以直接安装 overtls。

cargo install overtls

预编译的二进制文件

可以直接从源代码编译,或者从 发布页面 下载预编译的二进制文件。

从源代码编译

要从源代码编译,您需要首先安装 Rust 编程语言环境,然后运行以下命令来编译 overtls。

git clone https://github.com/shadowsocksr-live/overtls.git
cd overtls
cargo build --release
sudo cp target/release/overtls /usr/local/bin/

服务器端一键安装脚本

在安装之前,请准备一个具有公共 IPVPS 主机和一个 域名,并将 域名 解析到该主机的 IP,然后运行以下命令并按照提示操作,如果一切顺利,结果将在您的主机上安装 overtls 服务器和 nginx 前端代理,并申请证书。

目前仅支持 3 种 CPU 架构的 Linux 机器:x86_64armv7arm64

sudo apt install -y wget # Debian/Ubuntu
sudo yum install -y wget # CentOS
wget https://raw.githubusercontent.com/shadowsocksr-live/overtls/master/install/overtls-install-musl.sh
chmod +x overtls-install-musl.sh
./overtls-install-musl.sh
sudo systemctl start overtls

用法

服务器

overtls -r server -c config.json

客户端

overtls -r client -c config.json

如果您想查看日志信息,可以在当前目录(pwd)中创建一个 .env 文件,内容为 RUST_LOG=overtls=trace

配置文件

{
    "tunnel_path": "/secret-tunnel-path/",

    "server_settings": {
        "certfile": "/etc/mysite_cert/fullchain.pem",
        "keyfile": "/etc/mysite_cert/privkey.pem",
        "forward_addr": "http://127.0.0.1:80",
        "listen_host": "0.0.0.0",
        "listen_port": 443
    },

    "client_settings": {
        "server_host": "123.45.67.89",
        "server_port": 443,
        "server_domain": "example.com",
        "listen_host": "127.0.0.1",
        "listen_port": 1080
    }
}

配置文件非常简单。它适用于 服务器客户端

  • 当应用程序以 服务器 的身份运行时,server_settings 部分有效,而 client_settings 部分被忽略。
  • 当程序以 客户端 的身份运行时,client_settings 部分有效,而 server_settings 部分被忽略。

certfilekeyfile 是可选的,正确配对后,软件将成为 https 协议服务器,非加密流量将被直接转发到 forward_addr 目的地。如果 certfilekeyfile 配对不正确或根本不存在,您将需要先前 反向代理(如 nginx)的帮助才能工作。

如果不存在 forward_addr 选项,默认值是 http://127.0.0.1:80,这是本地 nginx 监听的 http 的端口号 80

注意 tunnel_path 配置,请确保将其更改为您自己的唯一复杂字符串,否则 GFW 会立即阻止您。

现在,tunnel_path选项可以是字符串或字符串数组,例如:["/secret-tunnel-path/, "/another-secret-tunnel-path/]。Overtls客户端将选择第一个使用。在服务器端,它将使用整个字符串数组检查传入的请求。

出于测试目的,提供了disable_tls选项,以便能够禁用TLS;也就是说,如果此选项存在且为真,则软件将以plain text的形式传输流量;出于安全原因,请勿在正式场合使用它。

此示例显示了least条目的配置文件,完整的配置文件可参考config.json

自签名证书使用

如果您没有域名,可以使用openssl命令生成自签名证书以供测试。

sudo apt install -y wget # Debian/Ubuntu
sudo yum install -y wget # CentOS
wget https://raw.githubusercontent.com/shadowsocksr-live/overtls/master/install/overtls-install-selfsign.sh
bash ./overtls-install-selfsign.sh

注意:GFW可能会因为您使用了自签名证书而阻止您的服务器。因此,请勿将其用于长期生产目的。

依赖项

~25–37MB
~685K SLoC