Esto ES posible con Haproxy. Puede configurar un proxy TCP y extraer el SNI y hacer el enrutamiento basado en el SNI. Aquí hay un ejemplo:
backend be.app1
mode tcp
no option checkcache
no option httpclose
tcp-request inspect-delay 5s
tcp-request content accept if { req.ssl_hello_type 1 }
tcp-request content reject
use-server server1 if { req.ssl_sni -m beg app1. }
server server1 server1:8443 check id 1 weight 0
Es esencial retrasar la solicitud hasta que reciba el saludo SSL, de lo contrario, haproxy intentará establecer una conexión antes de recibir el encabezado SNI.
Estoy usando servidores con peso 0 porque, en mi configuración actual, solo tengo un servidor ejecutándose para cada SNI y no quiero que reciban solicitudes aleatorias. Probablemente puedas encontrar mejores formas de jugar con esto.
Espero que esto ayude.