Route 53 프라이빗 호스팅 영역의 DNS 확인 문제를 해결하려면 어떻게 해야 하나요?

7분 분량
0

Amazon Route 53 프라이빗 호스팅 영역의 DNS 확인 문제를 해결하고 싶습니다.

해결 방법

참고: AWS Command Line Interface(AWS CLI) 명령을 실행할 때 오류가 발생하는 경우, 최신 AWS CLI 버전을 사용하고 있는지 확인합니다.

VPC에서의 DNS 지원 활성화 여부 확인

프라이빗 호스팅 영역 레코드 확인을 허용하려면 Virtual Private Cloud(VPC)에서 DNS 지원을 켜야 합니다. VPC에서 DNSSupportDNSHostnamesTrue로 설정되어 있는지 확인합니다.

프라이빗 호스팅 영역에 올바른 VPC ID가 연결되어 있는지 확인합니다.

VPC와 프라이빗 호스팅 영역을 연결하면 Route 53 Resolver가 자동 정의된 규칙을 생성하여 VPC와 연결합니다. 해당 VPC의 리소스는 Resolver를 쿼리하여 프라이빗 호스팅 영역의 DNS 레코드를 확인할 수 있습니다.

프라이빗 호스팅 영역에 올바른 VPC ID를 연결했는지 확인합니다. 또한 동일한 VPC 내에서 도메인의 리소스 레코드를 쿼리해야 합니다.

AWS CLI에서 다음 명령을 실행하여 호스팅 영역과 연결된 VPC 목록을 가져옵니다.

aws route53  list-hosted-zones-by-vpc --vpc-id VPC_ID --vpc-region REGION_ID

참고: VPC_IDREGION_ID를 관련 값으로 변경합니다.

AWS CLI에서 다음 명령을 실행하여 특정 VPC와 연결된 프라이빗 호스팅 영역의 목록을 가져옵니다.

aws route53 get-hosted-zone --id VPC_ID

참고: VPC_ID를 관련 값으로 변경합니다.

사용자 지정 DNS 서버의 프라이빗 호스팅 영역 도메인에 대한 Amazon 제공 DNS 서버(CIDR+2)로의 전달 규칙 구성 여부를 확인합니다.

VPC의 DNS에 대한 DHCP 옵션에서 사용자 지정 DNS 서버 또는 Active Directory 서버를 구성했다면, 다음 구성을 확인합니다.

  • 전달 규칙에서 서버가 VPC의 Amazon 제공 DNS 서버의 IP 주소로 프라이빗 도메인 DNS 쿼리를 전달하는지 확인합니다. 예를 들어, VPC의 기본 CIDR 범위가 172.31.0.0/16이라면, VPC DNS 서버의 IP 주소는 172.31.0.2입니다. 이는 VPC 네트워크 범위에 2를 더한 값입니다.
  • 사용자 지정 서버에 구성한 도메인이 프라이빗 호스팅 영역과 다른지 확인합니다. 도메인이 프라이빗 호스팅 영역과 동일하다면 서버는 해당 도메인에 대한 권한을 가집니다. 이 경우 서버는 프라이빗 호스팅 영역 도메인에 대해 Amazon 제공 DNS 서버에 연결하지 않습니다.

resolv.conf의 사용자 지정 설정 검토

DNS 확인 또는 응답이 간헐적으로 발생한다면, resolv.conf에서 원본 인스턴스의 구성 설정을 검토합니다.

예를 들어, resolv.conf에서 회전 옵션을 구성하여 Amazon DNS 서버와 퍼블릭 Google 리졸버 서버(8.8.8.8) 간에 DNS 쿼리를 로드 밸런싱합니다. 이 경우 resolv.conf 설정은 다음과 같습니다.

options rotate; generated by /usr/sbin/dhclient-script
nameserver 8.8.8.8
nameserver 172.31.0.2

퍼블릭 Google 리졸버(8.8.8.8)에 대한 첫 번째 쿼리에서 예상 NxDomain 응답을 받습니다. 이 응답은 리졸버가 프라이빗 호스팅 영역이 아닌 퍼블릭 호스팅 영역에서 응답을 찾으려고 하기 때문에 수신됩니다.

Private hosted Zone Record - resolvconf.local\[ec2-user@ip-172-31-253-89 etc\]$ curl -vks http://resolvconf.local
\* Rebuilt URL to: http://resolvconf.local/
\* Could not resolve host: resolvconf.local

15:24:58.553320 IP ip-172-31-253-89.ap-southeast-2.compute.internal.40043 > dns.google.domain: 65053+ A? resolvconf.local. (34)
15:24:58.554814 IP dns.google.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.40043: 65053 NXDomain 0/1/0 (109)

