设置VPC DHCP参数及手工修改DNS

一、背景

需要在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 ~]#

四、小结

结论如下:

  1. 手工修改DNS后,只要不重启,就不会被VPC DHCP option sets配置集里边的信息覆盖
  2. 在VPC的DHCP配置选项中,选择不使用任何DHCP配置集,EC2也会被分配169.254.169.253的DNS
  3. 通过/etc/rc.d/rc.local启动脚本修改DNS,可确保EC2重启时候依然使用自定义DNS