一、背景
需要在EC2上使用自建DNS,且希望在VPC的DHCP上不设置DHCP Option Set,然后手工修改EC2的DNS配置。
那么会发生什么情况?
二、修改DHCP Set选择不使用配置集的测试
1、修改DHCP集
进入VPC服务,在左侧菜单可以找到DHCP option sets
,这里可以创建新的DHCP参数集。如下截图。
修改当前VPC使用的DHCP option sets
的方法是,选中当前VPC,点击右上角的编辑设置。如下截图。
在编辑VPC设置界面中,将DHCP设置为No DHCP options sets
。即不使用任何DHCP配置集。如下截图。
然后保存退出,使得DHCP配置集生效。
2、查看EC2 DNS信息
现在新创建一个EC2,或者将一个原来存在的EC2重启一下,重启获得DHCP推送的配置信息。
运行cat /etc/resolv.conf
命令查看DNS配置文件,结果如下。
root@ip-172-16-0-168 ~]# cat /etc/resolv.conf
options timeout:2 attempts:5
; generated by /usr/sbin/dhclient-script
nameserver 169.254.169.253
[root@ip-172-16-0-168 ~]#
由此可以看到,当VPC不配置DHCP集时候,VPC上的DHCP将为EC2分配169.254.169.253
作为Name Server。
3、查看EC2的DHCP信息验证
现在进一步验证这一点,执行如下命令:
cat /var/lib/dhclient/dhclient--eth0.lease
即可显示DHCP客户端拿到的信息,结果节选如下:
ease {
interface "eth0";
fixed-address 172.16.0.168;
option subnet-mask 255.255.255.0;
option routers 172.16.0.1;
option dhcp-lease-time 3600;
option dhcp-message-type 5;
option domain-name-servers 169.254.169.253;
option dhcp-server-identifier 172.16.0.1;
option interface-mtu 9001;
option broadcast-address 172.16.0.255;
option host-name "ip-172-16-0-168";
renew 5 2023/11/03 14:15:42;
rebind 5 2023/11/03 14:43:30;
expire 5 2023/11/03 14:51:00;
}
lease {
interface "eth0";
fixed-address 172.16.0.168;
option subnet-mask 255.255.255.0;
option routers 172.16.0.1;
option dhcp-lease-time 3600;
option dhcp-message-type 5;
option domain-name-servers 169.254.169.253;
option dhcp-server-identifier 172.16.0.1;
option interface-mtu 9001;
option broadcast-address 172.16.0.255;
option host-name "ip-172-16-0-168";
renew 5 2023/11/03 14:44:32;
rebind 5 2023/11/03 15:08:12;
expire 5 2023/11/03 15:15:42;
}
从以上信息中,可看到DHCP的TTL是3600秒,推送过来的配置信息中DNS的值就是刚才查询到的169.254.169.253
。这也与查看/etc/resolv.conf
的结果一致。
三、手工修改DNS
1、手工修改
手工修改EC2的DNS可以让EC2使用自定义的DNS服务器。手工修改后,只要不重启EC2,手工修改的结果将一致存在。
例如将上一步测试的EC2的DNS手工修改掉,经过了约24小时,即已经经过了数次DHCP的renew(默认3600秒有效期),手工修改的DNS依然有效。如下截图。
2、修改启动文件强制覆盖DNS
针对Redhat Enterprise Linux 7.x/CentOS 7.x/Amazon Linux 2系统,编辑配置文件/etc/rc.d/rc.local
,加入如下内容到文件末尾。这表示将清空原有配置文件/etc/resolv.conf
,并写入两行新的DNS配置。
rm -f /etc/resolv.conf
touch /etc/resolv.conf
cat >/etc/resolv.conf<<EOF
nameserver 1.1.1.1
nameserver 1.0.0.1
EOF
编辑好效果如下:
保存文件并退出编辑。执行如下命令允许启动脚本自动运行:
chmod +x /etc/rc.d/rc.local
修改完毕后,重启EC2。
当EC2重启完毕后,再次查看/etc/resolv.conf,可看到已经是自定义的DNS。
[root@ip-172-16-0-168 ~]# cat /etc/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
[root@ip-172-16-0-168 ~]#
四、小结
结论如下:
- 手工修改DNS后,只要不重启,就不会被VPC DHCP option sets配置集里边的信息覆盖
- 在VPC的DHCP配置选项中,选择不使用任何DHCP配置集,EC2也会被分配
169.254.169.253
的DNS - 通过
/etc/rc.d/rc.local
启动脚本修改DNS,可确保EC2重启时候依然使用自定义DNS