- 我在本地网络上有一台计算机(我们称之为 A),没有可从外部访问的静态 IP 地址。(SSH 端口
AAAAA
) - A 有一个网络服务器,我希望能够从外部访问
- 我有一个可从互联网访问的服务器(B),它还运行一个网络服务器(ssh 端口
BBBBB
:) - 我希望能够从任何装有网络浏览器的计算机通过 B 访问 A 上的网络服务器。
我已经使用以下设置成功使用 SSH 远程隧道:
在机器 A 上:
$> ssh -f -N -p BBBBB -R 0.0.0.0:9000:localhost:AAAAA [email protected]
在机器 C 上:
$> ssh -f -p 9000 -D 9001 -N [email protected]
在机器 C 的 Web 浏览器上,
manual proxy configuration SOCKS host: localhost, port 9001, SOCKS v5
这确实很有效,但是每次都必须在 C 上启动 SSH 命令,并更改 Web 浏览器中的设置,这非常麻烦......
所以我和某人讨论了这个问题,他告诉我,我可以通过直接在服务器 B 上完成机器 C 上的部分来简化设置,并在 B 的 Web 服务器上的 nginx 中进行一些 Web 配置。所以现在,我尝试了这个:
- 在 A 上,与以前相同
在 B 上:
$> ssh -f -p 9000 -D 9001 -N [email protected]
在B的nginx配置上:
$> cat /etc/nginx/sites-available/default:
upstream tunnel { server 127.0.0.1:9000; } server { listen 80; [...] location /A { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://tunnel; } [...] } server { listen 443 ssl; [...] location /A { proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $http_host; proxy_redirect off; proxy_pass http://tunnel; } [...] }
据我了解,从连接到互联网的机器上的网络浏览器,请求http://B.B.B.B/A
应该通过隧道连接到127.0.0.1:9000
我的机器 A 的转发端口,从而使我能够访问 A 上的网络服务器。
但是,这个设置有些错误,因为当我尝试连接时,http://B.B.B.B/A
需要很长的加载时间(大约一分钟),然后出现一个空白页,上面写着以下错误消息:
SSH-2.0-OpenSSH_6.7p1 Raspbian-5+deb8u3 Protocol mismatch.
我用谷歌搜索了一下这个错误,发现了一些有相对类似问题的帖子,但老实说,由于我在这方面的技能(非常)有限,当我试图将他们的修复投射到我的用例中时,我迷失了方向...有人可以帮助我吗?