借助 AI 用 Rust+Tauri 撸了一个代理管理工具 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
userff
0.01D

借助 AI 用 Rust+Tauri 撸了一个代理管理工具

  •  
  •   userff
    userfhy 3 月 10 日 1354 次点击
    这是一个创建于 45 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SSLProxyManager

    仓库

    License: MIT

    一个桌面代理管理工具,提供现代化的基于 Web 的管理界面,用于管理 HTTP/HTTPS 、WebSocket 和 Stream ( TCP/UDP )反向代理。

    SSLProxyManager 基于 Tauri 2 + Rust,提供管理界面(前端:Vue 3 + Vite + Element Plus),用于配置与管理:

    • HTTP/HTTPS 反向代理
    • WebSocket ( WS/WSS )反向代理
    • Stream ( TCP/UDP )四层代理
    • 静态资源托管
    • 访问控制(局域网/白名单/黑名单)
    • 速率限制
    • 指标存储与查询
    • 请求日志与历史数据
    • 运行状态与日志查看
    • 仪表板实时统计

    功能概览

    • HTTP/HTTPS 代理( rules/routes )

      • 多监听节点(listen_addr / listen_addrs
      • TLS (证书/私钥)
      • Basic Auth (支持可选头部转发)
      • 路由:Path 前缀匹配 + 可选条件( Host / HTTP 方法 / 请求头)
      • 请求/响应体替换支持按 Content-Type 过滤(content_types
      • Upstream 列表(权重)
      • proxy_pass_path 路径改写
      • 静态目录优先(static_dir
      • Header 注入(set_headers
      • 跟随重定向配置
      • HTTP/2 支持(可选)
      • 压缩支持( gzip/brotli )
    • WebSocket 代理( ws_proxy )

      • 每条 WS 规则可独立启用
      • WS 全局开关 ws_proxy_enabled(全局禁用时,WS 监听不会启动)
      • TLS 支持( WSS )
      • 基于路径的路由
    • Stream 代理( TCP/UDP ,stream )

      • listen_port 监听端口( TCP 或 UDP )
      • proxy_pass 绑定 upstream 名称
      • upstream 支持按客户端 IP 进行一致性选择(默认 hash_key = "$remote_addr"
      • proxy_connect_timeout / proxy_timeout(字符串形式,例:300s
    • 访问控制

      • IP 白名单/黑名单
      • 局域网访问控制(允许所有局域网)
      • HTTP 、WS 、Stream 代理独立控制
    • 指标与监控

      • 实时指标收集
      • 历史指标存储( SQLite )
      • 请求日志过滤与查询
      • 仪表板统计与图表
      • 实时日志查看器
    • 应用功能

      • 系统托盘集成
      • 系统启动自动运行
      • 单实例模式
      • 自动更新检查
      • 国际化支持(英文/中文)
      • 深色/浅色主题支持

    技术栈

    • 后端:Rust ( Tauri 2 )、Axum 、Tokio 、SQLx
    • 前端:Vue 3 、Vite 、Element Plus 、ECharts 、Vue I18n
    • 核心库
      • HTTP/WebSocket:Axum 、Hyper 、Tokio-Tungstenite
      • TLS:Rustls
      • 数据库:SQLite (通过 SQLx )
      • 配置:TOML

    程序界面

    ScreenShot1

    ScreenShot2

    ScreenShot3

    ScreenShot4

    ScreenShot5

    录结构

    • src/:Rust 后端代码
    • frontend/:前端项目( Vite )
    • tauri.conf.json:Tauri 配置( dev/build 命令、devUrl 、frontendDist 等)
    • config.toml:运行配置(开发模式下可放项目根目录)
    • config.toml.example:配置示例

    环境要求

    • Node.js + npm
    • Rust 工具链( stable )

    本地开发

    1) 安装前端依赖

    cd frontend npm install 

    2) 启动 Tauri 开发模式

    在项目根目录执行:

    npm run tauri:dev 

    该命令会根据 tauri.conf.json

    • 先进入 frontend 并执行 npm run dev
    • 然后启动 Tauri 并加载 http://localhost:5173

    构建发布

    在项目根目录执行:

    npm run tauri:build 

    该命令会:

    • 先进入 frontend 并执行 npm run build(产物:frontend/dist
    • 再由 Tauri 进行打包

    配置说明( config.toml )

    项目使用 TOML 进行配置。

    • 开发模式( debug ):如果项目根目录存在 config.toml,优先读取它。
    • Linux 生产模式:默认位置 ~/.config/SSLProxyManager/config.toml

    建议直接参考 config.toml.example

    1) HTTP/HTTPS 代理( rules )

    • [[rules]]:监听节点
      • listen_addr:监听地址,例如 :88880.0.0.0:1024
      • ssl_enable:是否启用 TLS
      • cert_file / key_file:证书与私钥路径
      • basic_auth_enable / basic_auth_username / basic_auth_password
    • [[rules.routes]]:路由
      • path:Path 前缀匹配
      • static_dir:静态目录(可选)
      • proxy_pass_path:转发路径改写(可选)
      • exclude_basic_auth:该路由是否跳过 Basic Auth (可选)
      • follow_redirects:代理端是否跟随上游 30x (可选)
      • [rules.routes.set_headers]:注入 Header (可选)
      • [[rules.routes.upstreams]]:上游列表(可选)

    2) WS 代理( ws_proxy )

    • **ws_proxy_enabled**:WS 全局开关(默认 true

      • false:不会启动 WS 监听(即使某条 ws rule enabled=true )
      • true:再按每条 ws rule 的 enabled 生效
    • [[ws_proxy]]:WS 监听规则列表

      • enabled:是否启用该规则
      • listen_addr:监听地址,例如 0.0.0.0:8800
      • ssl_enable:是否启用 TLS ( wss )
      • cert_file / key_file:证书与私钥路径
      • [[ws_proxy.routes]]
        • path:Path 前缀
        • upstream_url:上游 WS 地址,例如 ws://127.0.0.1:9000

    3) Stream ( TCP/UDP )代理( stream )

    Stream 用于四层代理:监听一个 TCP/UDP 端口并转发到上游。

    • [stream]
      • enabled:全局开关
      • [[stream.upstreams]]
        • name:upstream 名称(供 proxy_pass 引用)
        • hash_key:默认 $remote_addr(按客户端 IP 稳定选择上游)
        • consistent:当前作为配置项保留
        • [[stream.upstreams.servers]]
          • addrhost:port
          • weight / max_fails / fail_timeout:字段保留(可在后续增强策略)
      • [[stream.servers]]
        • enabled:是否启用
        • listen_port:监听端口
        • udpfalse=TCP ,true=UDP
        • proxy_pass:引用 upstream 的 name
        • proxy_connect_timeout:例如 300s
        • proxy_timeout:例如 600s

    Nginx 示例对照

    你可以用下面的 Nginx stream 配置理解对应关系:

    stream { upstream sendimage { hash $remote_addr consistent; server 59.xx.xx.xx:8089 max_fails=1 fail_timeout=30s; } server { listen 50002; proxy_pass sendimage; proxy_connect_timeout 300s; proxy_timeout 600s; } } 

    在本项目中等价配置可参考 config.toml.example[stream] 片段。

    4) 全局配置

    • ws_proxy_enabled:全局启用/禁用 WebSocket 代理(默认 true
    • http_access_control_enabled:启用 HTTP 访问控制(默认 true
    • ws_access_control_enabled:启用 WebSocket 访问控制(默认 false
    • stream_access_control_enabled:启用 Stream 代理访问控制(默认 true
    • allow_all_lan:允许所有局域网 IP (默认 true
    • auto_start:应用启动时自动启动代理服务(默认 true
    • show_realtime_logs:在 UI 中显示实时日志(默认 false
    • realtime_logs_only_errors:实时日志视图仅显示错误(默认 false
    • stream_proxy:遗留字段(请使用 [stream].enabled 代替)
    • max_body_size:最大请求体大小(字节,默认 10485760 = 10MB )
    • max_response_body_size:最大响应体大小(字节,默认 10485760 = 10MB )
    • upstream_connect_timeout_ms:上游连接超时(毫秒,默认 5000
    • upstream_read_timeout_ms:上游读取超时(毫秒,默认 30000
    • upstream_pool_max_idle:连接池最大空闲连接数(默认 100
    • upstream_pool_idle_timeout_sec:空闲连接超时(秒,默认 60
    • enable_http2:启用 HTTP/2 支持(默认 false

    5) 访问控制(白名单)

    • [[whitelist]]:IP 白名单条目
      • ip:IP 地址或 CIDR 表示法(例如:127.0.0.1192.168.1.0/24

    6) 指标存储

    • [metrics_storage]:指标存储配置
      • enabled:启用指标存储(默认 true
      • db_path:SQLite 数据库文件路径(例如:/path/to/metrics.db

    7) 更新配置

    • [update]:自动更新配置
      • enabled:启用更新检查(默认 true
      • server_url:更新服务器 URL (为空则使用默认)
      • auto_check:自动检查更新(默认 true
      • timeout_ms:更新检查超时(毫秒,默认 10000
      • ignore_prerelease:忽略预发布版本(默认 true

    界面功能

    应用程序提供了全面的基于 Web 的管理界面:

    • 仪表板:实时统计、指标图表和服务状态
    • 基础配置:全局设置和代理服务控制
    • HTTP/HTTPS 代理配置:配置反向代理规则和路由
    • WebSocket 代理配置:配置 WS/WSS 代理规则
    • Stream 代理配置:配置 TCP/UDP 四层代理
    • 访问控制:管理 IP 白名单/黑名单
    • 指标存储:查看和管理指标数据库
    • 请求日志:查询和过滤历史请求日志
    • 日志查看器:实时日志查看与过滤
    • 关于:版本信息和更新检查

    常见问题

    • Q: 前端开发服务器使用什么端口?
      A: 默认端口是 5173(见 tauri.conf.jsondevUrl)。

    • Q: 如何更改前端 dev/build 命令?
      A: 修改根目录 tauri.conf.jsonbuild.beforeDevCommand / build.beforeBuildCommand

    • Q: 配置文件位于哪里?
      A: 开发模式下,如果项目根目录存在 config.toml,则优先读取。生产模式( Linux )下,默认位置是 ~/.config/SSLProxyManager/config.toml

    • Q: 如何启用系统启动时自动运行?
      A: 在 config.toml 中设置 auto_start = true,应用启动时会自动启动代理服务。

    • Q: 可以将应用隐藏到系统托盘吗?
      A: 可以,点击关闭按钮会将窗口隐藏到系统托盘而不是退出。可以从托盘菜单退出。

    • Q: 如何查看历史指标?
      A: 在配置中启用指标存储,然后在 UI 中使用"指标存储"标签页查询历史数据。

    • Q: 如何配置访问控制?
      A: 使用"访问控制"标签页管理 IP 白名单/黑名单,或在 config.toml 中编辑 [[whitelist]] 条目。

    免责声明

    本项目仅用于学习与合法合规的网络代理/反向代理配置管理场景。使用本软件可能涉及网络访问控制、证书管理、流量转发等操作,存在但不限于数据泄露、服务中断、配置错误导致安全风险等潜在风险。你在使用本项目时需自行评估并承担全部风险与责任。

    • 合法合规:请确保你的使用行为符合当地法律法规及相关网络服务条款。禁止将本项目用于任何未授权的渗透、攻击、绕过访问控制、窃取数据、传播恶意软件、侵犯他人隐私或其他任何违法违规用途。任何因你使用本项目从事违法违规或未授权行为所产生的法律责任、行政处罚、第三方索赔及相关后果,均由你自行承担,作者与贡献者不承担任何责任。
    • 无担保:本项目按“现状”提供,不提供任何形式的明示或暗示担保(包括但不限于适用性、可靠性、准确性、可用性、无错误/无漏洞等)。
    • 责任限制:对于因使用或无法使用本项目导致的任何直接或间接损失(包括但不限于利润损失、数据丢失、业务中断、设备或系统损坏等),作者与贡献者不承担任何责任。

    如果你不同意上述条款,请勿使用、分发或基于本项目进行二次开发。

    许可证

    本项目采用 MIT 许可证 - 详见 LICENSE 文件。

    仓库

    贡献

    欢迎贡献!请随时提交 Pull Request 。

    nickfox5880
        1
    nickfox5880  
       3 月 16 日
    你好 能将某个线上请求代理到本地文件吗 类似抓包花瓶的那种
    userff
        2
    userff  
    OP
       3 月 17 日
    @nickfox5880 你好 是全局拦截某个请求然后修改请求体或响应体吧 目前没有这功能
    nickfox5880
        3
    nickfox5880  
       3 月 17 日
    @userff 对 类似 clarles 的 map local
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     886 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 72ms UTC 22:03 PVG 06:03 LAX 15:03 JFK 18:03
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86