Você não está abrindo nenhum túnel usando:
ssh -R -nNT 8081:localhost:8080 [email protected]
mas deve falhar.
Deve ser
ssh -nNT -R 8081:localhost:8080 [email protected]
e é chamado de encaminhamento remoto de portas.
Minha máquina local não tem um IP público e o departamento de TI não pode configurar um NAT para mim. Desejo configurar um proxy no meu servidor público remoto que encaminhará a solicitação ao meu servidor local.
Eu tento usar o privoxy + ssh, mas ele diz cabeçalho inválido.
Etapa 1: abra um tunel ssh por
ssh -nNT -R 8081:localhost:8080 [email protected]
Etapa 2: Na máquina remota, configure um privoxy, eu tentei
forward-socks5 / 127.0.0.1:8081 .
listen-address 0.0.0.0:8080
e
forward / 127.0.0.1:8081
listen-address 0.0.0.0:8080
ambos disseram cabeçalho inválido no navegador
Você não está abrindo nenhum túnel usando:
ssh -R -nNT 8081:localhost:8080 [email protected]
mas deve falhar.
Deve ser
ssh -nNT -R 8081:localhost:8080 [email protected]
e é chamado de encaminhamento remoto de portas.
Após algumas investigações, descobri o motivo:
O Privoxy não é adequado para esse trabalho de proxy reverso, e o ssh forward só aceita tráfego local.
Portanto, existem duas abordagens para resolver esse problema:
configura a regra iptables para o encaminhamento de tcp (não sou profissional nisso, mas acho que é possível)
configure uma solicitação de encaminhamento de proxy reverso para a porta de encaminhamento ssh, isso pode ser feito por meio do nginx ou escreva um simples por si próprio, por exemplo, usando go:
por exemplo,
package main
import (
"net/http/httputil"
"net/http"
"net/url"
"log"
)
func main() {
target, _ := url.Parse("http://localhost:8081")
proxy := httputil.NewSingleHostReverseProxy(target);
http.Handle("/", proxy)
log.Fatal(http.ListenAndServe(":8080", nil))
}