No modo não transparente, o cliente se conecta com client_ip:client_port ao proxy sslh na porta 443 . Em seguida, o proxy sslh abre uma conexão com sslh_ip:sslh_port para o servidor interno na porta 4443 . O servidor da Web interno responderá de web_ip:4443 ao proxy_ip:proxy_port . E finalmente, o proxy sslh reescreve a fonte do pacote de resposta para sshl_ip:443 e envia para o cliente.
No modo transparente para a conexão entre o proxy sslh e o servidor interno, a origem dos pacotes é definida como a% original client_ip:client_port . Portanto, o servidor da web interno responde diretamente a client_ip:client_port com web_ip:4443 como origem. Mas o cliente aguarda na forma de pacotes proxy_ip:443 .
Para gerenciar a reescrita dos pacotes de resposta do servidor interno, esses pacotes devem ser roteados através do daemon sslh . Eu acho que o daemon está procurando pacotes de resposta para o cliente na interface de loopback.
Na documentação, apenas o caso com proxy sslh e servidor interno da Web na mesma máquina é prescrito.
Com a tentativa e erro, encontrei a seguinte solução: (no proxy sslh )
ip route add local default dev lo table 100
ip rule add fwmark 0x1 lookup 100
iptables -t mangle -N SSLH
iptables -t mangle -A SSLH -j MARK --set-mark 0x1
iptables -t mangle -A SSLH -j ACCEPT
(para pegar os pacotes de resposta do servidor interno)
iptables -t mangle -A PREROUTING -p tcp -s **web_ip** --sport 4443 -j SSLH
... (regras semelhantes para os outros serviços, por exemplo, ssh, openvpn) ...
Isso funciona somente quando a rota padrão do servidor da Web interno passa pelo servidor proxy sshl para a Internet.