上次更新日期:2021 年 3 月 12 日
我正在使用 适用于 Microsoft Active Directory 的 AWS Directory Service。我将我的 Amazon Elastic Compute Cloud (Amazon EC2) Linux 实例加入了 Active Directory 域。我无法使用 EC2 Linux 实例的完全限定域名 (FQDN) 挂载 Amazon Elastic File System (Amazon EFS)。如何解决此问题?
简短描述要将您的 Linux 计算机加入 AWS Managed Microsoft AD,请配置您的实例以将 DNS 服务器用于您的 Active Directory。此配置意味着来自 EC2 Linux 实例的所有 DNS 请求都会路由到 Active Directory DNS 服务器。
当您使用 Microsoft AD 时,所有的 DNS 请求都会被转发到 Amazon 为您的 VPC 提供的 DNS 服务器的 IP 地址。这些 DNS 服务器将解析在 Amazon Route 53 (Route 53) 私有托管区中配置的名称。如果您没有使用 Route 53 私有托管区,则您的 DNS 请求将转发到公有 DNS 服务器。如果您的 AWS 服务不存在私有托管区,则 DNS 请求将转发到公有 DNS 服务器。这意味着它们只能将 AWS 服务 FQDN 解析为公有 IP 地址。有关更多信息,请参阅配置 DNS。
这意味着 Amazon EFS FQDN 仅解析为私有 IP 地址。如果您使用的是 Microsoft AD,则无法使用 FQDN 挂载 EFS。
问题示例此示例使用 AWS Managed Microsoft AD。提供的 DNS 服务器为 10.30.32.80 和 10.20.34.122。EFS 文件系统在具有挂载目标 10.20.0.178 的同一 VPC 中创建。
1.使用 netcat,确认 EC2 实例可以与 EFS 挂载目标 10.20.0.178 建立连接:
nc -vz 10.20.0.178 2049
Connection to 10.20.0.178 2049 port succeeded!
2.在 EX2 Linux 服务器上,集成 Microsoft AD,然后配置 Active Directory DNS 服务器:
echo 'supersede domain-name-servers 10.20.32.80, 10.20.34.122;' | sudo tee --append /etc/dhcp/dhclient.conf
echo 'supersede domain-search "nikkisDNS.com";' | sudo tee --append /etc/dhcp/dhclient.conf
sudo dhclient -r
sudo dhclient
3.通过检查 resolv.conf 文件确认 DNS 服务器已配置:
cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /sbin/dhclient-script
search nikkisDNS.com.
nameserver 10.20.32.80
nameserver 10.20.34.122
4.在文件系统上运行 dig 以查看挂载目标私有 IP 是否没有返回:
dig fs-ca591a02.efs.eu-west-1.amazonaws.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NXDOMAIN, id: 33320
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 0
;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A
;; AUTHORITY SECTION:
eu-west-1.amazonaws.com. 299 IN SOA dns-external-master.amazon.com. hostmaster.amazon.com. 1312 180 60 2592000 7229
注意:DNS 请求不会解析为任何 A 记录,状态显示 NXDOMAIN。
如果您为 VPC 使用 Amazon 提供的名称服务器,请注意,它已成功解决:
dig @10.20.0.2 fs-ca591a02.efs.eu-west-2.amazonaws.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29705
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A
;; ANSWER SECTION:
fs-ca591a02.efs.eu-west-1.amazonaws.com. 60 IN A 10.20.0.178
解决方法
注意:如果您在运行 AWS 命令行界面 (AWS CLI) 命令时遇到错误,请确保您使用的是最新版的 AWS CLI。
为您的 Microsoft AD 配置条件转发器,以将请求转发到 Amazon VPC 提供的 DNS 中。如果您使用 Active Directory 提供的 DNS,此方法还可用于将其他 AWS 服务 FQDN 解析为其私有 IP 地址。
为此,请配置条件转发器规则。这会将域的所有子域转发到特定的 DNS 服务器 IP。例如,您可以将所有对 amazonaws.com 子域名的 DNS 请求转发到 Amazon VPC 提供的 DNS 的私有 IP。
注:Amazon VPC 提供的 DNS IP 是在 VPC IPv4 网络范围 + 2 的基础上保留的 IP 地址。
要创建条件转发器规则,请运行 AWS CLI 命令 create-conditional-forwarder:
aws ds create-conditional-forwarder --directory-id d-93673d4d5a --remote-domain-name amazonaws.com --dns-ip-addrs 10.20.0.2 --region eu-west-1
使用以下参数
directory-id - 输入 AD 目录 ID。 remote-domain-name - 您可以指定任何域。此规则适用于与此域或子域匹配的所有 FQDN。 dns-ip-addrs - 输入 Amazon VPC 提供的 DNS IP。这样一来,可以进行 EFS FQDN 的 DNS 解析,并在随后使用 FQDN 挂载 EFS FS。
dig fs-ca591a02.efs.eu-west-2.amazonaws.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.64.amzn1 <<>> fs-ca591a02.efs.eu-west-1.amazonaws.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 29705
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;fs-ca591a02.efs.eu-west-1.amazonaws.com. IN A
;; ANSWER SECTION:
fs-ca591a02.efs.eu-west-1.amazonaws.com. 60 IN A 10.20.0.178