Sto cercando di inoltrare il traffico Web da un server remoto al mio computer locale per testare l'integrazione dell'API (tropo, paypal, ecc.). Fondamentalmente, sto cercando di impostare qualcosa di simile a quello che offre tunnlr.com.
Ho avviato il tunnel ssh con il comando
$ssh –nNT –R :7777:localhost:5000 user@server
Quindi posso vedere che il server ora è in ascolto sulla porta 7777 con
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
Quindi funziona benissimo. La richiesta di arricciatura viene effettivamente servita dal computer locale.
Ora, come posso abilitare server.com:8888 per essere instradato attraverso quel tunnel?
Ho provato ad usare nginx in questo modo:
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;
}
}
Dal registro degli errori nginx vedo:
[error] 11389#0: *1 connect() failed (111: Connection refused)
Ho cercato di provare a usare iptables
, ma non ho fatto alcun progresso. iptables
sembra una soluzione più elegante rispetto all'esecuzione di nginx solo per il tunneling. Qualsiasi aiuto è molto apprezzato. Grazie!
EDIT (aggiunta di informazioni sul server)
Dettagli server: Ubuntu 10.10 maverick (installazione standard)
EDIT (opzione nginx)
Le opzioni di nginx hanno funzionato cambiando da 0.0.0.0:7777 a 127.0.0.1:7777 come suggerito da @Marcel G. Comunque sto ancora cercando una soluzione non nginx.
EDIT (aggiornamento sulla soluzione finale)
Come sottolineato da @sciurus, assicurati che GatewayPorts yes
nel tuo file sshd_config. Inizialmente avevo questa linea nel file di configurazione, ma dovevo emettere un /etc/init.d/ssh reload
invece di restart
(almeno sembra così su Ubuntu).
Comando finale utilizzato sul computer locale:
ssh -nNT -R '*:8888:localhost:5000' user@server
Quindi il server dovrebbe indicare che è in ascolto su *: 8888 con 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
ottengo l'errorecurl: (7) couldn't connect to host
. Posso ancora arricciare localhost: 8888 dalla shell del server e colpisce la macchina locale.