如何使用 DNS 名称和自定义 DNS 服务器挂载 Amazon Elastic File System?

上次更新时间:2020 年 4 月 7 日

我有一个自定义域名系统 (DNS) 服务器。我该如何使用 DNS 名称挂载 Amazon Elastic File System (Amazon EFS)?

简短描述

您可以使用文件系统的 DNS 名称在 Amazon Elastic Compute Cloud (Amazon EC2) 实例上挂载 Amazon EFS 文件系统。要执行此操作,必须满足以下条件:

  • 连接 EC2 实例必须在 Virtual Private Cloud (VPC) 内,而且它必须被配置为使用自定义 DNS 服务器。如需更多信息,见 DHCP 选项集
  • 在您的自定义 VPC 中启用 DNS 解析DNS 主机名这两项 DNS 设置。如需更多信息,见更新 VPC 的 DNS 支持

注意:Amazon EFS 文件系统仅可以挂载在 Linux EC2 实例上。

解决方法

使用 Windows DNS 服务器

1.    在 VPC 控制台中,选择左侧导航窗格的您的 VPC,选择所需的 VPC,然后再选择摘要选项卡。记下 IPv4 CIDR 地址。

2.    在 EC2-VPC 中,Amazon DNS 服务器为在 VPC 网络范围的基础之上加 2(例如,CIDR 172.31.0.0/16 对应的是 172.31.0.2)。如需更多信息,见 Amazon VPC 服务器

3.    使用 dnscmd 命令、/zoneadd/forwarder parameters,以及第一步中的 IP 地址在您的 Windows DNS 服务器中添加条件转发器。在本示例中,IP 地址 172.31.0.2 是地址为 172.31.0.0/16 的子网的第二个有效的 IPv4 地址。

C:\Windows\system32> dnscmd  /ZoneAdd amazonaws.com /forwarder 172.31.0.2

条件转发器会处理从 amazonaws.com 域发送到您的 Windows VPC DNS 服务器的 DNS 请求。如此一来,来自 EC2 实例的 DNS 查询可被转发至 Amazon DNS 服务器,而且该服务器可对 Amazon EFS DNS 名称进行转换。或者,您可以在自定义 DNS 服务器上设置区域转发,不过要注意跨可用区的流量。

4.    使用 nslookup 命令和您的 EFS 文件系统 ID 验证 Windows DNS 服务器正对您的 DNS 查询进行解析。在您的 Windows DNS 服务器上运行以下命令。

C:\Windows\system32>nslookup file-system-id.efs.aws-region.amazonaws.com

注意:要查找 Amazon EFS 文件系统 ID,打开 Amazon EFS 控制台。然后在左侧导航栏中选择文件系统

使用 dnsmasq – 与 Amazon Linux AMI 和 Amazon Linux 2 搭配使用

注意:为需要通过自定义 DNS 服务器连接至 Amazon EFS 的全部 EC2 实例执行以下操作步骤。

1.    安装 dnsmasq 服务器。

sudo yum install -y dnsmasq

2.    创建专用的系统用户以运行 dnsmasq

sudo groupadd -r dnsmasq
sudo useradd -r -g dnsmasq dnsmasq

注意:dnsmasq 通常作为根用户运行,但在启动后会通过切换到另一个用户(默认情况下该用户为 “nobody”)来删除根权限。

3.    (可选)要创建之前配置的备份,使用 mv 命令以创建 dnsmasq.conf 文件的副本。

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.    使用文本编辑器(例如 vim)打开配置文件。

sudo vim /etc/dnsmasq.conf

5.    编辑 /etc/dnsmasq.conf 文件,使其与以下内容类似。

listen-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid
server=/amazonaws.com/169.254.169.253

# Name resolution options
resolv-file=/etc/resolv.dnsmasq
cache-size=500
neg-ttl=60
domain-needed
bogus-priv

注意:您可以使用常用于所有 VPC 的 Amazon DNS 服务器的 IP 地址 169.254.169.253,或者您也可以使用基于 VPC 的 CIDR 块的 DNS 服务器 IP 地址。

6.    创建 /etc/resolv.dnsmasq 文件。然后,设置您已经在 DHCP 选项集上指定的自定义 domain-name-servers

sudo bash -c "echo 'nameserver x.x.x.x' >> /etc/resolv.dnsmasq"

为在 DHCP 选项集中指定的所有 DNS 服务器执行上述命令。在上述示例中, x.x.x.x 是在 DHCP 选项集中提到的 DNS 之一。

7.    验证 DNS 服务器名称。

# cat /etc/resolv.dnsmasq
nameserver x.x.x.x   
nameserver y.y.y.y

8.    在 resolv.conf 文件中输入 DNS 服务器名称 127.0.0.1

# cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
search ec2.internal <on-prem-domain-name i.e example.com>
nameserver 127.0.0.1

9.    修改 dhclient.conf 以保留自定义的 nameserver 条目。

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1;' >> /etc/dhcp/dhclient.conf"

注意:必须完成上述操作,否则在重启实例时,dhclient 可能会覆盖 resolv.conf 中的值。使用 127.0.0.1 (dnsmasq) 作为 DNS 解析程序。如需更多信息,见我的私有 Amazon EC2 实例运行的是 Amazon Linux、Ubuntu 或 RHEL。如何将静态 DNS 服务器分配给重启期间仍保留的 EC2 实例?

10.    验证您在第 8 步中所做的更改。

# cat /etc/dhcp/dhclient.conf
timeout 300;
supersede domain-name-servers 127.0.0.1;

注意:如果您希望在 resolv.conf 中拥有一个适用于 DNS 的故障恢复条目,在 127.0.0.1 的后面附加故障恢复 DNS 服务器地址,如下例所示。

# cat /etc/dhcp/dhclient.conf
timeout 300;
supersede domain-name-servers 127.0.0.1, x.x.x.x, y.y.y.y;

11.    重新启动 dnsmasq 服务器。然后,使用以下命令将服务设置为在启动时启动。

Amazon Linux AMI

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

12.    使用 dig 命令验证 dnsmasq 正常工作。

dig amazonaws.com
dig example.com

若解析如预期执行,则 dnsmasq 缓存工作正常。

13.    运行 dhclient 命令或重启您的实例以应用更改。

sudo dhclient

-或者-

sudo reboot

14.    使用 dignslookup 执行 DNS 查询,以便验证您的实例使用的是 DNS 缓存。

dig amazonaws.com (AWS Specific Domain)
dig example.com (Custom domain)

如需更多信息,见其他装载注意事项


这篇文章对您有帮助吗?

我们可以改进什么?


需要更多帮助?