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.