Eu gostaria de forçar o tráfego HTTP (S) para determinados sites da minha rede doméstica por meio de um proxy executado em um VPS.
Instalei tinyproxy
no VPS, executando na porta 8080
. No meu computador eu estou correndo
sudo ssh -i /home/user/.ssh/id_rsa -nNT -L 80:localhost:8080 -L 443:localhost:8080 remoteuser@vps
para acessar o proxy localmente. Quando eu configuro localhost:80
como proxy nas configurações do Firefox, tudo funciona bem (HTTP e HTTPS).
Mas, como não desejo que todo o tráfego passe por esse proxy, adicionei isso ao /etc/hosts
:
do meu computador
127.0.0.1 server.example
server.example
é o nome de um servidor da Web configurado para HTTP e HTTPS.
Acessando http://server.example
funciona, enquanto abre https://server.example
no Firefox falha com o erro
SSL_ERROR_RX_RECORD_TOO_LONG
Além disso, curl
da página sobre HTTPS falha:
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
Até onde eu sei, esse problema é causado pelo tinyproxy respondendo à solicitação HTTPS com HTTP simples.
Primeiro, é teoricamente possível implementar o que eu quero? Esses chamados serviços "Smart DNS" parecem exatamente fazer isso.
Esse problema é causado por minha configuração ou é tinyproxy, em vez disso, não é capaz de fazer isso? Existe um servidor proxy diferente que é capaz disso?
EDIT: No momento eu estou executando o túnel SSH no meu PC e a modificação do DNS também é local, mas eu gostaria de implantar isso no meu roteador mais tarde, para que o tráfego de qualquer dispositivo da minha rede vá através deste proxy.
EDIT2: Como @SteffenUllrich escreveu nos comentários, quando o HTTPS é roteado sobre um proxy HTTP, o cliente primeiro envia um CONNECT repuest descriptografado antes que o handshake aconteça. Veja aqui (túnel SSH para VPS está sendo executado em 10.0.5.4
):
Issoénecessário,porquesenãooproxynãoseriacapazdedeterminarparaqualservidoropedidodeveserencaminhado.
Mascomoexatamenteessesservidoresproxy"Smart DNS" funcionam? (Para informações gerais, consulte aqui )
Como eles não precisam de solicitações CONNECT, parecem estar funcionando sem. Mas como eles podem determinar o servidor para o qual o pedido deve ser encaminhado? Aqui está um despejo de uma conexão HTTPS usando um proxy "Smart DNS" (IP é 37.x.x.x). (O DNS é manipulado para apontar para esse proxy):
Então, como isso funciona? E, além disso, existe uma maneira de arquivar isso no meu VPS (talvez não com o Tinyproxy, mas com outro software)?