9个版本
0.1.11 | 2022年3月13日 |
---|---|
0.1.9 | 2021年1月23日 |
0.1.8 | 2020年12月31日 |
0.1.5 | 2020年10月1日 |
0.1.4 | 2020年9月27日 |
#16 in #another
每月48次下载
680KB
2K SLoC
概述
使用Rust实现的HTTP隧道,也可以作为TCP代理使用。
核心代码完全抽象于隧道协议或传输协议。在此示例中,它仅通过少量额外代码就支持了HTTP和HTTPS。
请注意,此隧道不允许通过HTTP隧道传输纯文本(仅支持HTTPS连接)。如果需要此功能,需要使用带有plain_text
功能的http-tunnel
构建。
cargo build --release --features plain_text
例如,它可以扩展到在QUIC+HTTP/3
上运行隧道或连接到另一个隧道(只要实现满足AsyncRead + AsyncWrite
)。
您可以查看基准测试。
了解更多关于设计的信息。
源文件快速概述
configuration.rs
- 包含配置结构 + 基本CLI- 请参阅
config/
中的配置文件/TLS材料
- 请参阅
http_tunnel_codec.rs
- 处理初始HTTP请求并编码相应响应的编解码器。proxy_target.rs
- 连接目标服务器的抽象 + 基本TCP实现。- 包含具有基本缓存策略(缓存给定
TTL
)的DNS解析器
- 包含具有基本缓存策略(缓存给定
relay.rs
- 将数据从一条流转发到另一条流,tunnel = upstream_relay + downstream_relay
- 还包含基本的
relay_policy
- 还包含基本的
tunnel.rs
- 一个隧道。它由以下内容构建- 隧道握手编解码器(例如,
HttpTunnelCodec
) - 目标连接器
- 客户端连接作为一个流
- 隧道握手编解码器(例如,
main.rs
- 应用程序。可以根据命令行参数启动HTTP
或HTTPS
通道。- 将日志输出到
logs/application.log
(log/
包含浏览器会话中应用程序的实际输出) - 度量信息输出到
logs/metrics.log
- 非常基本,用于展示概念。
- 将日志输出到
运行演示
通过 cargo
安装
cargo install http-tunnel
现在您无需任何配置即可启动它
$ http-tunnel --bind 0.0.0.0:8080 http
有三种模式。
HTTPS
:
$ http-tunnel --config ./config/config.yaml \
--bind 0.0.0.0:8443 \
https --pk "./config/domain.pfx" --password "6B9mZ*1hJ#xk"
HTTP
:
$ http-tunnel --config ./config/config-browser.yaml --bind 0.0.0.0:8080 http
TCP代理
:
$ http-tunnel --config ./config/config-browser.yaml --bind 0.0.0.0:8080 tcp --destination $REMOTE_HOST:$REMOTE_PORT
使用浏览器进行测试(HTTP)
在 Firefox 中,您可以设置 HTTP 代理为 localhost:8080
。确保您使用正确的配置运行它
https://support.mozilla.org/en-US/kb/connection-settings-firefox
(使用 HTTP 代理并选中“使用此代理进行 FTP 和 HTTPS”)
$ ./target/release/http-tunnel --config ./config/config-browser.yaml --bind 0.0.0.0:8080 http
使用 cURL 进行测试(HTTPS)
此代理可以用 cURL
进行测试
将 simple.rust-http-tunnel.org'
添加到 /etc/hosts
$ echo '127.0.0.1 simple.rust-http-tunnel.org' | sudo tee -a /etc/hosts
然后尝试访问列表中的目标(见 ./config/config.yaml
),例如
curl -vp --proxy https://simple.rust-http-tunnel.org:8443 --proxy-cacert ./config/domain.crt https://www.wikipedia.org
您也可以尝试不允许的目标。
隐私
应用程序无法看到明文数据。
应用程序不会记录任何可能帮助识别客户端的信息(如 IP、认证令牌)。仅记录一般信息(事件、错误、数据大小)以供监控目的。
DDoS 保护
Slowloris
攻击(打开大量缓慢的连接)- 发送导致大响应的请求
其中一些可以通过引入速率/年龄限制和空闲超时来解决。
构建
安装 cargo
- 按照这些说明
在 Debian
上修复 OpenSSL 构建问题
sudo apt-get install pkg-config libssl-dev
安装
在 MacOS 上
curl https://sh.rustup.rs -sSf | sh
cargo install http-tunnel
http-tunnel --bind 0.0.0.0:8080 http
在基于 Debian 的 Linux 上
curl https://sh.rustup.rs -sSf | sh
sudo apt-get -y install gcc pkg-config libssl-dev
cargo install http-tunnel
http-tunnel --bind 0.0.0.0:8080 http
依赖关系
~11–24MB
~338K SLoC