- 目前,对于 RHEL 8.8 和 RHEL 9.x,最新的 NFS 版本是 4.2。
- 当 NFS 4 推出时,它取消了 NFS3 中的一些内容,其中之一是多个端口号:
- 网络文件系统4授权现在所有流量都是 TCP使用单个众所周知的端口 2049。
- https://www.snia.org/sites/default/files/SNIA_An_Overview_of_NFSv4-3_0.pdf
- 您可以找到更多陈述相同内容的知名文章。
- 我通过在 RHEL 7.9 中的 NFS 4.1 的防火墙中仅打开 TCP 2049 来确认这一点;它不使用端口 111 或任何其他端口,除非您更改
/etc/nfs.conf
或的默认配置/etc/sysconfig/nfs
。事实上,当我确实让 rdma 工作(通过端口 20049)时,rdma 协议专门绕过了firewalld,我认为这是 rdma 节省 cpy 周期并且速度更快的固有原因。
国家森林服务局不安全感选项
/etc/exports
设置服务器侦听来自客户端上任何端口的请求。将其更改为“安全”(默认)可确保服务器仅侦听来自客户端端口 1-1024 的请求。因此,客户端上未经授权的用户将无法启动 NFS 对话。以供参考 :https://security.stackexchange.com/questions/246527/what-is-insecure-about-the-insecure-option-of-nfs-exports
默认为安全的与不安全感当进行 NFS4 导出时,如果/etc/exports
.
和安全规则人们经常说 NFS 服务器不得启用不安全文件锁定选项。。
首先使用/etc/exports
secure
选项,默认情况下,*仅在小于 1024 的安全端口上运行似乎完全不正确,因为 NFS4 在端口 2049 上运行。数字 2049 大于 1024...我错过了什么?
关于RDMA
按照惯例在港口发生的情况,20049
似乎有一个被忽视的事实,即人们需要明确地陈述不安全感/etc/exports
如果要使用 a中的选项mount -o rdma
,否则安装总是发生 asproto=tcp
和 notproto=rdma
且没有任何指示。
我确实验证了这一点,使用MLNX_OFED_LINUX-23.04-1.1.3.0-rhel8.8-x86_64.iso
安装的 RedhatInfiniBand Support
软件包代替了 amount -o rdma,port=1023
确实可以mount
在客户端显示proto=rdma
.
然而还必须执行(仅使用 MLNX?)echo rdma 20049 > /proc/sys/nfsd/portlist
.或者在安全导出的情况下回显 RDMA 1023。有谁知道这些值如何/为什么不存在/proc/sys/nfsd/portlist
以及为什么我必须手动执行它们? 那么将这些数字放在那里的正确方法是什么,以便在启动后我的/etc/fstab
数据文件夹作为 rdma 的 nfs 挂载成功发生? MLNX 教学 pdf 存在不足。
我一直在用头撞墙让 RDMA 工作,总体而言 NFS 似乎有很多缺点,我有一个付费的集群管理器软件,它具有用于配置的 RDMA 占位符,但所有挂载始终都是 proto=tcp 。因此,如果任何人都可以提供有关所描述内容的任何信息,将会有所帮助,我将+任何答案。
还:我最终将/etc/exports
选择secure
一些端口号 1023 及以下以满足安全规则。如何在该范围内选择合适的数字?作为 ron 没人,我的理解是我永远不应该使用低于 1000 或 1024 的端口号来设置我的东西?
更新:看来/etc/exports
参数安全的或者不安全感是无关紧要的。重要的是rdma 20049
在/proc/fs/nfsd/portlist
nfsserver 上。有了这个或任何数字,它似乎可以与安全的导出文件。
答案1
您对 NFS(网络文件系统)版本 4、其安全选项、端口号以及 RDMA(远程直接内存访问)的使用有几个问题和疑虑。
NFS 版本 4 消除了 NFS 版本 3 中使用的多个端口号的需要。因此,对于 NFSv4,所有流量都通过端口 2049 上的 TCP 进行处理。
insecure
中的选项不是/etc/exports
指端口号。它确定 NFS 服务器是否接受来自客户端上任何端口(不安全)的请求,还是仅接受来自端口 1-1024(安全)的请求。此选项与 NFSv4 使用的众所周知的端口 2049 无关。
服务器将“仅在小于 1024 的安全端口上运行" 在 NFSv4 上下文中不正确,因为它在端口 2049 上运行,该端口大于 1024。
将 RDMA 与 NFS 结合使用时,您需要指定选项insecure
以 /etc/exports
允许 RDMA 挂载。如果没有此选项,NFS 将默认使用 TCP(proto=tcp)
而不是 RDMA(proto=rdma)
要选择低于 1024 的端口号,请选择 1-1023 范围内尚未分配给知名服务的端口。
您可以参考 IANA(互联网号码分配机构)服务名称和端口号注册表,以确保您没有选择已在使用的端口。
检查您的/etc/services
包含服务名称到端口号的映射:
cat /etc/services
如果您需要大量已使用号码的列表,请安装 nmap 软件包。
答案2
/proc/fs/nfsd/portlist
这很大程度上是问题所在
https://patchwork.kernel.org/project/linux-nfs/patch/[电子邮件受保护]/
该/etc/nfs.conf
文件在 RHEL 8 中解释为模板#rdma=n
里面 有。因此,从逻辑上讲,人们会认为只是取消注释并执行rdma=y
...其中y
等于是。这并不完全有效。
你必须做rdma=nfsrdma
而不是rdma=y
.然后rdma 20049
就会出现在/proc/fs/nfsd/portlist
.或者我假设rdma-port
中指定的内容/etc/nfs.conf
。然后NFS RDMA就可以工作了;这是安装了 MLNX 的情况。做完后需要一分钟service nfs-server restart
才能观察到proc的变化。
答案3
在现代 Linux 系统上,有两个问题需要解决:
- 服务端和客户端都必须加载rpcrdma内核模块
- 与某个端口(无论是哪一个)关联的 rdma 必须出现在
/proc/fs/nfsd/portlist
要完成其中第一个,只需rpcrdma
添加/etc/modules-load.d/modules.conf
要完成第二个任务,该参数需要位于/usr/sbin/rpc.nfsd
命令行上:--rdma=2049
。在 Ubuntu 上,通过将以下行添加到以下内容可以最轻松地完成此操作/etc/default/nfs-kernel-server
:
RPCNFSDOPTS="--rdma=2049"
(我只是使用普通的 NFSv4 端口而不是 20049,以避免将来出现潜在的防火墙问题。)
为了完整起见,我应该补充一点,所有剩余的配置只是设置 NFS 服务器的标准配置。