Go to file
KernelErr 4352050b04 Pass Clippy and ignore shutdown error
The client might close the connection before the server noticed. So we simply ignore the error thrown by the shutdown operation.
2021-10-21 17:01:52 +08:00
.github/workflows First commit 2021-10-21 16:43:59 +08:00
src Pass Clippy and ignore shutdown error 2021-10-21 17:01:52 +08:00
.gitignore First commit 2021-10-21 16:43:59 +08:00
Cargo.lock First commit 2021-10-21 16:43:59 +08:00
Cargo.toml First commit 2021-10-21 16:43:59 +08:00
example-config.yaml First commit 2021-10-21 16:43:59 +08:00
LICENSE First commit 2021-10-21 16:43:59 +08:00
README-EN.md First commit 2021-10-21 16:43:59 +08:00
README.md First commit 2021-10-21 16:43:59 +08:00

Fourth

这一波在第四层。

English

Fourth是一个Rust实现的Layer 4代理用于监听指定端口TCP流量并根据规则转发到指定目标。

功能

  • 监听指定端口代理到本地或远端指定端口
  • 监听指定端口通过TLS ClientHello消息中的SNI进行分流

安装方法

为了确保获得您架构下的最佳性能,请考虑自行编译,首选需要确保您拥有Rust工具链

$ cd fourth
$ cargo build --release

将在target/release/fourth生成二进制文件,您也可以使用cargo install --path . 来安装二进制文件。

配置

Fourth使用yaml格式的配置文件默认情况下会读取/etc/fourth/config.yaml,如下是一个示例配置。

version: 1
log: info

servers:
  example_server:
    listen:
      - "0.0.0.0:443"
      - "[::]:443"
    tls: true # 启动SNI分流将根据TLS请求中的主机名分流
    sni:
      proxy.example.com: proxy
      www.example.com: nginx
    default: ban
  relay_server:
    listen:
      - "127.0.0.1:8081"
    default: remote

upstream:
  nginx: "127.0.0.1:8080"
  proxy: "127.0.0.1:1024"
  other: "www.remote.example.com:8082" # 代理到远端地址

内置两个的upstramban立即中断连接、echo返回读到的数据

io_uring?

尽管经过了很多尝试我们发现目前一些Rust下面的io_uring实现存在问题我们使用的io_uring库实现尽管在吞吐量上可以做到单线程20Gbps相比之下Tokio仅有8Gbps但在QPS上存在性能损失较大的问题。因此在有成熟的io_uring实现之前我们仍然选择epoll。之后我们会持续关注相关进展。

可能以后会为Linux高内核版本的用户提供可选的io_uring加速。

协议

Fourth以Apache-2.0协议开源。