我有一个在本地机器上运行的 Web 服务器,局域网上的所有机器都可以轻松访问它。我还有一个带有指向它的公共 IP 地址/URL 的远程服务器(example.com)。我无法从网络外部访问我的本地服务器,因为我被困在我的 ISP 的 NAT 后面(他们不会授予公共 IP 或端口转发任何东西),所以我正在尝试配置反向 SSH 隧道以授予公共访问权限。
我ssh -R 8080:localhost:80 [email protected] -i $SSH_KEY -N
在本地服务器上运行以尝试创建隧道。
在远程服务器上使用eLinks,我可以访问127.0.0.1:8080,并且它正确显示了本地服务器上的站点。但是,在浏览器中访问 example.com:8080 并没有显示任何内容。我尝试使用本地端口转发将传入流量重定向到 127.0.0.1:8080 但这不起作用。将来自网络浏览器的传入流量重定向到我的 SSH 隧道的任何其他想法?
-R 8080:localhost:80
通常是不够的。见man 1 ssh
[强调我的]:您在服务器上的尝试
127.0.0.1:8080
表明侦听套接字绑定到环回接口。很可能它没有绑定到任何其他接口。您需要明确指定
bind_address
或使用*
或使用空字符串作为bind_address
. 带空的选项bind_address
如下所示(注意前导:
):此外,服务器上的状态
GatewayPorts
也sshd_config
很重要。来自man 5 sshd_config
:实现你想要的选项一定不能
no
。Noteno
是默认值,所以未指定GatewayPorts
仍然意味着no
. 的值yes
将使-R 8080:localhost:80
工作像-R :8080:localhost:80
.我建议
GatewayPorts clientspecified
在服务器配置和ssh -R :8080:localhost:80 …
客户端。更改配置文件后,您需要重新启动 SSH 服务器或告诉它重新加载配置。
sshd
OpenSSH 在收到挂断信号 SIGHUP 后重新读取其配置。可能的其他问题:
8080
来自 Internet 的端口的连接。example.com
(比较为什么原站点工作,但端口转发到同一站点失败?)。