logo
0
0
WeChat Login

muxProxy

高性能多协议代理服务,基于 WebSocket + Smux 多路复用实现网络流量转发。

功能特点

  • 多协议支持:WebSocket (ws/wss)、多路复用 WebSocket (mws/mwss)、SOCKS5
  • Smux 多路复用:多个连接共享底层通道,减少连接数,提升高并发性能
  • 链式代理:通过 -F 参数串联多个代理节点,构建多跳转发链路
  • SOCKS5 代理:支持无认证和用户名密码认证
  • 轻量级:单二进制文件,开箱即用
  • 可集成:实例化 API 设计,支持作为 Go 库嵌入第三方项目

快速开始

编译

go build -o muxProxy main.go

命令行用法

muxProxy -L {监听地址} [-F {代理链节点}]...

参数说明:

参数说明示例
-L本地监听地址(必填)s5://0.0.0.0:1081
-F代理链上游节点,可多次指定mws://proxy1:1081/ws

运行示例

# SOCKS5 代理(无认证)
./muxProxy -L "s5://0.0.0.0:1081"

# SOCKS5 代理(用户名密码认证)
./muxProxy -L "s5://user:pass@0.0.0.0:1081"

# SOCKS5 + 代理链转发
./muxProxy -L "s5://0.0.0.0:1081" -F "mws://proxy1:1081/ws"

# SOCKS5 + 多跳代理链
./muxProxy -L "s5://0.0.0.0:1081" -F "mws://hop1:1081/ws" -F "mws://hop2:1082/ws"

# 多路复用 WebSocket 服务端
./muxProxy -L "mws://0.0.0.0:1081/ws"

# 安全 WebSocket 服务端
./muxProxy -L "wss://0.0.0.0:1082/secure"

支持协议

协议说明可用于 -L可用于 -F
s5SOCKS5 代理
wsWebSocket
wss安全 WebSocket (TLS)
mws多路复用 WebSocket (Smux)
mwss安全多路复用 WebSocket (Smux + TLS)

作为 Go 库使用

muxProxy 提供实例化 API,可嵌入到第三方 Go 项目中:

import "muxProxy/proxyPkg"

// 创建实例
p := proxyPkg.NewProxy()

// 设置代理链(可选,运行时可动态修改)
p.SetChain([]string{"mws://proxy1:1081/ws"})

// 启动监听
go p.Listen("s5://0.0.0.0:1081")

// 运行时切换代理链
p.SetChain([]string{"mws://proxy2:1082/ws"})

// 获取当前代理链
chain := p.GetChain()

// 优雅关闭
p.Close()

主要 API:

方法说明
NewProxy()创建代理实例
SetChain([]string)设置代理链(仅允许 ws/wss/mws/mwss)
GetChain()获取当前代理链副本
Listen(url)解析 URL 并启动服务
Close()优雅关闭所有服务和连接池
BuildChainHeader(...)构造链式二进制协议头(导出纯函数)

项目结构

muxProxy/
├── main.go                # 程序入口,CLI 参数解析(-L/-F)
├── configPkg/             # 配置结构定义
├── copyPkg/               # 双向数据转发(32KB 内存池)
├── proxyPkg/              # 代理核心
│   ├── proxy.go           # Proxy 结构体 + 公共 API
│   ├── HandleConnectionProxy.go  # 协议头解析 + 链式构造 + 连接管理
│   ├── socks5.go          # SOCKS5 服务端
│   ├── cert.pem / key.pem # TLS 证书(嵌入编译)
│   └── *_test.go          # 自动化测试
├── logconfig1.yaml        # 日志配置
└── docs/                  # 项目知识库

工作原理

  1. 通过 -L 启动指定协议的服务(SOCKS5 / WebSocket / 多路复用 WebSocket)
  2. 接收客户端连接,解析自定义二进制协议头获取目标地址
  3. 如果配置了代理链(-F),将目标信息封装为嵌套协议头,逐跳转发
  4. 在客户端和目标之间建立双向转发通道
  5. 多路复用协议(mws/mwss)通过 Smux 在单个 WebSocket 上复用多条流

依赖

用途
gorilla/websocketWebSocket 协议
xtaci/smux连接多路复用
txthinking/socks5SOCKS5 协议
cnb.cool/accbot/goTool日志 / 同步原语 / WS 封装
rs/zerolog结构化日志
natefinch/lumberjack日志轮转(10MB / 30天)

注意事项

  • 防火墙需开放对应监听端口
  • 日志输出到 ./tem/logs/,目录需可写权限
  • wss/mwss 的 TLS 证书已内嵌编译,无需额外配置
  • 代理链(-F)仅支持 ws/wss/mws/mwss 协议
  • 高并发场景推荐使用 mws/mwss 以利用多路复用特性

About

自定义传输协议,配合miho

Language
Go94.6%
Others5.4%