Estou tentando encaminhar o tráfego da web de um servidor remoto para minha máquina local, a fim de testar alguma integração de API (tropo, paypal, etc.). Basicamente, estou tentando configurar algo semelhante ao que o tunnlr.com fornece.
Eu iniciei o túnel ssh com o comando
$ssh –nNT –R :7777:localhost:5000 user@server
Então eu posso ver que o servidor agora está escutando na porta 7777 com
user@server:$netstat -ant | grep 7777
tcp 0 0 127.0.0.1:7777 0.0.0.0:* LISTEN
tcp6 0 0 ::1:7777 :::* LISTEN
$user@server:curl localhost:7777
Hello from local machine
Então isso funciona bem. A solicitação de curvatura é realmente atendida na máquina local.
Agora, como habilito o server.com:8888 para ser roteado através desse túnel?
Eu tentei usar o nginx assim:
upstream tunnel {
server 0.0.0.0:7777;
}
server {
listen 8888;
server_name server.com;
location / {
access_log /var/log/nginx/tunnel-access.log;
error_log /var/log/nginx/tunnel-error.log;
proxy_pass http://tunnel;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_redirect off;
}
}
No log de erro do nginx, vejo:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Eu estive tentando usar iptables
, mas não fiz nenhum progresso. iptables
parece uma solução mais elegante do que executar o nginx apenas para tunelamento. Qualquer ajuda é muito apreciada. Obrigado!
EDIT (adicionando informações do servidor)
Detalhes do servidor: Ubuntu 10.10 maverick (instalação padrão)
EDIT (opção nginx)
As opções do nginx alteradas 0.0.0.0:7777 para 127.0.0.1:7777, como sugerido por @Marcel G. Ainda procurando por uma solução não-nginx.
EDIT (atualização na solução final)
Como o @sciurus apontou, verifique GatewayPorts yes
no seu arquivo sshd_config. Inicialmente, eu tinha essa linha no arquivo de configuração, mas precisava emitir um em /etc/init.d/ssh reload
vez de restart
(pelo menos parece assim no ubuntu).
Comando final usado na máquina local:
ssh -nNT -R '*:8888:localhost:5000' user@server
Em seguida, o servidor deve indicar que está ouvindo *: 8888 com lsof -i tcp:888
user@server:~$ sudo lsof -i tcp:8888
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
sshd 14711 user 8u IPv4 1791013 0t0 TCP *:8888 (LISTEN)
sshd 14711 user 9u IPv6 1791014 0t0 TCP *:8888 (LISTEN)
curl http://server.com:8888
recebo o errocurl: (7) couldn't connect to host
. Ainda consigo enrolar o localhost: 8888 no shell do servidor e ele atinge a máquina local.lsof -i tcp:8888
.GatewayPorts yes
no sshd_config e acho que apenas reiniciei o /etc/init.d/ssh, mas desta vez o fizreload
. Não sei ao certo qual é a diferença, mas agora funciona totalmente !! Muito obrigado @sciurus.Eu respondo a segunda resposta do sciurus, mas se por algum motivo você precisar usar o nginx ... meu palpite é que sua definição de upstream está quebrada.
A maneira como você cria seu túnel reverso ssh, apenas escuta no localhost (127.0.0.1 e :: 1), portanto, tente tentar a seguinte definição upstream:
Apenas para constar: eu nunca configurei o nginx sozinho, então isso é apenas um palpite.
fonte