パブリック DNS リゾルバーが EDNS Client Subnet (ECS) 拡張機能をサポートしているかどうかを確認するには、どうすればよいですか?

最終更新日: 2020 年 6 月 17 日

Amazon Route 53 で地理的近接性、位置情報、レイテンシーをベースとしたルーティングポリシーを使用しています。パブリック DNS リゾルバーの IP アドレスを見つけ、そのアドレスが EDNS Client Subnet (ECS) 拡張機能をサポートしているかどうかを確認する必要があります。どうすればよいですか?

解決方法

特定の DNS レコードセットを使用して DNS リゾルバーのパブリック IP アドレスを見つけ、EDNS Client Subnet 拡張機能に対するサポートを確認する

次の DNS レコードセットをクエリして、DNS リゾルバーの IP アドレスを含む出力を取得します。出力には、EDNS Client Subnet 拡張機能の詳細も含まれます (リゾルバーがサポートしている場合)。

注意: 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 Client Subnet 拡張機能がサポートされていない場合、出力は以下のようになります。

"{'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 Client Subnet 拡張機能をサポートしていないことを示します。

EDNS Client Subnet 拡張機能がサポートされている場合、出力は以下のようになります。

"{'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' はクライアントネットワーク情報を示します。「'ecs':'True'」は、DNS リゾルバーが EDNS Client Subnet 拡張機能をサポートしていることを示します。

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 Client Subnet 拡張機能がサポートされていない場合、出力は以下のようになります。

"203.201.60.5"

この例では、出力は、IP アドレス 203.201.60.5 のリゾルバーが EDNS Client Subnet 拡張機能をサポートしていないことを示しています。

EDNS Client Subnet 拡張機能がサポートされている場合、出力は以下のようになります。

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

この例では、出力は、IP アドレス 172.253.220.1 のリゾルバーが EDNS Client Subnet 拡張機能をサポートしていることを示しています。クライアントサブネット 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 アドレスを示しています。2 行目は、権威ネームサーバーに渡される値である「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 が Anycast リゾルバー (8.8.8.8) のパブリック IP アドレスです。

注意: 8.8.8.8 などの Anycast DNS サービスの場合、リゾルバーの IP アドレスが変更されます。この場合、「for loop」を使用して、各場所で再帰的なリゾルバーによって使用されるパブリック 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

この例では、Anycast DNS サービス 8.8.8.8 は異なるパブリック IP アドレスを使用して権威ネームサーバーに接続しました。

Route 53 DNS クエリログを分析して EDNS Client Subnet 拡張機能に対するサポートを確認する

DNS クエリのログ記録を使用して DNS リゾルバーの IP アドレスを見つけ、DNS クエリで Route 53 ネームサーバーに渡される EDNS Client Subnet 情報を取得します。

EDNS Client Subnet 拡張機能がサポートされている場合、出力は以下のようになります。

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) が出力に含まれています。ネットワークが含まれている理由は、Route 53 に DNS クエリを転送するリゾルバーが EDNS Client Subnet 拡張機能をサポートしているためです。クエリはリゾルバー IP アドレス 172.253.214.14 から送信されました。

EDNS Client Subnet 拡張機能がサポートされていない場合、出力は以下のようになります。

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 番目のフィールドの「-」で示されているように、クライアントサブネット情報は渡されません。