9 个版本
0.2.20 | 2023 年 4 月 18 日 |
---|---|
0.2.14 | 2023 年 2 月 11 日 |
0.2.8 | 2023 年 1 月 22 日 |
0.2.2 | 2022 年 10 月 16 日 |
#6 in #shadowsocks
每月 46 次下载
365KB
3K SLoC
Shadow TLS
一个可以使用别人的受信证书的 TLS 伪装代理。
它和 trojan 的表现类似,但它在做真实 TLS 握手的同时,可以直接使用别人的受信证书(如某些大公司或机构的域名),而不需要自己签发证书。当直接使用浏览器打开时,可以正常显示对应可信域名的网页内容。
将真实的 TLS 握手暴露给防火墙的代理。
它的工作方式与 trojan 类似,但不需要签名证书。防火墙将看到您选择的 真实 TLS 握手和 有效 证书。
如何使用
此服务需要在防火墙的两边部署,并且通常需要搭配一个加密代理(因为本项目不包含数据加密和代理请求封装功能,这不是我们的目标)。
通常,您可以在同一台机器上部署 shadowsocks-server 和 shadowtls-server;然后在防火墙的另一端部署 shadowsocks-client 和 shadowtls-client。
有两种方式部署此服务。
-
使用 Docker + Docker Compose
修改
docker-compose.yml
后直接docker-compose up -d
。 -
使用预编译的二进制文件
从 发布页面下载对应平台的二进制文件,然后运行即可。运行指南可以在
./shadow-tls client --help
或./shadow-tls server --help
中看到。
更详细的使用指南请参考 Wiki。
通常您需要在防火墙的两边部署此服务。并且通常与加密代理一起使用(因为本项目不包含数据加密和代理请求封装功能,这不是我们的目标)。
-
使用 Docker + Docker Compose 模式运行,修改
docker-compose.yml
并运行docker-compose up -d
。 -
使用预编译的二进制文件从 发布页面 下载二进制文件并运行。
如需更详细的用法指南,请参阅Wiki。
工作原理
在客户端,只需执行TLS握手。对于服务器,我们还需要转发数据以及解析TLS握手到握手服务器,该服务器将提供有效证书。我们需要知道TLS握手何时完成。一旦完成,我们就可以将数据转发到我们的真实服务器。
完整的设计文档在这里:[v2](https://github.com/ihciah/shadow-tls/blob/7163cddc48b5c3b6404ac5f2b54f4c9e564c9a57/docs/protocol-en.md) | [v3](https://github.com/ihciah/shadow-tls/blob/7163cddc48b5c3b6404ac5f2b54f4c9e564c9a57/docs/protocol-v3-en.md)。
完整的协议设计:[v2](https://github.com/ihciah/shadow-tls/blob/7163cddc48b5c3b6404ac5f2b54f4c9e564c9a57/docs/protocol-zh.md) | [v3](https://github.com/ihciah/shadow-tls/blob/7163cddc48b5c3b6404ac5f2b54f4c9e564c9a57/docs/protocol-v3-zh.md)。
注意
本项目依赖于Monoio,这是一个使用io_uring的高性能Rust异步运行时。然而,它目前还不支持Windows。因此,本项目不支持Windows。
但是,如果这个项目被广泛使用,我们将通过条件编译来支持它。
此外,你可能需要修改一些系统限制以使其工作。如果不起作用,你可以添加环境变量 MONOIO_FORCE_LEGACY_DRIVER=1
以使用epoll而不是io_uring。
你可能需要修改某些系统设置来让它工作,参考这里。如果它不起作用,您可以添加环境变量 MONOIO_FORCE_LEGACY_DRIVER=1
以使用epoll而不是io_uring。
许可证
依赖项
~16–28MB
~499K SLoC