配置VPC Endpoint后EC2仍使用公网DNS的问题排查与解决
问题描述
我已经为ecs.ap-northeast-1.amazonaws.com配置了VPC终端节点,在该VPC内的EC2节点执行测试:
$dig +short ecs.ap-northeast-1.amazonaws.com 52.119.220.167
结果显示仍解析为公网地址。我通过Reachable Analyzer验证实例到VPC终端节点的连通性,结果显示可达且使用私有IP:
outbound header 172.18.125.102/32 0-65535 TCP 172.18.125.133/32 0-65535 inbound header 172.18.125.102/32 0-65535 TCP 172.18.125.133/32 0-65535
问题在于VPC终端节点可正常访问,但EC2节点未使用内部DNS解析。请问该问题原因是什么?如何修复?(是否与权限相关?若相关,在哪里查看错误码?我在CloudTrail中未找到线索)
我猜测问题与DNS有关,因此执行DNS查询,返回包含ADDITIONAL SECTION的结果:
[ec2-user@ip-172-18-125-133 ~]$ dig logs.ap-northeast-1.amazonaws.com NS ; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.68.rc1.90.amzn1 <<>> logs.ap-northeast-1.amazonaws.com NS ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 7113 ;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 8 ;; QUESTION SECTION: ;logs.ap-northeast-1.amazonaws.com. IN NS ;; ANSWER SECTION: logs.ap-northeast-1.amazonaws.com. 6745 IN NS ns-727.awsdns-26.net. logs.ap-northeast-1.amazonaws.com. 6745 IN NS ns-2000.awsdns-58.co.uk. logs.ap-northeast-1.amazonaws.com. 6745 IN NS ns-261.awsdns-32.com. logs.ap-northeast-1.amazonaws.com. 6745 IN NS ns-1057.awsdns-04.org. ;; ADDITIONAL SECTION: ns-727.awsdns-26.net. 72139 IN A 205.251.194.215 ns-727.awsdns-26.net. 72139 IN AAAA 2600:9000:5302:d700::1 ns-2000.awsdns-58.co.uk. 81896 IN A 205.251.199.208 ns-2000.awsdns-58.co.uk. 81896 IN AAAA 2600:9000:5307:d000::1 ns-261.awsdns-32.com. 2908 IN A 205.251.193.5 ns-261.awsdns-32.com. 2908 IN AAAA 2600:9000:5301:500::1 ns-1057.awsdns-04.org. 55934 IN A 205.251.196.33 ns-1057.awsdns-04.org. 55934 IN AAAA 2600:9000:5304:2100::1 ;; Query time: 5 msec ;; SERVER: 128.1.100.205#53(128.1.100.205) ;; WHEN: Thu Aug 10 10:56:47 2023 ;; MSG SIZE rcvd: 364
我检查了VPC的DHCP option set,其中包含多个域名服务器:128.1.100.xxx,128.1.100.xxx,AmazonProvidedDNS,这是否与问题相关?
原因分析与修复方案
核心原因:DHCP选项集的DNS服务器顺序问题
你的DHCP选项集里自定义DNS服务器(128.1.100.xxx)排在AmazonProvidedDNS前面,EC2节点会优先使用列表中靠前的DNS服务器。而这些自定义DNS未配置AWS服务的私有DNS解析规则,导致ecs.ap-northeast-1.amazonaws.com被解析为公网IP。从dig结果也能验证:查询使用的DNS服务器是128.1.100.205,而非AWS内部DNS。
修复步骤
- 调整DHCP选项集的DNS顺序:将
AmazonProvidedDNS移到自定义DNS服务器的前面,确保EC2优先使用AWS内部DNS。AWS内部DNS会自动处理VPC终端节点的私有域名解析,返回对应私有IP。 - 验证DNS配置生效:在EC2节点执行以下命令,确认使用的DNS服务器已切换为AWS内部DNS(格式为VPC网段的第三个IP,比如VPC网段172.18.0.0/16对应的内部DNS是172.18.0.2):
cat /etc/resolv.conf - 重新测试域名解析:再次执行dig命令,确认返回私有IP:
dig +short ecs.ap-northeast-1.amazonaws.com
关于权限的说明
这个问题和权限无关,所以CloudTrail里不会有相关日志。VPC终端节点连通性已验证正常,问题完全出在DNS解析环节。
额外验证点
如果调整DHCP选项集后仍未生效,可以:
- 重启EC2实例,确保新的DHCP配置被加载;
- 检查EC2实例是否手动配置了静态DNS(查看
/etc/resolv.conf是否有手动添加的nameserver),如果有,需删除并恢复为DHCP自动分配。
内容的提问来源于stack exchange,提问作者whitebear
相关产品推荐
相关产品推荐

