我快疯了,因为这应该很容易,尤其是按照亚马逊的文档操作时。我一直在用这个参考自亚马逊。
只是尝试更改 AWS EC2 实例用于解析域名的 DNS 服务器。编辑了 /etc/sysconfig/network-scripts/ifcfg-eth0,设置了 PEERDNS=no,添加了 DNS1=10.0.0.11,保存,重新启动,没有成功:仍然在 /etc/resolve.conf 中看到 10.0.0.2 名称服务器,测试对内部服务器 FQDN (server.mycorp.company.com) 的 ping 失败,因为它需要我们的内部 DNS 服务器来解析名称。如果我手动编辑 resolv.conf 并更改名称服务器行以反映我们的 DNS 服务器 10.0.0.11,则 ping 可以正常工作。
据我所知,服务器正在运行最新的 Amazon Linux AMI,2017.03。完成 /etc/sysconfig/networking-scripts/ifcfg-eth0:
DEVICE=eth0 BOOTPROTO=dhcp ONBOOT=yes TYPE=Ethernet USERCTL=yes PEERDNS=no DHCPV6C=yes DHCPV6C_OPTIONS=-nw PERSISTENT_DHCLIENT=yes RES_OPTIONS="timeout:2 attempts:5" DHCP_ARP_CHECK=no DNS1=10.0.0.11
* 已更改 IP 地址以保护无辜者
答案1
我认为 AWS 文档不正确。/etc/sysconfig/networking-scripts/ifcfg-eth0 中的设置PEERDNS=no
将阻止任何更新将反映到 resolv.conf 文件中。因此您有 2 个选项:
- 留下
PEERDNS=yes
并添加DNS1=
,DNS2=
... - 直接在resolv.conf中设置
PEERDNS=no
和更改nameserver
使用 Linux AMI 2017.03 进行测试
答案2
对于这个问题的未来读者,请注意问题中的 AWS 文章已经被不同的指令取代。
这些建议不是编辑特定的网络接口配置,而是更改 DHCP 客户端配置以忽略 DHCP 提供的 DNS 服务器。
- 编辑
/etc/dhcp/dhclient.conf
- 添加一行形式
supersede domain-name-servers a.b.c.d, e.f.g.h;
(其中a.b.c.d
和e.f.g.h
是一个或多个 DNS 服务器的 IP 地址)。
这通常会在下次系统启动时生效,但您可以通过重新启动网络接口强制立即读取它:
# RedHat based systems (e.g. RHEL, Fedora, CentOS, Amazon Linux)
/etc/init.d/network restart
# Debian based systems (e.g. Debian, Ubuntu)
/etc/init.d/networking restart