内容提要
在Amazon EC2实例中,/etc/resolv.conf文件的DNS配置在重启后会丢失。要永久保留自定义DNS,可以编辑/etc/dhcp/dhclient.conf文件或每个接口的ifcfg-*配置文件,确保PEERDNS参数设置为yes,并在重启后验证DNS服务器配置。
延伸解读
操作前务必备份
文章多次强调,在更改 EC2 实例的 DNS 配置前,必须使用 AMI 或 EBS 快照创建备份。因为修改网络配置可能导致实例无法访问,备份是快速恢复的关键。忽略此步骤可能造成业务中断,且恢复过程复杂。
PEERDNS 参数的关键作用
在 Amazon Linux 和 RHEL 中,PEERDNS 参数控制是否忽略 DHCP 提供的 DNS。若设置为 no,则 ifcfg-* 文件中指定的或 DHCP 提供的 DNS 都会被忽略。必须将其设为 yes,自定义 DNS 才能生效。这是配置成功的前提,容易被人忽视。
不同发行版的配置差异
文章针对不同 Linux 发行版给出了不同方法:Amazon Linux 和 RHEL 7.5 可编辑 dhclient.conf 或 ifcfg-* 文件;Ubuntu 16.04 使用 dhclient.conf;Ubuntu 18.04 则需通过 netplan 配置。选择错误的方法可能导致配置不生效,需根据系统版本操作。
Ubuntu 18.04 的存根解析程序
在 Ubuntu 18.04 上,/etc/resolv.conf 是符号链接,指向存根解析程序。即使通过 netplan 配置了自定义 DNS,resolv.conf 中仍显示存根 IP,这是正常的。存根解析程序会在后台使用 netplan 中指定的 DNS。验证时需使用 systemd-resolve --status 命令。
Q&A
如何在Amazon EC2实例中永久修改DNS配置?
可以通过编辑/etc/dhcp/dhclient.conf文件或每个接口的ifcfg-*配置文件来永久修改DNS配置,确保PEERDNS参数设置为yes。
在Amazon EC2中,为什么/etc/resolv.conf文件的DNS配置会丢失?
因为Amazon EC2实例在重启时使用DHCP请求DNS服务器地址,手动修改的配置会被覆盖。
如何在Ubuntu 18.04上配置自定义DNS?
在Ubuntu 18.04上,可以创建99-custom-dns.yaml文件,指定DNS服务器IP地址,并重启实例以应用更改。
在RHEL 7.5中,如何阻止NetworkManager管理resolv.conf文件?
可以创建/etc/NetworkManager/conf.d/disable-resolve.conf-managing.conf文件,设置dns=none,然后重启实例。
在Amazon EC2中,如何使用supersede命令覆盖DNS服务器?
在/etc/dhcp/dhclient.conf文件中添加supersede命令,格式为supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;
修改DNS配置前需要注意什么?
在修改DNS配置之前,建议使用AMI或EBS快照创建备份,以防止实例无法访问。