当导出策略的主机名无法解析时,NFS 客户端将失去访问权限
适用于
- ONTAP 9
- NFS
- 具有主机名或网络组客户端匹配规则的导出策略
问题
- NFS 挂载挂起并超时,或者客户端失去对卷的访问权限。
- 导出策略有一个或多个规则,其主机名客户端匹配无法解析。
在当前 ONTAP 版本上,vserver export-policy check-access 返回错误而不是访问决定。评估停止于包含无法解析的主机名的规则:
::*> vserver export-policy check-access -vserver svm1 -volume flexvol1 -client-ip 10.10.10.46 -authentication-method sys -protocol nfs3 -access-type read-write
Policy Policy Rule
Path Policy Owner Owner Type Index Access
----------------------------- ---------- --------- ---------------- ------ ----------
/ default vs1_root volume 1 read
Error: show failed: Failed to check exports for Vserver "svm1". The command
returned an error when evaluating an entry in the client match
"host1.example.com" for rule at index "1" in export policy "default".
Error code: 7208(a name lookup failed in mgwd). The problem appears to be
in the name service configuration for the client match specified in the
rule. Wait for a few seconds, and then try the command again. If this
error persists, contact technical support personnel for assistance.
在较早的版本中,相同的条件会返回一个通用重试错误:
Error: show failed on vserver "svm1" volume "flexvol1" client-ip "10.10.10.46"
authentication-method "sys" protocol "nfs3" access-type "read-write":
Internal error. Failed to check exports for Vserver "svm1". The command
returned a retry. Wait a few minutes, then try the command again.
mgwd 日志记录了失败的名称查找,以及返回到数据路径的规则数为零:
getaddrinfo(host1.example.com) returned error=8: Name does not resolve
files_error = NS_ERROR_NOT_FOUND, nis_error = NS_ERROR_NONE,
ldap_error = NS_ERROR_NONE, dns_error = NS_ERROR_CONN_ERR
{ in hostMatchLookup() at src/mgmtgwd/nfs/mgwd_exports.cc }
Returning zero rules due to failure : CliAddr=10.10.10.46, vsid=17,
isRefresh=false, ruleCount=0, firstRuleIndexToHitError=4,
Result=7208(a name lookup failed in mgwd)
{ in mgwd_export_check_1_svc() at src/mgmtgwd/nfs/mgwd_exports.cc }
注意: ONTAP 无法完成导出策略的扫描并到达与相关客户端匹配的规则。
- 将具有开放权限的骨架测试导出策略应用于受影响的卷,可以使挂载成功。
- 运行
nslookup host1.example.com时显示主机名解析失败。
解决方案
识别无法解析的客户端匹配条目,然后更正名称解析或删除对它的依赖。
1.识别失败的规则。查看 mgwd 日志中的 Result=7208(a name lookup failed in mgwd) 并记下 firstRuleIndexToHitError 的值,这是无法解析的第一个规则索引。
2.确认解析失败。在受影响的 SVM 上下文中,验证 DNS 配置并测试名称:
vserver services name-service dns show -vserver svm1
nslookup host1.example.com
3.应用以下补救措施之一:
- 更正 DNS 名称解析问题,以便客户端匹配主机名可以解析。
- 在 SVM 上本地定义主机,以便解析不依赖于外部 DNS。
- 更改导出策略规则以使用 IP 地址或子网,而不是主机名。
- 删除主机名无法解析的规则。
4.避免混合属性条件。确保可以匹配同一客户端的规则使用一致的安全属性(协议、只读规则、读写规则和超级用户)。当具有相同属性的匹配规则遵循无法解析的规则时,即使无法解析主机名,ONTAP 也允许访问。
注意:更正解析或编辑规则后,如果过时的条目仍然存在,请刷新导出访问缓存:
vserver export-policy access-cache flush -vserver svm1 -policy default -node 合作伙伴备注
内部参考
错误 7208 为 RESULT_ERROR_MGWD_NAME_LOOKUP_FAILED。它仅设置在 暂时性名称服务错误路径上。根本不存在(NS_ERROR_NOT_FOUND)的名称采用 EMS_exports_hostname_notFound 路径,并被视为"不是真正的失败"——因此 7208 意味着查找 未得到应答,而非应答为否。
两个代码路径发出 7208 — 只有一个是访问决策:
- 实时评估 ——
mgwd_export_check_1_svc→processClientMatch→hostMatchLookup。使用真实的规则索引。可以记录Returning zero rules due to failure ... ruleCount=0,从而拒绝访问。这是影响客户的路径。 - 主机名预验证/访问缓存预热 ——
validate_hostname_helper→hostMatch(..., 0 /* ruleIndex */)。在创建导出规则时运行以预热 DNS 缓存,使用硬编码的哨兵ruleIndex=0和虚拟客户端 IP。命名规则索引0的exports.hostname.transient:error是预验证伪影,而不是真实的规则 0,也不是拒绝访问。
评估/停止行为已确认符合预期(Not A Bug):当规则遇到瞬时错误时,ONTAP 会继续执行,但只有在后续匹配规则具有相同安全属性(protocol、rorule、rwrule、superuser)时才会清除该错误;否则,将恢复错误并停止。触发条件为跨匹配规则的混合协议/安全设置——统一设置会导致错误被跳过,这也是除非属性存在差异否则实验室无法复现的原因。参考:CONTAP-630498(已关闭,Not A Bug),CPE-11614。
被动/DR SVM: mgwd不对 SVM 操作状态进行主机名验证,因此当创建或复制主机名规则时,停止或被动(SVM-DR/MetroCluster -mc)SVM 可以记录 exports.hostname.transient:error,因为被动 SVM 没有可访问的数据 LIF 或 DNS 路径。参考:CPE-13229(活动)。
名称服务敏感性: DNS 故障甚至缓慢(约 4 秒)的 DNS 响应都会产生 7208;仅 NIS 故障是可容忍的;具有大型网络组的 LDAP 会显示不同的错误(ngprocess: retry)。check-access 故障本身并不能证明客户端挂载被阻止。历史不定故障缺陷(已在 8.3.1P1 / 8.2.3P5 中修复):CONTAP-151975。
Case drivers: 2010765569、2010604034、2010399743、2010708840。