如何确定我的公有 DNS 解析程序是否支持 EDNS 客户端子网 (ECS) 扩展?

上次更新时间:2020 年 6 月 17 日

我在 Amazon Route 53 中使用基于地理位置临近度、地理位置和延迟的路由策略。我要查找我的公有 DNS 解析程序的 IP 地址并确定它是否支持 EDNS 客户端子网 (ECS) 扩展。该如何操作?

解决方法

使用特定的 DNS 记录集来查找 DNS 解析程序的公有 IP 地址,然后再确定它是否支持 EDNS 客户端子网扩展

查询以下 DNS 记录集以获取输出,其中将包含您的 DNS 解析程序的 IP 地址。如果您的解析程序支持 EDNS 客户端子网扩展,则输出还将提供相关的信息。

注意:如果您使用的是 Windows,则可以使用 nslookup 来运行这些命令。

1.    使用“edns-client-sub.net”TXT 记录集:

$ dig edns-client-sub.net TXT +short
$ dig edns-client-sub.net TXT +short @Resolver_IP

如果不支持 EDNS 客户端子网扩展,则输出将与以下类似:

"{'ecs':'False','ts':'1516207420.29','recursive':{'cc':'US','srcip':'34.241.148.86','sport':'19407'}}"

在此例中,34.241.148.86 是对权威名称服务器发出 DNS 查询的解析程序的 IP 地址。"'ecs':'False'" 表示 DNS 解析程序不支持 EDNS 客户端子网扩展。

如果支持 EDNS 客户端子网扩展,则输出将与以下类似:

"{'ecs_payload':{'family':'1','optcode':'0x08','cc':'IN','ip':'27.34.254.0','mask':'24','scope':'0'},'ecs':'True','ts':'1589300452.18','recursive':{'cc':'US','srcip':'172.253.244.1','sport':'50821'}}"

在此例中,172.253.244.1 是对权威名称服务器发出 DNS 查询的解析程序的 IP 地址。'ip':'27.34.254.0''mask':'24' 表示 DNS 解析程序支持 EDNS 客户端子网扩展。

2.    使用“o-o.myaddr.l.google.com”TXT 记录集:

$ dig +nocl TXT o-o.myaddr.l.google.com +short
$ dig +nocl TXT o-o.myaddr.l.google.com @Resolver-IP +short

如果不支持 EDNS 客户端子网扩展,则输出将与以下类似:

"203.201.60.5"

在此例中,输出表明 IP 地址为 203.201.60.5 的解析程序不支持 EDNS 客户端子网扩展。

如果支持 EDNS 客户端子网扩展,则输出将与以下类似:

"172.253.220.1"
"edns0-client-subnet 27.34.254.0/24"

在此例中,输出表明 IP 地址为 172.253.220.1 的解析程序支持 EDNS 客户端子网扩展。客户端子网 27.34.254.0/24 信息将被发送到权威名称服务器。

如果您使用的是 DIG 9.9.3 或更高版本,则还可以使用 dig 传递客户端子网:

$ dig +nocl TXT o-o.myaddr.l.google.com @8.8.8.8 +subnet=35.163.158.0/24 +short
"74.125.18.67"
"edns0-client-subnet 35.163.158.0/24"

在本示例中,第一行表示 DNS 解析程序的 IP 地址。第二行提供了 "edns0-client-subnet",该值已传递给权威名称服务器。

3.    使用“resolver-identity.cloudfront.net”记录集。
注意:这仅返回了 DNS 解析程序的公有 IP 地址。

$ dig resolver-identity.cloudfront.net +short
203.201.60.5

在此例中,203.201.60.5 是递归解析程序的 IP 地址。

4.    使用“rs.dns-oarc.net”TXT 记录集。
注意:这仅返回了 DNS 解析程序的公有 IP 地址。

$ dig +short rs.dns-oarc.net txt @8.8.8.8
rst.x4050.rs.dns-oarc.net.
rst.x4058.x4050.rs.dns-oarc.net.
rst.x4064.x4058.x4050.rs.dns-oarc.net.
"172.217.34.197 DNS reply size limit is at least 4064"
"172.217.34.197 sent EDNS buffer size 4096"

在此例中,172.217.34.197 是任播解析程序 (8.8.8.8) 的公有 IP 地址。

注意:对于任播 DNS 服务(如 8.8.8.8),解析程序 IP 地址已发生更改。在这种情况下,请使用“for 循环”获取递归解析程序在相应位置使用的公有 IP 地址列表。

for i in {1..10}; do dig +short resolver-identity.cloudfront.net @8.8.8.8; sleep 11; done; 
172.217.38.5
172.217.34.195
172.253.244.3
172.217.34.69

在此例中,任播 DNS 服务 8.8.8.8 使用不同的公有 IP 地址来连接到权威名称服务器。

分析 Route 53 DNS 查询日志以确定是否支持 EDNS 客户端子网扩展

使用 DNS 查询日志记录来查找 DNS 解析程序的 IP 地址,并获取在 DNS 查询中传递给 Route 53 名称服务器的 EDNS 客户端子网信息。

如果支持 EDNS 客户端子网扩展,则输出将与以下类似:

1.0 2020-05-10T10:39:49Z Z07163611M5WTAAAAA5F8 testwebsite.com A NOERROR UDP IAD79-C1 172.253.214.14 35.173.125.0/24

在此例中,输出中包含了客户端计算机的网络 (35.173.125.0/24) 信息。包含此网络信息是因为将 DNS 查询转发到 Route 53 的解析程序支持 EDNS 客户端子网扩展。该查询是从解析程序的 IP 地址 172.253.214.14 发送的。

如果不支持 EDNS 客户端子网扩展,则输出将与以下类似:

1.0 2020-05-10T10:39:34Z Z07163611M5WTAAAAA5F8 testwebsite.com A NOERROR UDP IAD79-C1 35.170.83.67 -

输出中包含解析程序的 IP 地址 35.170.83.67。但是,不会传递客户端子网信息,如第 10 个字段中的“-”所示。