反向SSH隧道

我试图转发从远程服务器的networkingstream量到我的本地机器,以testing一些API集成(tropo,贝宝等)。 基本上,我试图设置类似tunnlr.com提供的东西。

我用命令启动了ssh隧道

$ssh –nNT –R :7777:localhost:5000 user@server

然后我可以看到服务器正在使用端口7777进行监听

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 

所以这工作正常。 curl请求实际上是从本地机器提供的。

现在,我如何启用server.com:8888通过该隧道路由?

我试过像这样使用nginx

 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; } } 

从nginx错误日志中我看到:

[error] 11389#0: *1 connect() failed (111: Connection refused)

我一直在试图使用iptables ,但还没有取得任何进展。 iptables似乎比运行nginx仅仅用于隧道更优雅的解决scheme。 任何帮助是极大的赞赏。 谢谢!

编辑 (添加服务器信息)

服务器的详细信息:Ubuntu 10.10 maverick(标准安装)

编辑 (nginx选项)

在@Marcel Gbuild议的情况下,nginx选项将0.0.0.0:7777更改为127.0.0.1:7777。 仍然在寻找非nginx解决scheme。

编辑 (最终解决scheme的更新)

正如@sciurus指出的那样,请确保您的sshd_config文件中的GatewayPorts yes 。 我最初有configuration文件中的这一行,但我需要发出一个/etc/init.d/ssh reload而不是restart (至less在Ubuntu上似乎这样)。

在本地机器上使用最后的命令: ssh -nNT -R '*:8888:localhost:5000' user@server

然后服务器应该用lsof -i tcp:888指示它正在监听*:8888

 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) 

没有必要使用nginx。

在你的ssh守护进程configuration(它应该是/ etc / ssh / sshd_config )将GatewayPorts设置为客户端指定并重新加载它。 这对于其他系统能够连接到您的隧道是必要的。 没有它,只有运行在你的服务器上的程序才能使用它。

现在你只需要修改你的ssh命令来监听端口8888而不是端口7777.这可能看起来像

 ssh -nNT -R '*:8888:localhost:5000' user@server 

星号告诉sshd在所有接口上监听端口8888,而不仅仅是回送接口。 如果您没有更改GatewayPort,这将失败。

我第二sciurus的答案,但如果由于某种原因,你需要使用nginx …我的猜测是,你的上游定义是打破。

你创build你的ssh反向隧道的方式只能监听本地主机(127.0.0.1和:: 1),所以你可能想尝试给出下面的上游定义:

 upstream tunnel { server 127.0.0.1:7777; } 

只是为了logging:我从来没有configurationnginx我的自我,所以这只是一个猜测。