# TCP + TLS 分流器

这是 TCP + TLS + Web 的简易实现,不需要处理 HaProxy 和 OpenSSL 的版本问题,也不需要自己申请证书,也不需要额外安装 Web 服务器。

# 实现

  1. 安装 V2Ray,可以使用官方脚本官方脚本 (opens new window)

  2. 安装 TLS 分流器 (opens new window),见安装说明 (opens new window).

  3. 修改 TLS 分流器配置文件(位于 /etc/tls-shunt-proxy/config.yaml)。

listen: 0.0.0.0:443
vhosts:
    # 将 example.com 改为你的域名
  - name: example.com
    tlsoffloading: true
    managedcert: true
    alpn: h2,http/1.1
    # 如果不需要兼容 tls12, 可改为 tls13
    protocols: tls12,tls13
    http:
      handler: fileServer
      # /var/www/html 是静态网站目录
      args: /var/www/html
    default:
      handler: proxyPass
      args: 127.0.0.1:40001
  1. 修改服务器 V2Ray 配置文件(位于 /etc/v2ray/config.json),同 TCP + TLS + Web 方式。
{
    "inbounds": [
        {
            "protocol": "vmess",
            "listen": "127.0.0.1",
            "port": 40001,
            "settings": {
                "clients": [
                    {
                        "id": "f2435e5c-9ad9-4367-836a-8341117d0a5f"
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp"
            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}
  1. 重启服务
systemctl restart tls-shunt-proxy
systemctl restart v2ray
  1. 客户端连接 example.com:443 vmess tls 即可
{
    "inbounds": [
        {
            "port": 1080,
            "listen": "127.0.0.1",
            "protocol": "socks"
        }
    ],
    "outbounds": [
        {
            "protocol": "vmess",
            "settings": {
                "vnext": [
                    {
                        "address": "example.com",
                        "port": 443,
                        "users": [
                            {
                                "id": "f2435e5c-9ad9-4367-836a-8341117d0a5f",
                                "security": "none"
                            }
                        ]
                    }
                ]
            },
            "streamSettings": {
                "network": "tcp",
                "security": "tls"
            }
        }
    ]
}

# Domain Socket

相比 TCP,Domain Socket (以下简称 DS) 更为高效。根据测试反馈,速度超过 50Mbps 时,通常会有较明显的性能差距。

DS 仅限分流器与服务端 V2Ray 连接,客户端连接服务器仍然使用 TCP, 即:

              TLS over TCP                DS
客户端 V2Ray --------------- TLS 分流器 -------- 服务端 V2Ray
  1. 修改分流器配置文件(位于 /etc/tls-shunt-proxy/config.yaml)
listen: 0.0.0.0:443
vhosts:
    # 将 example.com 改为你的域名
  - name: example.com
    tlsoffloading: true
    managedcert: true
    alpn: h2,http/1.1
    # 如果不需要兼容 tls12, 可改为 tls13
    protocols: tls12,tls13
    http:
      handler: fileServer
      # /var/www/html 是静态网站目录
      args: /var/www/html
    default:
      handler: proxyPass
      args: unix:@v2ray.sock
  1. 修改服务器 V2Ray 配置文件(位于 /etc/v2ray/config.json)。
{
    "inbounds": [
        {
            "protocol": "vmess",
            "listen": "127.0.0.1",
            "port": 40001,
            "settings": {
                "clients": [
                    {
                        "id": "f2435e5c-9ad9-4367-836a-8341117d0a5f"
                    }
                ]
            },
            "streamSettings": {
                "network": "ds",
                "dsSettings": {
                     "path": "@v2ray.sock",
                     "abstract": true
                }

            }
        }
    ],
    "outbounds": [
        {
            "protocol": "freedom"
        }
    ]
}
  1. 重启服务
systemctl daemon-reload
systemctl restart v2ray
systemctl restart tls-shunt-proxy

# 其他

  • TLS 分流器还可以实现 vmess + TLS + Web 和 trojan 共享端口
  • 具体配置参数请参阅项目 README (opens new window)