Estoy tratando de reenviar el tráfico web desde un servidor remoto a mi máquina local para probar alguna integración de API (tropo, paypal, etc.). Básicamente, estoy tratando de configurar algo similar a lo que ofrece tunnlr.com.
He iniciado el túnel ssh con el comando
$ssh –nNT –R :7777:localhost:5000 user@server
Entonces puedo ver que el servidor ahora está escuchando en el puerto 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
Entonces eso funciona bien. La solicitud de curl se sirve realmente desde la máquina local.
Ahora, ¿cómo habilito server.com:8888 para enrutarse a través de ese túnel?
He intentado usar nginx así:
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;
}
}
Desde el registro de errores nginx veo:
[error] 11389#0: *1 connect() failed (111: Connection refused)
He estado tratando de usar iptables
, pero no he hecho ningún progreso. iptables
parece una solución más elegante que ejecutar nginx solo para hacer túneles. Cualquier ayuda es muy apreciada. ¡Gracias!
EDITAR (agregar información del servidor)
Detalles del servidor: Ubuntu 10.10 maverick (instalación estándar)
EDITAR (opción nginx)
Las opciones nginx trabajadas por cambiaron 0.0.0.0:7777 a 127.0.0.1:7777 como sugirió @Marcel G. Sin embargo, todavía estoy buscando una solución que no sea nginx.
EDITAR (actualización de la solución final)
Como señaló @sciurus, asegúrese de que GatewayPorts yes
en su archivo sshd_config. Inicialmente tenía esta línea en el archivo de configuración, pero necesitaba emitir un en /etc/init.d/ssh reload
lugar de restart
(al menos así parece en ubuntu).
Comando final utilizado en la máquina local:
ssh -nNT -R '*:8888:localhost:5000' user@server
Entonces el servidor debe indicar que está escuchando *: 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
recibo el errorcurl: (7) couldn't connect to host
. Todavía puedo enrollar localhost: 8888 desde el shell del servidor y golpea la máquina local.lsof -i tcp:8888
.GatewayPorts yes
en sshd_config y creo que solo hice un reinicio /etc/init.d/ssh, pero esta vez lo hicereload
. No estoy seguro de cuál es la diferencia, ¡pero ahora funciona totalmente! Un millón de gracias @sciurus.Respiro la respuesta de Sciurus, pero si por alguna razón necesitas usar nginx ... supongo que tu definición aguas arriba está rota.
La forma en que crea su túnel inverso ssh solo escucha en localhost (127.0.0.1 y :: 1), por lo que puede intentar probar la siguiente definición ascendente:
Solo para el registro: nunca he configurado nginx por mi cuenta, así que esto es solo una suposición.
fuente