如何使用 nfs 将我的 LAN 磁盘挂载到云服务器?

如何使用 nfs 将我的 LAN 磁盘挂载到云服务器?

我有两台机器。

一个在我的LAN,没有公共IP(如果不在我的以太网中则无法访问)。

另一个是云服务器(aws),它可以给我提供一个公共ip地址。

因此,我可以使用云服务器autossh映射IP,使用以下命令:LAN

autossh -M 8889 -NR *:8888:192.168.1.24:22 [email protected] -o TCPKeepAlive=yes -o ServerAliveInterval=30

然后我可以通过以下方式访问我的局域网:

ssh -p 8888 [email protected]

现在,我想要的是:

我的LAN服务器中有一个数据磁盘(非常大),我希望我的云服务器可以访问该磁盘。

但正常的 nfs 命令是:

mount -rw -t nfs 32.23.4.5:/QData /QData

我无法指定端口,您能帮忙吗?

我该如何使用nfs来挂载我的LAN服务器的磁盘?

答案1

有多种方法可以做到这一点。

请注意,将 NFS 开放给公众会给您的家庭网络带来重大安全风险,并且可能会导致 AWS 数据传输费用的增加。(我绝不会这样做)。

如果我必须按照问题使用 NFS,我会在 EC2 实例上设置 VPN 服务器(例如 OpenVPN)。然后,我会从 NFS 服务器设置 VPN 客户端。这样,您就可以通过动态 IP 和 NAT 连接创建隧道,这样 VPN 服务器就可以在 RFC1918 地址上看到 NFS 服务器。(RFC1918 地址通常称为私有地址,例如 192.168.xx 和 10.xxx)

然后,您就可以在 EC2 实例上进行选择。

我不会这么做,因为有安全隐患- 您可以在 IPTABLES 上设置端口转发,这样任何访问 EC2 实例的端口 22 以外的内容都会重定向到 NFS 服务器。有教程介绍如何执行此操作 - 例如https://www.debuntu.org/how-to-redirecting-network-traffic-to-a-new-ip-using-iptables/https://wiki.vpsget.com/index.php/Forward_(redirect/nat)_traffic_with_iptables

更好的方法是从远程设备到 EC2 实例设置第二个 VPN,这样您就可以通过 VPN 连接到 NFS 服务器,并通过 EC2 实例中继数据。这也意味着 NFS 服务器不会暴露给外界。

另一种选择是放弃 AWS,找到一个可以为您提供静态 IP 地址的 VPN 提供商,然后从您的 NFS 服务器连接到该 IP 地址(再次强调,我不会这样做,因为这会将您的 NFS 服务器暴露给全世界,但这比运行您自己的 VPN 服务器要容易得多,而且如果您将带宽成本考虑在内,也更便宜)

虽然使用 VPN 是一种强大的方法(我会在我推出的解决方案中部署它),但还有更简单的方法。

SSH 是一种很好的协议 - 它在设计时就考虑到了安全性,而且很简单(只在 1 个端口上通信)。它还支持所有形式的文件传输。您可以仅使用 SSH 设置反向隧道,然后依靠 SSH 完成您需要的所有操作。这很可能是您在问题中尝试的那种操作,但您遗漏了一些部分。我不是这方面的专家,但解决方案可能是这样的:

在 NFS 服务器上启动 ssh 后 - 在 NFS 服务器上运行如下命令

 ssh -R 11022:127.0.0.1:22 [email protected]

上述命令将创建从 NFS 服务器到 EC2 实例的反向隧道 - 当有人连接到 EC 实例上本地主机的端口 11022 时,它将连接到 NFS 服务器上的端口 22

要允许远程用户连接到您的 EC2 服务器并中继到您的 NFS 服务器的 SSH 连接,您需要打开您的 NFS 服务器。这可以按如下方式完成(在 EC2 实例上):

 # Allow forwarding to localhost in Kernel
 sysctl -w net.ipv4.conf.all.route_localnet=1

 # Firewall rule to allow forwarding
 iptables -t nat -D PREROUTING -p tcp -d ec2.ip.add.ress -j DNAT --to-destination 127.0.0.1:11022
 
 # Allow connections to port 11022
 iptables -I INPUT -p tcp --dport 11022 -j ACCEPT

请注意,您还需要为 EC2 实例配置网络以接受端口 11022 上的连接 - 我相信这是在 AWS 的某个地方完成的,但在您的 EC2 实例之外。

此时,拥有 NFS 服务器登录凭据的人将能够通过 SSH 进入。一旦他们能够做到这一点,您就可以与他们共享文件。这里有很多选择。

最简单的方法是使用 scp 或 sftp - 这两个程序都是使用 SSH 复制文件的方法。SFTP 类似于 FTP 服务器,但使用 SFTP 程序。

还有一些程序允许您通过 SSH 创建虚拟文件系统。在 Linux 上有一个名为 sshfs 的程序,它允许您通过 ssh 安装 NFS 文件系统,以提供与 NFS 类似的虚拟文件。

我评论说我还没有使用它进行长期文件共享 - 而且它的可靠性仅取决于你的 SSH 连接。

相关内容