![如何从互联网上的服务器复制到执行 NAT 的路由器后面的服务器?](https://linux22.com/image/521482/%E5%A6%82%E4%BD%95%E4%BB%8E%E4%BA%92%E8%81%94%E7%BD%91%E4%B8%8A%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%A4%8D%E5%88%B6%E5%88%B0%E6%89%A7%E8%A1%8C%20NAT%20%E7%9A%84%E8%B7%AF%E7%94%B1%E5%99%A8%E5%90%8E%E9%9D%A2%E7%9A%84%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我有一个 VPS 和一个位于 NAT 防火墙后面的服务器。我想使用位于 NAT 防火墙后面的服务器作为 VPS 的备份。VPS 需要能够启动备份过程并通过互联网发送备份,经过执行 NAT 的路由器到达备份机器。我无法控制路由器,所以我的备份机器没有公共 IP 地址。
有没有办法让我从备份机器到服务器打开一个 SSH 隧道(或等效隧道),以便服务器可以通过此连接复制文件?
拓扑如下:
________ _______________ ________
| server | -- ( internet ) -- | router w/ NAT | -- | backup |
-------- --------------- --------
答案1
我确实这么做了,但是我做的是倒着的。
我在服务器上运行 OpenVPN 服务器,备份服务器运行 OpenVPN 客户端。这是因为服务器不会更改 IP 地址。现在,只要备份服务器处于启动状态,NAT 盒的 IP 地址是什么就无关紧要了,它在 OpenVPN 网络上的 IP 始终相同,服务器也总能找到它。
另外还有额外的好处,由于 OpenVPN 连接是通过 NAT“传出的”,只要允许 UDP 端口出去(大多数设备默认都是这样),NAT 设备就不需要进行特殊配置。
答案2
打开从家庭服务器到 VPC 的 SSH 连接,启用隧道,以便 VPC 计算机可以连接到家庭计算机上的服务;rsync 或 ftp 可能是最简单的。
答案3
回答我自己的问题:
这只是表明您所需要的只是一个新的搜索词:“reverse”,如“ssh tunnel reverse”。
因此,要创建反向 SSH 隧道,请从 NAT 后面的机器(在我的示例中为备份)运行 SSH,-R
并指定要绑定到本地端口的远程端口,因此:
ssh -R remote_bind_port:localhost:local_port remote_user@server
例如:
ssh -R 1222:localhost:22 [email protected]
将 example.com 上的端口 1222 绑定到本地主机端口 22。也就是说:example.com 上的用户可以执行此操作ssh localhost -p 1222
以穿越 NAT 并连接到路由器后面的机器上的 SSH 服务器。
答案4
安全文件传输协议是一种非常好且安全的解决方案,但还有其他解决方案,如使用 rsync 或 FTP。
对于 rsync,您可以在路由器上打开端口 873 并将其转发到备份目标。对于简单的 FTP 问题,有两种对称解决方案,第一种是打开备份目标上的 ftp 端口并再次进行转发。第二个即使您无权访问路由器来更改 NAT 规则,这似乎对您也很有用,在这种情况下,您必须在服务器上设置一个 FTP 守护程序作为存储库,并制作一个同步脚本来传输到备份机器。
此外,隧道解决方案似乎是一个很好的选择,所以我向您推荐 OpenVPN。