这是一个基于 Go 语言开发的高性能 SOCKS5 反向隧道工具。它允许你将位于内网(无公网 IP)的机器作为出口,通过具有公网 IP 的服务器进行代理访问。
核心原理:客户端(内网)主动连接服务端(公网),建立加密隧道。用户连接服务端的 SOCKS5 端口时,流量会被转发至客户端,并由客户端访问目标网络。
client_id 区分不同的客户端连接,支持多个节点同时在线。yamux 实现单 TCP 连接上的多路复用,降低延迟并提高稳定性。socks5-tunnel/
├── client/
│ ├── main.go # 客户端主程序
│ └── client.json # 客户端配置文件(需手动创建)
├── server/
│ ├── main.go # 服务端主程序
│ └── server.json # 服务端配置文件(需手动创建)
└── common/
└── crypto.go # 加密/解密共享库
请确保您的环境已安装 Go 1.18 或更高版本。
如果是首次运行项目,请先初始化 Go module:
go mod init socks5-tunnel
go mod tidy
# 编译服务端
go build -o server_bin ./server
# 编译客户端
go build -o client_bin ./client
在 server_bin 同级目录下创建 server.json:
{
"tunnel_port": "8080",
"socks_port": "1080",
"aes_key": "your-32-byte-secret-key-must-match",
"wecom_webhook": "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY",
"idle_timeout": 300
}
tunnel_port: 供内网客户端连接的隧道通信端口。socks_port: 供用户使用的 SOCKS5 代理端口(浏览器或软件填这个)。aes_key: 通信加密密钥,必须严格等于 32 个字符。wecom_webhook: (可选) 企业微信群机器人地址,用于接收上线通知。运行服务端:
./server_bin
服务端启动后,会自动检测并打印本机公网 IP,用于通知内容拼接。
在 client_bin 同级目录下创建 client.json:
{
"server_addr": "x.x.x.x:8080",
"client_id": "user1",
"client_pass": "secure_password_123",
"aes_key": "your-32-byte-secret-key-must-match",
"idle_timeout": 300
}
server_addr: 服务端的 IP 和 tunnel_port。client_id: 客户端唯一标识,将作为 SOCKS5 的用户名。client_pass: 客户端密码,将作为 SOCKS5 的密码。aes_key: 必须与服务端配置完全一致。运行客户端:
./client_bin
当客户端成功连接服务端后:
接收通知:服务端会向企业微信发送一条格式如下的通知,方便直接复制使用:
text
user1 上线
socks5 <服务端公网IP> 1080 user1 secure_password_123
配置代理: 在你的浏览器(推荐 SwitchyOmega 插件)、Telegram 或其他支持 SOCKS5 的软件中配置:
socks_port (例如 1080)client_id (例如 user1)client_pass (例如 secure_password_123)aes_key 必须正好是 32 字节长度,否则程序会报错退出。tunnel_port 和 socks_port。client_id 不同。服务端会根据连接时的用户名自动将流量路由到对应的内网客户端。$ claude mcp add ssSocks5 \
-- python -m otcore.mcp_server <graph>