내 AWS Client VPN 엔드포인트에서 DNS가 어떻게 작동합니까?

최종 업데이트 날짜: 2020년 4월 10일

AWS Client VPN 엔드포인트를 생성하고 있습니다. 내 최종 사용자(AWS Client VPN에 연결된 클라이언트)가 도메인 이름 확인을 위한 쿼리를 보낼 수 있는 DNS 서버를 지정해야 합니다. 내 AWS Client VPN 엔드포인트에서 DNS가 어떻게 작동합니까?

해결 방법

새 Client VPN 엔드포인트를 새로 생성할 때 DNS 서버 IP 주소를 지정할 수 있습니다. 이 작업을 수행하려면 AWS Management Console, AWS CLI(AWS 명령줄 인터페이스) 또는 API를 사용하여 "DNS 서버 IP 주소" 파라미터에서 IP 주소를 지정합니다.

또한 기존 Client VPN 엔드포인트를 수정하여 DNS 서버 IP 주소를 지정할 수도 있습니다. 이 작업을 수행하려면 AWS Management Console, AWS CLI 또는 API를 사용하여 "DNS 서버 IP 주소" 파라미터를 수정합니다.

"DNS 서버 IP 주소" 파라미터를 구성할 때 고려 사항

  • 가용성을 높이기 위해 2개의 DNS 서버를 지정하는 것이 좋습니다. 기본 DNS 서버에 도달할 수 없는 경우 최종 사용자 디바이스는 보조 DNS 서버에 쿼리를 재전송합니다.
    참고: 기본 DNS 서버가 "SERVFAIL"로 응답하는 경우 DNS 요청이 보조 DNS 서버로 다시 전송되지 않습니다.
  • 최종 사용자가 Client VPN 엔드포인트에 연결된 후에 지정된 DNS 서버에 모두 도달할 수 있는지 확인합니다. DNS 조회는 "DNS 서버 API 주소" 파라미터에 따라 다릅니다. DNS 서버에 도달할 수 없는 경우 DNS 요청이 실패하면서 연결 문제가 발생할 수 있습니다.
  • "DNS 서버 IP 주소" 파라미터는 선택 사항입니다. 지정된 DNS 서버가 없으면 최종 사용자 디바이스에서 구성된 DNS IP 주소를 사용하여 DNS 쿼리를 확인합니다.
  • AmazonProvidedDNS(또는 Route 53 Resolver 인바운드 엔드포인트)를 Client VPN DNS 서버로 사용하는 경우:
    • VPC에 연결된 Amazon Route 53 프라이빗 호스팅 영역의 리소스 레코드를 확인할 수 있습니다.
    • ("프라이빗 DNS"를 활성화한 상태에서) VPC 인터페이스 엔드포인트에서 액세스할 수 있는 Amazon Relational Database Service(Amazon RDS) 퍼블릭 호스트 이름 및 AWS 서비스 엔드포인트 이름은 프라이빗 IP 주소로 확인됩니다.
      참고: 연결된 VPC의 "DNS 확인" 및 "DNS 호스트 이름"이 활성화되어 있어야 합니다.
  • Client VPN 엔드포인트는 소스 NAT를 사용하여 연결된 VPC의 리소스에 연결된다는 점을 기억하십시오.
  • 클라이언트 디바이스가 Client VPN 터널을 설정한 후에는 "DNS 서버 IP 주소" 파라미터가 적용됩니다. 이는 전체 터널이든 분할 터널이든 상관없이 적용됩니다.
    • 전체 터널: 클라이언트 디바이스가 터널을 설정한 후에는 VPN 터널을 통과하는 모든 트래픽의 경로가 최종 사용자 디바이스의 라우팅 테이블에 추가됩니다. 이에 따라 모든 트래픽(DNS 트래픽 포함)이 Client VPN 터널을 통해 라우팅됩니다. DNS 조회는 Client VPN의 연결 VPC(서브넷) 및 Client VPN 라우팅 테이블에 구성된 DNS 서버에 도달할 수 있는 적절한 경로가 없는 경우에는 실패할 수 있습니다.
    • 분할 터널: Client VPN 터널이 설정되면 Client VPN 라우팅 테이블에 있는 경로만 최종 사용자 디바이스의 라우팅 테이블에 추가됩니다. Client VPN의 연결 VPC를 통해 DNS 서버에 도달할 수 있는 경우 Client VPN 라우팅 테이블에서 DNS 서버 IP 주소의 경로를 추가해야 합니다.

