Estou tentando retransmitir conexões SSH da porta 122/tcp para outro servidor na porta 22/tcp com base no FQDN.
Aqui está minha configuração HAProxy:
frontend my_ssh_frontend
bind *:122
mode tcp
option tcplog
acl my_ssh_acl hdr(host) myHostname.myDomain.com
use_backend my_ssh_backend if my_ssh_acl
backend my_ssh_backend
mode tcp
server myserver1 x2.y2.z2.t2:22 check
Mas é como se a condição ACL nunca fosse verdadeira e, portanto, o tráfego não fosse roteado para o backend.
Aqui está a ssh -vvv
saída:
ssh.exe -p 122 -l admin-media myHostname.myDomain.com -vvv 2>&1 | egrep.exe -vw "identity file|Failed to open"
OpenSSH_for_Windows_8.1p1, LibreSSL 3.0.2
debug2: resolving "myHostname.myDomain.com" port 122
debug2: ssh_connect_direct
debug1: Connecting to myHostname.myDomain.com [x1.y1.z1.t1] port 122.
debug1: Connection established.
debug1: Local version string SSH-2.0-OpenSSH_for_Windows_8.1
kex_exchange_identification: Connection closed by remote host
Como posso fazer isso com o HAProxy?
Isso não é possível, pois o FQDN nunca é conhecido pelo servidor.
Ele é enviado apenas como parte de alguns protocolos de aplicação, como TLS ou HTTP (cada um dos quais o HAProxy precisa de suporte específico), não como parte do handshake da camada TCP; portanto, o proxy baseado em FQDN de conexões TCP brutas não pode ser feito, nem com o HAProxy nem de outra forma.
O FQDN também não é enviado como parte do handshake SSH – SSH não tem equivalente ao cabeçalho HTTP 'Host' ou TLS SNI – o que significa que mesmo que o HAProxy tivesse um modo específico de SSH, ele ainda não poderia fazer proxy por FQDN.