퍼블릭 DNS 해석기가 ECS(EDNS 클라이언트 서브넷) 확장을 지원하는지 확인하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2020년 6월 17일

Amazon Route 53에서 지리 근접, 위치 및 지연 시간 기반 라우팅 정책을 사용하고 있습니다. 퍼블릭 DNS 해석기의 IP 주소를 찾아서 ECS(EDNS 클라이언트 서브넷) 확장을 지원하는지 확인해야 합니다. 어떻게 해야 합니까?

해결 방법

특정 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'는 클라이언트 네트워크 정보를 나타냅니다. "'ecs':'True'"는 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은 Anycast 해석기(8.8.8.8)의 퍼블릭 IP 주소입니다.

참고: Anycast DNS 서비스(예: 8.8.8.8)에서는 해석기 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 클라이언트 서브넷 확장에 대한 지원 확인

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번째 필드의 "-"에서 알 수 있듯이, 클라이언트 서브넷 정보는 전달되지 않습니다.