참고: 아래 예제에서는 DNS가 몇 가지 일반적인 시나리오에서 어떻게 작동하는지 보여줍니다. 이 예제는 Windows 및 Linux 환경에 모두 적용할 수 있습니다. 그러나 Linux 환경에서는 최종 사용자의 호스트 머신이 일반적인 네트워킹 설정을 사용하는 경우에만 예제가 설명한 대로 작동합니다.

시나리오 1: "DNS 서버 IP 주소" 파라미터를 비활성화한 상태의 전체 터널

예제 1:

  • 최종 사용자 클라이언트의 IPv4 CIDR = 192.168.0.0/16.
  • Client VPN 엔드포인트 VPC의 CIDR = 10.123.0.0/16.
  • 로컬 DNS 서버 IP 주소 = 192.168.1.1.
  • "DNS 서버 IP 주소" 파라미터는 비활성화되어 있습니다(지정된 DNS 서버 IP 주소가 없음).
  • "DNS 서버 IP 주소" 파라미터가 비활성화되어 있기 때문에 최종 사용자의 호스트 머신은 로컬 DNS 서버를 사용하여 DNS 쿼리를 확인합니다.

이 Client VPN은 전체 터널 모드로 구성되어 있습니다. 가상 어댑터를 가리키는 경로가 추가되어 모든 트래픽을 VPN을 통해 전송합니다(utun1에서 대상 0/1). 그러나 "DNS 서버 IP 주소" 파라미터가 구성되지 않았기 때문에 DNS 트래픽은 여전히 VPN을 통해 전송되지 않습니다. 클라이언트와 DNS 서버 사이의 DNS 트래픽은 여전히 로컬 상태를 유지합니다. 클라이언트 머신에는 이미 로컬 DNS 서버 IP에 대해 선호하는 정적 경로(en0에서 대상 192.168.1.1/32)가 있기 때문에 로컬 DNS 확인자에 도달할 수 있습니다. 도메인 이름이 각 IP로 확인되고 나면, 확인된 IP에 대한 애플리케이션 트래픽이 VPN 터널을 통해 전송됩니다.

다음은 이 예제의 일부분입니다.

$ cat /etc/resolv.conf | grep nameserver
nameserver 192.168.1.1
$ netstat -nr -f inet | grep -E 'utun1|192.168.1.1'
0/1                192.168.0.1        UGSc           16        0   utun1
192.168.1.1/32     link#4             UCS             1        0     en0
(...)
$ dig amazon.com
;; ANSWER SECTION:
amazon.com.		32	IN	A	176.32.98.166
;; SERVER: 192.168.1.1#53(192.168.1.1)
(...)

예제 2:

  • 최종 사용자 클라이언트의 IPv4 CIDR = 192.168.0.0/16.
  • Client VPN 엔드포인트 VPC의 CIDR = 10.123.0.0/16.
  • 퍼블릭 IP로 설정된 로컬 DNS 서버 IP 주소 = 8.8.8.8.
  • "DNS 서버 IP 주소" 파라미터는 비활성화되어 있습니다(지정된 DNS 서버 IP 주소가 없음).

이 시나리오에서는 클라이언트가 198.168.1.1의 로컬 DNS 서버 대신, 퍼블릭 DNS를 로컬 DNS 서버 IP 주소(이 예제에서는 8.8.8.8)로 사용합니다. 8.8.8.8은 en0을 사용하는 정적 경로가 없기 때문에 8.8.8.8이 대상인 트래픽은 Client VPN 터널을 통해 전송됩니다. Client VPN 엔드포인트가 인터넷에 액세스할 수 있도록 구성되지 않은 경우, 퍼블릭 DNS(8.8.8.8)에 도달할 수 없으며 요청 쿼리는 시간 초과됩니다.

