RhoAias(/ˈroʊ/ - /ˈaɪ.əs/) 是一个用于反向代理和内网穿透的工具库,它既可以作为独立应用直接部署,同时也可以作为依赖库嵌入到当前 dotnet 程序中。
English | 简体中文
- 支持 http 反向代理,可以基于 location 级别转发 http 请求。
- 支持客户端无配置启动,可在 Dashboard 中动态下发转发配置。
- 支持 TCP/UDP 端口转发,可以实现 SSH 连接内网,或者暴露内网端口。
- 客户端支持 k8s-ingress,客户端监听 ingress 配置,并将入口流量转发到内网 k8s 集群。
- 支持基于 ACME 的 Https 证书申请,支持证书续期。
- 支持 Metric 监控,可接入基于 OpenTelemetry 标准的监控工具,如 Prometheus。
- 支持数据流压缩(压缩算法支持 gzip, snappy 等)
RhoAias 可以用在很多场景下,下面用一组用例来让你快速了解 RhoAias 的使用场景。
将所有公网的 http 请求依据 path 路径转发至内网对应的服务上。
RhoAias 可以依据 path 将请求转发至不同的环境中。
RhoAias 支持跨多个客户端的负载均衡。
注意:单个客户端做负载均衡是没有意义的。
RhoAias 可以作为 Ingress Controller 部署,将所有公网请求转发至内网的指定的 k8s 集群。
RhoAias 可以将内网端口暴露到公网上。
需要准备一个有公网 IP 的机器,确保该机器已经安装 Docker 环境。
services:
rhoaias-server:
container_name: rhoaias-server
image: registry.cn-shanghai.aliyuncs.com/chaldea/rhoaias-server
restart: always
network_mode: host
environment:
RhoAias__Server__Bridge: 8024 # 客户端连接端口
RhoAias__Server__Http: 80 # http请求转发端口
RhoAias__Server__Https: 443 # https请求转发端口
volumes:
- rhoaias_server_data:/app/data # 数据存储目录
- rhoaias_server_certs:/app/certs # https证书存储目录
volumes:
rhoaias_server_data:
rhoaias_server_certs:
由于端口转发需要随时监听端口,所以需要将网络设置成 host 模式,如:network_mode: host
保存以上配置到 docker-compose.yml 文件中。执行指令:
docker compose up -d
容器启动后需要确认上述端口是否可以访问,如果无法访问请检查防火墙配置。
服务器环境变量
环境变量 | 默认值 | 说明 |
---|---|---|
RhoAias__Server__Bridge | 8024 | 客户端连接端口,以及 Dashboard 访问端口 |
RhoAias__Server__Http | 80 | Http 请求端口 |
RhoAias__Server__Https | 443 | Https 请求端口 |
RhoAias__Dashboard__UserName | admin | Dashboard 默认用户名 |
RhoAias__Dashboard__Password | 123456Aa | Dashboard 默认用户密码 |
RhoAias__Dashboard__CreateDefaultUser | true | 是否创建默认用户 |
RhoAias__Dashboard__CreateDefaultClient | true | 是否生成默认客户端 |
服务端启动后,打开 Dashboard(http://{public-ip}:8024) 页面。输入用户名和密码,进入 Dashboard。默认服务器会生成一个测试用的客户端,你也可以在客户端列表中手动创建。
RhoAias 提供了多种方式部署客户端,如 docker, 控制台程序, k8s-ingress 等。
在内网机器上,创建如下 docker 配置:
services:
rhoaias-client:
container_name: rhoaias-client
image: registry.cn-shanghai.aliyuncs.com/chaldea/rhoaias-client
restart: always
environment:
# 服务端url地址
RhoAias__Client__ServerUrl: http://{server-ip}:8024
# 创建客户端时生成的Token
RhoAias__Client__Token: PCv11vMiZkigHfnzcMLTFg
执行以下指令后在服务端 Dashboard 中确保客户端状态显示为在线。
docker compose up -d
客户端环境变量
环境变量 | 说明 |
---|---|
RhoAias__Client__ServerUrl | 服务端地址 |
RhoAias__Client__Token | 客户端 TokenKey |
你可以在Release页面下载对应架构的客户端程序的二进制文件。
作为控制台程序启动:
rhoaias-client -s http://{server-ip}:8024 -t PCv11vMiZkigHfnzcMLTFg
启动参数 | 说明 |
---|---|
-s, --server | 服务端地址 |
-t, --token | 客户端 TokenKey |
如果你需要它作为系统服务启动:
- 在 Windows 平台, 你可以使用nssm
- 在 Linux 平台,你可以使用 systemd
在 k8s 集群的管理节点上,执行以下指令创建 namespace
kubectl create namespace rho-aias
应用 Deployment 配置文件
kubectl apply -f https://github.com/chaldea/rho-aias/blob/main/kubernetes/ingress-controller.yaml -n rho-aias
检查 Deployment 应用状态
kubectl get deployments
RhoAias 支持使用 helm 工具安装。helm-chart 位于./kubernetes/ingress-rho-aias
目录下。
在 Dashboard 的转发列表页面,你可以为指定的客户端创建不同类型的转发规则,所有符合规则的请求将会转发至客户端所在的内网。
通常我们会使用 HTTPS 正式来确保网站的安全,RhoAias 内置支持证书管理器,你可在 Dashboard 的证书管理页面申请免费的 HTTPS 证书。证书也支持自动续期。
Let'sEncrypt
支持单域名(如: a.sample.com)和泛域名(如: *.sample.com)两种类型证书。泛域名证书需要 DNS 服务商提供接口支持。如果要使用泛域名,你需要在 Dashboard 的 DNS 提供商页面配置。
NOTE: 泛域名证书是包含单域名证书,因为如果你有 DNS 服务商接口,推荐使用泛域名模式。
Rho-Aias 可以直接使用 nuget 包添加到当前项目中。
dotnet add package Chaldea.Fate.RhoAias
具体开发可以参考开发文档
如果你想要贡献,随时欢迎你提交 Pull Request, 或者反馈 Bug Bug Report。