通过反向 SSH 隧道和 URL 访问本地主机 Web 服务器

Jer*_*ows 6 networking ssh tunnel

我有一个在本地计算机上运行的 Web 服务器,LAN 上的所有计算机都可以轻松访问它。我还有一个远程服务器,其公共 IP 地址/URL 指向它 (example.com)。我无法从网络外部访问我的本地服务器,因为我被困在 ISP 的 NAT 后面(他们不会授予公共 IP 或端口转发任何内容),因此我尝试配置反向 SSH 隧道来授予公共访问权限。

我正在ssh -R 8080:localhost:80 jemeadows@example.com -i $SSH_KEY -N本地服务器上运行以尝试创建隧道。

在远程服务器上使用 eLinks,我可以访问 127.0.0.1:8080,并且它可以正确显示本地服务器上的站点。但是,在浏览器中访问 example.com:8080 没有显示任何内容。我尝试使用本地端口转发将传入流量重定向到 127.0.0.1:8080,但这不起作用。还有其他想法可以将来自 Web 浏览器的传入流量重定向到我的 SSH 隧道吗?

Kam*_*ski 5

-R 8080:localhost:80通常是不够的。请参阅man 1 ssh[强调我的]:

\n
\n

-R [bind_address:]port:host:hostport
\n[\xe2\x80\xa6]

\n

指定将远程(服务器)主机上给定 TCP 端口或 Unix 套接字的连接转发到本地端。

\n

[\xe2\x80\xa6]

\n

默认情况下,服务器上的 TCP 侦听套接字将仅绑定到环回接口。这可以通过指定bind_address. 空bind_address或地址*表示远程套接字应侦听所有接口。bind_address仅当服务器的GatewayPorts选项启用时,指定远程才会成功(请参阅参考资料sshd_config(5))。

\n
\n

127.0.0.1:8080您在服务器上的尝试表明侦听套接字已绑定到环回接口。它很可能没有绑定到任何其他接口。

\n

您需要显式指定bind_address或使用*或使用空字符串作为bind_address。带有空的选项bind_address看起来像这样(注意前导:):

\n
-R :8080:localhost:80\n
Run Code Online (Sandbox Code Playgroud)\n

此外,服务器上的状态也很GatewayPorts重要。sshd_configman 5 sshd_config

\n
\n

GatewayPorts

\n

指定是否允许远程主机连接到为客户端转发的端口。默认情况下,sshd(8)将远程端口转发绑定到环回地址。这可以防止其他远程主机连接到转发的端口。GatewayPorts可用于指定sshd应允许远程端口转发绑定到非环回地址,从而允许其他主机进行连接。该参数可能是no强制远程端口转发仅对本地主机可用,yes强制远程端口转发绑定到通配符地址,或者clientspecified允许客户端选择转发绑定到的地址。默认为no.

\n
\n

要实现你想要的选择一定不能no。Noteno是默认值,因此未指定GatewayPorts仍然意味着no。的价值yes将使-R 8080:localhost:80工作变得像-R :8080:localhost:80.

\n

GatewayPorts clientspecified在服务器配置和ssh -R :8080:localhost:80 \xe2\x80\xa6客户端上提供建议。

\n

更改配置文件后,您需要重新启动 SSH 服务器或以其他方式告诉它重新加载配置。sshdOpenSSH 在收到挂断信号 SIGHUP 后重新读取其配置。

\n
\n

可能出现的其他问题:

\n\n


归档时间:

查看次数:

5825 次

最近记录:

3 年,9 月 前