我的私有 Amazon EC2 实例运行的是 Amazon Linux、Ubuntu 或 RHEL。如何将静态 DNS 服务器分配给重启期间仍保留的 EC2 实例?
如何配置在重新引导期间静态 DNS 服务器条目仍然存在的 Amazon Elastic Compute Cloud(Amazon EC2)实例?
简短描述
默认情况下,与 Amazon Virtual Private Cloud (Amazon VPC) 关联的 Amazon EC2 实例在启动时请求 DNS 服务器地址。此请求使用动态主机配置协议 (DHCP) 发送。DHCP 响应返回写入到本地 /etc/resolv.conf 文件的 DNS 服务器地址。重新启动实例时,对具有自定义 DNS 服务器地址的 resolv.conf 文件的手动修改将丢失。您用于解决此问题的方法取决于您的 Linux 发行版。有关 VPC 和 DNS 服务器的更多信息,请参阅 Amazon VPC 中的 DHCP 选项集。
解决方法
**重要提示:**更改 Amazon EC2 实例之前,使用 Amazon 系统映像 (AMI) 或 Amazon Elastic Block Store (Amazon EBS) 快照创建备份。更改实例的联网配置可能会导致实例无法访问。
Amazon Linux、Amazon Linux 2
使用以下选项之一来配置 Amazon EC2 实例。如果您同时应用这两个选项,则在 ifcfg-eth0 文件中指定的 DNS 服务器会优先(选项 2)。
要使任一选项正常运行,必须将 ifcfg-eth0 文件中的 PEERDNS 参数值设置为 yes。将 PEERDNS 参数设置为 no 意味着,ifcfg-* 文件中指定的或 DHCP 提供的 DNS 服务器会被忽略。
选项 1:
1. 编辑或创建 /etc/dhcp/dhclient.conf 文件。
**注意:**您必须拥有根用户权限才能编辑此文件。您可以使用 sudo -i 成为根用户,或者使用 sudo 执行所有命令。
2. 将 supersede 命令添加到文件以覆盖 domain-name-servers。在以下示例中,将 xxx.xxx.xxx.xxx 替换为您希望实例使用的 DNS 服务器的 IP 地址:
supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
在上述修改之后,resolv.conf 文件将在实例重启时更新,以仅包含您在 dhclient 文件中指定的 DNS 服务器。有关 supersede 命令的更多信息,请参阅 Linux 手册页上的 dhclient.conf(5)。
3. 在每个接口的配置文件 (/etc/sysconfig/network-scripts/ifcfg-*) 中将 PEERDNS 参数设置为 yes。
4. 重启 EC2 实例。
选项 2:
1. 要覆盖 /etc/dhcp/dhclient.conf 文件中的 DNS 服务器值,请在每个接口的配置文件 (/etc/sysconfig/network-scripts/ifcfg-*) 中指定自定义 DNS 服务器。
例如,下例中显示来自 Amazon Linux 实例的 /etc/sysconfig/network-scripts/ifcfg-eth0 文件修改为包含两个自定义 DNS 服务器(DNS1 和 DNS2):
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet USERCTL=yes PEERDNS=yes IPV6INIT=no PERSISTENT_DHCLIENT=yes RES_OPTIONS="timeout:2 attempts:5" DHCP_ARP_CHECK=no MTU="9001" DNS1=8.8.8.8 DNS2=8.8.4.4
2. 在每个接口的配置文件 (/etc/sysconfig/network-scripts/ifcfg-*) 中将 PEERDNS 参数设置为 yes。
Ubuntu 16.04
1. 编辑或创建 /etc/dhcp/dhclient.conf 文件。
**注意:**您必须拥有根用户权限才能编辑此文件。您可以使用 sudo -i 成为根用户,或者使用 sudo 执行所有命令。
2. 将 supersede 命令添加到文件以覆盖 domain-name-servers。在以下示例中,将 xxx.xxx.xxx.xxx 替换为您希望实例使用的 DNS 服务器的 IP 地址:
supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
在此修改之后,resolv.conf 文件将在实例重启时更新,以仅包含您在 dhclient 文件中指定的 DNS 服务器。有关 supersede 命令的更多信息,请参阅 Linux 手册页上的 dhclient.conf(5)。
3. 重启实例。
Ubuntu 18.04
默认情况下,在 Ubuntu 18.04 上,由 netplan.io 软件包处理网络接口配置,且由启用系统解析的服务使用存根解析程序处理 DNS 查询。存根解析程序 IP 位于 /etc/resolv.conf。
反过来,/etc/resolv.conf 文件是 /run/systemd/resolve/stub-resolv.conf 文件的符号链接。如果以下任一项对于 /etc/resolv.conf 文件为真,/etc/dhcp/dhclient.conf 中的 supersede 语句可能无法按预期起作用:
- 文件不是您的实例上的符号链接。
- 文件是一个指向不同文件的符号链接,如 /run/systemd/resolve/resolv.conf。
上述任一条件都表示自定义了默认的 Ubuntu 18.04 配置。
运行以下步骤以覆盖 DNS 服务器值:
1. Netplan 通常将配置文件存储在 /etc/netplan 目录中。创建名为 /etc/netplan/99-custom-dns.yaml 的文件,然后通过以下行填充此文件。请务必将占位符 DNS 服务器 IP 地址替换为首选地址:
cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml network: version: 2 ethernets: ens5: nameservers: addresses: [1.1 .1 .1, 1.0 .0 .1] dhcp4-overrides: use-dns: false use-domains: false EOF
**注意:**在前面的示例中,接口指定为 ens5。确保接口名称与您的设置接口相匹配。要查看您的接口名称,请使用 ip a 命令。
2. 运行以下命令:
netplan generate
在进行这些更改后,您仍然可以在 /etc/resolv.conf 中看到存根解析程序 IP。这是正常的。存根解析程序 IP 是操作系统的本地地址。在后台,存根解析程序使用您在前面的 99-custom-dns.yaml 文件中指定的 DNS 服务器。
3. 重启实例。
4. 运行 systemd-resolve 命令以确认系统正确地提取预期的 DNS 服务器 IP 地址:
systemd-resolve --status
RHEL 7.5
默认情况下,由 NetworkManager 服务管理 resolv.conf 文件。然后,该服务会通过 DHCP 提供的 DNS 服务器填充此文件。阻止 NetworkManager 管理 resolv.conf 文件,以使 resolv.conf 文件忽略 DHCP 提供的 DNS 服务器。
选项 1:
1. 编辑或创建 /etc/dhcp/dhclient.conf 文件。
**注意:**您必须拥有根用户权限才能编辑此文件。您可以使用 sudo -i 成为根用户,或者使用 sudo 执行所有命令。
2. 将 supersede 命令添加到文件以覆盖 domain-name-servers。在以下示例中,将 xxx.xxx.xxx.xxx 替换为您希望实例使用的 DNS 服务器的 IP 地址:
supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
在此修改之后,resolv.conf 文件将在实例重启时更新,以仅包含您在 dhclient 文件中指定的 DNS 服务器。有关 supersede 命令的更多信息,请参阅 Linux 手册页上的 dhclient.conf(5)。
3. 在每个接口的配置文件 (/etc/sysconfig/network-scripts/ifcfg-*) 中将 PEERDNS 参数设置为 yes。
4. 重启实例。
选项 2:
1. 使用以下内容创建 /etc/NetworkManager/conf.d/90-dns-none.conf 文件:
[main] dns=none
2. 重启实例,然后手动填充 /etc/resolv.conf 文件。
相关信息
networkmanager.conf(5)(Linux 手册页)
相关内容
- 已提问 3 个月前lg...
- 已提问 3 个月前lg...
- 已提问 4 个月前lg...
- 已提问 4 个月前lg...
- 已提问 1 个月前lg...
- AWS 官方已更新 2 年前
- AWS 官方已更新 2 年前
- AWS 官方已更新 6 个月前