$ cat /etc/resolv.conf | grep nameserver
nameserver 8.8.8.8
$ netstat -nr -f inet | grep -E 'utun1|8.8.8.8'
0/1                192.168.0.1      UGSc            5        0   utun1
$ dig amazon.com
(...)
;; connection timed out; no servers could be reached

시나리오 2: "DNS 서버 IP 주소" 파라미터를 활성화한 상태의 분할 터널

이 예제에서는 다음과 같습니다.

  • 최종 사용자 클라이언트의 IPv4 CIDR = 192.168.0.0/16.
  • Client VPN 엔드포인트의 VPC CIDR = 10.123.0.0/16.
  • "DNS 서버 IP 주소" 파라미터가 활성화되어 있으며, 10.10.1.228 및 10.10.0.43으로 설정되어 있습니다. 이 IP 주소는 Client VPN 엔드포인트의 연결된 VPC에 대한 전송 게이트웨이에 연결된 다른 VPC(10.10.0.0/16)에 있는 Route 53 Resolver 인바운드 엔드포인트의 IP 주소를 나타냅니다.
  • 연결 VPC는 "DNS 호스트 이름" 및 "DNS 지원"이 활성화된 상태이며, 연결 Route 53 프라이빗 호스팅 영역(example.local)이 있습니다.

이 Client VPN은 분할 터널 모드로 구성되어 있습니다. Client VPN 라우팅 테이블의 경로가 최종 사용자 호스트 머신의 라우팅 테이블에 추가됩니다.

$ netstat -nr -f inet | grep utun1
(...)
10.10/16           192.168.0.1        UGSc            2        0   utun1 # Route 53 Resolver inbound endpoints VPC CIDR
10.123/16          192.168.0.1        UGSc            0        0   utun1 # Client VPN VPC CIDR
(...)

"DNS 서버 IP 주소" 파라미터가 활성화되어 있고 10.10.1.22810.10.0.43이 DNS 서버로 구성되어 있기 때문에, 클라이언트가 VPN 터널을 설정하면 이러한 DNS 서버 파라미터가 최종 사용자의 호스트 머신에 푸시됩니다.

$ cat /etc/resolv.conf | grep nameserver
nameserver 10.10.1.228 # Primary DNS server 
nameserver 10.10.0.43 # Secondary DNS server

클라이언트 머신이 실행한 DNS 쿼리는 VPN 터널을 통해 Client VPN VPC로 전송됩니다. 다음, DNS 요청이 소스 NAT 처리되고 전송 게이트웨이를 통해 Amazon Route 53 Resolver 엔드포인트로 전달됩니다. 도메인이 API 주소로 확인되고 나면, 애플리케이션 트래픽도 설정된 VPN 터널을 통해 전송됩니다(확인된 대상 IP가 Client VPN 엔드포인트 라우팅 테이블의 경로와 일치하는 경우).

이 구성을 사용하여 최종 사용자는 다음 항목을 확인할 수 있습니다.

  • 표준 DNS 확인을 사용하는 외부 도메인 이름.
  • Route 53 Resolver VPC에 연결된 프라이빗 호스팅 영역의 레코드.
  • 인터페이스 엔드포인트 DNS 이름 및 EC2 퍼블릭 DNS 호스트 이름.
$ dig amazon.com
;; ANSWER SECTION:
amazon.com.		8	IN	A	176.32.103.205
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)
$ dig test.example.local # Route 53 private hosted zone record 
;; ANSWER SECTION:
test.example.local. 10 IN A 10.123.2.1
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)
$ dig ec2.ap-southeast-2.amazonaws.com # VPC interface endpoint to EC2 service in Route 53 Resolver VPC
;; ANSWER SECTION:
ec2.ap-southeast-2.amazonaws.com. 60 IN	A	10.10.0.33
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)
$ dig ec2-13-211-254-134.ap-southeast-2.compute.amazonaws.com # EC2 instance public DNS hostname running in Route 53 Resolver VPC
;; ANSWER SECTION:
ec2-13-211-254-134.ap-southeast-2.compute.amazonaws.com. 20 IN A 10.10.1.11
;; SERVER: 10.10.1.228#53(10.10.1.228)
(...)

이 문서가 도움이 되었습니까?

개선할 부분이 있습니까?


다른 도움이 필요하십니까?