sslh 是一个开源的 多协议复用器(multiplexer)。它允许在同一个端口上同时运行多个协议(如 SSH、HTTPS、OpenVPN 等),通过分析传入连接的头部信息来决定将流量转发到哪个后端服务。项目地址在:https://github.com/yrutschle/sslh
工作原理
sslh 监听一个特定的端口(通常是 443,因为它是 HTTPS 的默认端口),接收客户端的连接请求,然后根据流量特征判断它是哪种协议。例如:
- 如果是 HTTPS 流量(SSL/TLS),转发到 Web 服务器(如 Nginx 或 Apache)。
- 如果是 SSH 流量,转发到 SSH 服务器。
- 如果是 OpenVPN 流量,转发到 VPN 服务。
这种方式可以让多种服务共享同一个端口,特别适合在防火墙限制严格的环境中(比如公司网络只允许 443 端口对外访问)。
常见用途
- 端口复用:在只有一个公网 IP 或有限端口的情况下,运行多个服务。
- 绕过防火墙:通过将 SSH 或 VPN 伪装成 HTTPS 流量,绕过网络限制。
- 简化服务器配置:减少需要开放的端口数量。
支持的协议
sslh 支持多种协议,包括但不限于:
- SSH
- HTTPS (SSL/TLS)
- OpenVPN
- XMPP
- Tinc
- HTTP
配置示例
假设你想在 443 端口上同时运行 HTTPS 和 SSH:
- 配置 sslh 监听 443 端口。
- 设置 HTTPS 后端(如 Nginx)监听本地 8443 端口。
- 设置 SSH 后端监听本地 2222 端口。
- sslh 会将流量分发到正确的后端。
配置文件(/etc/sslh.cfg)可能如下:
listen:
(
{ host: "0.0.0.0"; port: "443"; }
);
protocols:
(
{ name: "ssl"; host: "localhost"; port: "8443"; },
{ name: "ssh"; host: "localhost"; port: "2222"; }
);
优点
- 提高端口利用率。
- 增强服务的隐蔽性(SSH 流量看起来像 HTTPS)。
- 易于配置和部署。
局限性
- 可能增加少量延迟(因为需要分析流量)。
- 如果协议特征不明显,可能导致误判。
- 需要服务器有足够的性能处理流量分发。


