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 网络编程
1,875 每月下载量
230KB
5K SLoC
overtls
overtls 是一个 SOCKS5 类型代理,它通过TLS实现数据传输,并支持同时进行TCP和UDP流量转发。
功能完整,代码简洁,核心功能总计1200行代码。
OverTLS
是一个没有SSR 和
SS
的 SSRoT 的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 服务器和目标服务器之间的数据交换是“明文”。
总之,我们需要准备以下事项
- 一个具有公共
IP
的VPS
主机,需要您自行购买。 - 一个
域名
,可以购买或免费申请,并将域名
解析到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/
服务器端一键安装脚本
在安装之前,请准备一个具有公共 IP
的 VPS
主机和一个 域名
,并将 域名
解析到该主机的 IP
,然后运行以下命令并按照提示操作,如果一切顺利,结果将在您的主机上安装 overtls 服务器和 nginx 前端代理,并申请证书。
目前仅支持 3 种 CPU
架构的 Linux
机器:x86_64
、armv7
和 arm64
。
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
部分被忽略。
certfile
和 keyfile
是可选的,正确配对后,软件将成为 https
协议服务器,非加密流量将被直接转发到 forward_addr
目的地。如果 certfile
和 keyfile
配对不正确或根本不存在,您将需要先前 反向代理
(如 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