在本文中,我将解释如何在Debian上安全地配置NFS,以便从另一台计算机上的一台服务器上挂载目录。一个很好的用例是,如果您的存储VPS具有大量存储,并且想从其他服务器使用此空间。
安全
默认情况下,NFS是未加密的。它可以,如果你使用Kerberos进行加密,但我不建议通过配置Kerberos身份除非你用几十个用户建立一个企业网络的痛苦去。
因此,我建议不要将NFS服务器直接暴露在互联网上。我还建议不要将其暴露在每个客户都没有隔离的“内部”网络上,例如HostHatch提供的内容。在孤立的专用网络上(例如BuyVM提供的产品),可以使用未加密的NFS。
为了保护Internet或其他不受信任的网络上的NFS连接,我建议使用WireGuard。关于如何配置WireGuard(如本指南),有各种指南,因此,我不再赘述。请注意,WireGuard不像传统VPN解决方案(如OpenVPN)那样具有“客户端”和“服务器”的概念。每个节点都是一个“对等”节点,整个拓扑取决于您。例如,您可以拥有一个“网状” VPN网络,其中每台计算机都可以直接访问每台其他计算机,而无需中央服务器。
在Debian 11(Bullseye,正在测试)上,您可以简单地使用apt install wireguard来获取WireGuard。在Debian 10(Buster)上,您必须启用buster-backports然后执行apt -t buster-backports install wireguard。
在每个系统上生成一个私钥和公钥:
wg genkey | tee私钥| wg pubkey>公钥
然后在每个系统上配置/etc/wireguard/wg0.conf。在[接口]部分应该有该特定系统的私钥。对于允许访问NFS服务器的每个系统,NFS服务器应具有一个[Peer]部分,而所有其他系统对于NFS服务器应具有一个[Peer]部分。它看起来应该像这样:
1 [Interface]
2 Address = 10.123.0.2
3 PrivateKey = 12345678912345678912345678912345678912345678
4 ListenPort = 51820
5
6 [Peer]
7 PublicKey = 987654321987654321987654321987654321987654321
8 AllowedIPs = 10.123.0.1/32
9 Endpoint = 198.51.100.1:51820
只要它们在同一子网中,并且在为本地网络保留的IP范围之一内10.123.0.1,10.123.0.2就可以在任何位置选择IP ,并且可以是任意IP(通常选择10.xxx)。
在每台计算机上启用并启动WireGuard服务:
1 systemctl enable wg-quick@wg0
2 systemctl start wg-quick@wg0
运行wg以检查它是否正在运行。确保可以ping从其他服务器上使用NFS服务器。
NFS服务器
在NFS服务器上,安装nfs-kernel-server软件包:
1 apt install nfs-kernel-server
这些天的最佳实践是仅启用NFSv4,除非您确实需要NFSv3。要仅启用NFSv4,请在中设置以下变量/etc/default/nfs-common:
1 NEED_STATD=”no”
2 NEED_IDMAPD=”yes”
以及以下内容/etc/default/nfs-kernel-server。请注意,RPCNFSDOPTS默认情况下不存在,需要添加。
1 RPCNFSDOPTS=”-N 2 -N 3 -H 10.123.0.1″
2 RPCMOUNTDOPTS=”–manage-gids -N 2 -N 3″
10.123.0.1 应该是NFS服务器将侦听的IP地址(WireGuard IP)。
此外,NFSv4不需要rpcbind,但是它将作为先决条件由nfs-server.service启动。可以通过屏蔽rpcbind.service和rpcbind.socket来防止此情况:
1 systemctl mask rpcbind.service
2 systemctl mask rpcbind.socket
接下来,在中配置NFS导出/etc/exports。例如,这将导出/data/hello-world目录并仅允许10.123.0.2访问它:
1 /data/hello-world 10.123.0.2(rw,sync,no_subtree_check)
有关更多详细信息,请参见exports(5)手册页。
最后,启动NFS服务器:
1 systemctl start nfs-server
NFS客户端
在NFS客户端上,您需要安装nfs-common软件包:
1 apt install nfs-common
现在,您可以使用以下mount命令通过NFS挂载目录:
1 mkdir -p /mnt/data/
2 mount -t nfs4 -o vers=4.2,async 10.123.0.1:/data/hello-world /mnt/data/
尝试将一些文件写入/mnt/data,它应该可以工作!
要在引导时自动挂载目录,请修改/etc/fstab:
1 10.123.0.1:/data/hello-world /mnt/data nfs4 auto,vers=4.2
可选:缓存
您可以选择使用名为的透明读取缓存将NFS服务器中的数据缓存在本地磁盘上CacheFS。首次通过NFS读取文件时,它们将被本地缓存。在随后的读取中,如果自从缓存文件以来尚未对其进行修改,则将从本地缓存中读取文件,而不是通过网络进行加载。如果NFS服务器的磁盘速度较慢和/或与客户端的物理距离较远,则可以提供显着的性能优势。
要启用缓存,请先安装cachefilesd:
1 apt install cachefilesd
/etc/default/cachefilesd按照文件中的说明通过编辑将其打开:
1 # You must uncomment the run=yes line below for cachefilesd to start.
2 # Before doing so, please read /usr/share/doc/cachefilesd/howto.txt.gz as
3 # extended user attributes need to be enabled on the cache filesystem.
4 RUN=yes
修改您的NFS安装,/etc/fstab以添加fsc(文件系统缓存)属性。例如:
1 10.123.0.1:/data/hello-world /mnt/data nfs4 auto,vers=4.2,fsc
最后,启动服务并重新安装目录:
1 systemctl start cachefilesd
2 mount -o remount /mnt/data
要检查它是否正常工作,请从安装文件中读取一些文件,然后您会发现/var/cache/fscache/它的大小正在增长:
1 du -sh /var/cache/fscache/
2 76K /var/cache/fscache/
默认情况下,缓存将一直填满,直到磁盘仅剩7%的空间为止。一旦磁盘降到7%以下的可用空间。如果磁盘空间降到3%以下,则缓存将完全关闭。您可以通过修改更改这些阈值/etc/cachefilesd.conf。