하지만 두 번째 쿼리는 성공적으로 확인됩니다. 두 번째 쿼리는 프라이빗 호스팅 영역에 연결된 VPC DNS 리졸버에 도달하므로 성공합니다.

[ec2-user@ip-172-31-253-89 etc]$ curl -vks http://resolvconf.local* Rebuilt URL to: http://resolvconf.local/
*   Trying 1.1.1.1...
* TCP_NODELAY set
* Connected to resolvconf.local (1.1.1.1) port 80 (#0)

15:25:00.224761 IP ip-172-31-253-89.ap-southeast-2.compute.internal.51578 > 172.31.0.2.domain: 7806+ A? resolvconf.local. (34)
15:25:00.226527 IP 172.31.0.2.domain > ip-172-31-253-89.ap-southeast-2.compute.internal.51578: 7806 1/0/0 A 1.1.1.1 (50)

프라이빗 호스팅 영역의 네임스페이스 중복 여부 확인

여러 영역에 중복되는 네임스페이스가 있는 경우(예: example.com 및 test.example.com), Resolver는 가장 구체적인 일치 항목에 기반하여 호스팅 영역으로 트래픽을 라우팅합니다. 일치하는 영역이 있지만 요청의 도메인 이름 및 유형과 일치하는 레코드가 없다면, Resolver는 요청을 전달하지 않습니다. 대신 Resolver는 클라이언트에 NXDOMAIN(존재하지 않는 도메인)을 반환합니다.

성공적인 DNS 확인을 위해 가장 구체적인 프라이빗 호스팅 영역에 올바른 레코드가 구성되어 있는지 확인합니다.

예를 들어, 다음과 같은 레코드가 있는 두 개의 프라이빗 호스팅 영역이 있다고 가정해 보겠습니다.

프라이빗 호스팅 영역 이름레코드 이름
localoverlap.privatevpc.local60.1.1.1
privatevpc.localoverlap.privatevpc.local50.1.1.1

요청은 가장 구체적으로 일치하는 프라이빗 호스팅 영역에서 다음과 같은 응답을 받습니다.

[ec2-user@IAD-BAS-INSTANCE ~]$ dig overlap.privatevpc.local +short50.1.1.1

프라이빗 호스팅 영역의 영역 위임 구성 여부 확인

프라이빗 호스팅 영역은 영역 위임을 지원하지 않습니다. 위임이 구성되었다면, 클라이언트는 VPC 리졸버로부터 “Servfail” 응답 코드를 받습니다.

AWS CLI를 사용하여 다음 예시와 같이 프라이빗 호스팅 영역에 영역 위임이 구성되지 않았는지 확인합니다.

프라이빗 호스팅 영역:abc.com 위임 NS 레코드 대상: kc.abc.com 리소스 레코드: test.kc.abc.com

[ec2-user@ip-172-31-0-8 ~]$ dig test.kc.abc.com;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 63414
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;test.kc.abc.com        IN      A
;; Query time: 15 msec
;; SERVER: 172.31.0.2#53(172.31.0.2)
;; WHEN: Fri Apr 16 15:57:37 2021
;; MSG SIZE  rcvd: 48

리소스 레코드의 라우팅 정책이 프라이빗 호스팅 영역에서 지원되는지 확인합니다.

프라이빗 호스팅 영역에서 지원하는 리소스 레코드의 라우팅 정책을 구성했는지 확인합니다.

  • 단순 라우팅
  • 장애 조치 라우팅
  • 다중 응답 라우팅
  • 가중치 기반 라우팅
  • 지연 시간 기반 라우팅
  • 지리적 위치 라우팅

Resolver 규칙 및 다른 VPC로의 해당 인바운드 엔드포인트 확인

Resolver 규칙의 아웃바운드 엔드포인트가 해당 규칙과 VPC를 공유하는 인바운드 엔드포인트를 가리킨다면, 그 결과는 루프입니다. 이 루프에서 쿼리는 인바운드 엔드포인트와 아웃바운드 엔드포인트 사이를 지속적으로 전달합니다.

다른 계정과 공유하는 다른 VPC에는 여전히 전달 규칙을 연결할 수 있습니다. 이 작업을 위해 AWS Resource Access Manager(AWS RAM)를 사용합니다. 허브 또는 중앙 VPC와 연결된 프라이빗 호스팅 영역은 쿼리에서 인바운드 엔드포인트까지 확인합니다. 다음 예와 같이 전달 리졸버 규칙은 이 확인을 변경하지 않습니다.

허브 VPC: VPC A - CIDR 172.31.0.0/16 Spoke VPC: VPC B - CIDR 172.32.0.0/16 인바운드 IP 주소: 172.31.253.100 및 172.31.2.100 전달 규칙의 대상 IP 주소: VPC와 관련된 172.31.253.100 및 172.31.2.100 규칙: VPC A 및 VPC B 클라이언트: 172-32-254-37

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 9007
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1
;; QUESTION SECTION:
;overlap.privatevpc.local. IN A
;; Query time: 2941 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

이 출력에서 DNS 요청은 아웃바운드 엔드포인트와 인바운드 엔드포인트 사이를 계속 이동합니다. 요청은 VPC A와 연결된 규칙을 확인하고, 아웃바운드 엔드포인트로 쿼리를 다시 전송합니다. 여러 번 시도하면 쿼리 제한 시간이 초과되어 Servfail 응답 코드로 응답합니다.

이 문제를 해결하고 루프를 끊으려면 규칙을 사용하여 허브 VPC 연결(VPC A)을 제거합니다. 연결을 제거하면 프라이빗 호스팅 영역에서 성공적인 응답을 받게 됩니다.

ubuntu@ip-172-32-254-37:~$ dig overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58606
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1
;overlap.privatevpc.local. IN A
;; ANSWER SECTION:
overlap.privatevpc.local. 0 IN A 50.1.1.1
;; Query time: 5 msec
;; SERVER: 172.32.0.2#53(172.32.0.2)

온프레미스 리졸버의 재귀 요청 전송 여부 확인

온프레미스에서 Route 53 리졸버로 쿼리를 사용한다면, 네트워크의 리졸버에서 VPC 리졸버로 DNS 쿼리를 전달할 수 있습니다. 이를 위해 Resolver 인바운드 엔드포인트를 사용합니다. 이 작업을 통해 프라이빗 호스팅 영역의 레코드와 같은 AWS 리소스의 도메인 이름을 확인할 수 있습니다.

경우에 따라서는 온프레미스 리졸버에서 프라이빗 호스팅 영역이 제대로 확인되지 않을 수 있습니다. 이 동작은 온프레미스 리졸버가 재귀 요청이 아닌 반복 쿼리를 전송하기 때문에 발생합니다. 인바운드 엔드포인트는 성공적인 DNS 확인을 위해 재귀 쿼리를 지원합니다.

DNS 리졸버(온프레미스)에서 패킷 캡처를 사용하여 해상도 유형을 확인합니다. 그런 다음 DNS 플래그를 검토합니다(재귀 필요 = 0). 확인을 테스트하려면 +norecurse dig 명령을 사용하여 반복 요청을 보내거나, nslookup으로 norecurse를 설정합니다.

인바운드 엔드포인트 IP 주소: 172.31.253.150

온프레미스 Resolver IP 주소: 10.0.4.210

인바운드 IP 주소에 대한 반복 쿼리가 실패하면 다음과 같은 결과가 출력됩니다.

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local +norecurse; <<>> DiG 9.11.0rc1 <<>> @172.31.253.150 overlap.privatevpc.local +norecurse
; (1 server found)
;; global options: +cmd
;; connection timed out; no servers could be reached

재귀 쿼리가 성공하면 다음과 같은 결과가 출력됩니다.

[ec2-user@IAD-BAS-INSTANCE ~]$ dig @172.31.253.150 overlap.privatevpc.local;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 19051
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;overlap.privatevpc.local.      IN      A
;; ANSWER SECTION:
overlap.privatevpc.local. 0     IN      A       50.1.1.1
;; Query time: 200 msec
;; SERVER: 172.31.253.150#53(172.31.253.150)

Amazon 제공 DNS에 대한 올바른 규칙의 우선 순위 구성 여부 확인

클라이언트 인스턴스가 리졸버(AWS 제공 DNS 서버)에 쿼리를 전송하면 리졸버는 요청을 라우팅할 위치에 대한 인스턴스의 규칙을 확인합니다.

일반적으로 가장 구체적인 규칙이 우선합니다. 예를 들어, test.example.com Resolver 규칙과 가장 longest.test.example.com 프라이빗 호스팅 영역이 있다면, 가장 longest.test.example.com 도메인이 프라이빗 호스팅 영역과 일치하는지 찾아봅니다.

규칙이 동일한 도메인 수준에 있다면, 해당 규칙의 우선 순위는 다음과 같습니다.

  1. Resolver 규칙
  2. 프라이빗 호스팅 영역
  3. 내부 규칙

예를 들어 test.example.com Resolver 규칙과 test.example.com 프라이빗 호스팅 영역이 있다면, Resolver 규칙이 우선합니다. 쿼리는 규칙에 구성된 서버 또는 대상 IP 주소로 전달됩니다.

관련 정보

프라이빗 호스팅 영역 사용

프라이빗 호스팅 영역을 사용하려면 어떤 Amazon VPC 옵션을 활성화해야 하나요?

Resolver 엔드포인트를 사용한 루프 구성 방지

AWS 공식
AWS 공식업데이트됨 10달 전