返回首页

MTProto 在端口 443 上使用 nginx SNI 路由

本文描述了使用 nginx stream 和 SNI 路由在单个 443 端口上部署 MTProto Telegram 代理。提供完整配置和代理控制面板架构。该方案确保对 DPI 封锁的弹性。

MTProto 代理:单端口 SNI 路由
Advertisement 728x90

MTProto 代理在单一 443 端口上通过 SNI 路由实现

为 Telegram 开发 MTProto 代理的开发者常面临 IP 和端口被快速封锁的问题。解决方案是利用 nginx 流模块和基于 SNI 的路由,在单一 443 端口上组织多个代理。这能将流量伪装成热门域名,无需更换 IP 即可扩展网络。

该方法分为控制面板和服务器代理两部分。面板生成配置,代理则部署 Docker 容器。每个代理从域名池(如 wikipedia.org、netflix.com)获取唯一的 SNI。Nginx 分析 SNI 并将 TLS 连接重定向到对应的容器。

此方案的优势:

Google AdInline article slot
  • 所有代理均使用标准 HTTPS 端口
  • 伪装成合法流量
  • 可扩展至多个容器而无需更改端口
  • 通过 Web 界面实现自动化管理

配置 nginx 实现流路由

关键要素是 nginx 流块中的 ssl_preread 模块。它能在不解密 TLS 的情况下提取 SNI,确保零延迟和对客户端的完全透明。

user nginx;
worker_processes auto;

error_log /var/log/nginx/error.log warn;
pid /var/run/nginx.pid;

events {
    worker_connections 4096;
}

stream {
    resolver 127.0.0.11 valid=10s;

    log_format proxy '$remote_addr [$time_local] $ssl_preread_server_name $status';
    access_log /dev/stdout proxy;

    map $ssl_preread_server_name $backend {
        en.wikipedia.org mtproto-proxy-3d9d46ba:443;
        netflix.com mtproto-proxy-475ecb29:443;
        assets.msn.com mtproto-proxy-3f8875a4:443;
        default mtproto-proxy-3d9d46ba:443;
    }

    server {
        listen 443;
        proxy_pass $backend;
        ssl_preread on;
        proxy_connect_timeout 10s;
        proxy_timeout 300s;
    }

}

重要参数:

  • resolver 127.0.0.11 — Docker 网络内的 DNS
  • worker_connections 4096 — 高并发限制
  • 针对移动连接优化的超时设置
  • SNI 日志记录用于调试封锁

控制面板与代理架构

控制面板(Node.js/Go)独立于代理服务器运行。服务器上的代理接收 API 命令,并基于 telemt/telemt 镜像管理 Docker 容器。

Google AdInline article slot

代理创建流程:

  • 面板生成密钥并从池中选择 SNI
  • 将配置发送给代理
  • 代理运行 docker run 并创建唯一卷
  • Nginx 重新加载并添加新的映射块

域名池需手动更新,排除已封锁的 CDN。每个域名严格用于一个代理。

扩展性与抗封锁能力

测试显示,使用非标准端口(4443+)的代理在 15-20 名用户下 3-4 天内会被封锁。而采用 443 端口和 SNI 路由的方案,在 50+ 设备下能维持超过 7 天的寿命。

Google AdInline article slot

操作建议:

  • 使用无深度包检测(DPI)的司法管辖区 VPS(如德国、荷兰)
  • 每 7-10 天轮换 SNI
  • 监控 nginx 日志以识别封锁模式
  • 限制每个代理的用户数(最多 20-30 人)

为实现容错,可在多个 VPS 上部署代理,并统一使用一个面板域名。

关键要点

  • 单一 443 端口:将 MTProto 伪装成 HTTPS 流量
  • SNI 路由:允许在一个 IP 上运行 10+ 代理而无冲突
  • 自动化:面板 + 代理最小化手动操作
  • 抗封锁性:在 50+ 连接下寿命超过 7 天
  • 可扩展性:轻松添加新节点

— Editorial Team

Advertisement 728x90

继续阅读