EC2 Linux에서 DNS 확인 실패를 방지하려면 어떻게 해야 합니까?

최종 업데이트 날짜: 2019년 10월 1일

Amazon Elastic Compute Cloud(Amazon EC2) Linux에서 DNS 확인 실패를 방지하려면 어떻게 해야 합니까? 

간략한 설명

CPU 및 네트워크 사용량을 줄이고 DNS 확인 실패를 방지하려면 DNS 캐시를 적용합니다.

DNS 캐시를 사용하면 캐시가 네트워크를 통해 DNS 해석기와 상호 작용하지 않고 반복되는 DNS 요청에 로컬로 응답합니다. 다음 AWS 서비스 중 하나를 DNS 캐시로 사용합니다.

  • Amazon Relational Database Service(RDS)
  • Amazon ElastiCache
  • Amazon Simple Storage Service(Amazon S3)

다음 절차는 모든 Amazon Linux 버전에 적용됩니다. 다른 배포를 사용하는 경우 다음을 참조하십시오.

해결 방법

dnsmasq(DHCP 및 캐시 DNS 서버)를 사용하여 로컬 DNS 캐시를 설정합니다.

1.     다음 명령을 실행하여 dnsmasq 서버를 설치합니다.

sudo yum install -y dnsmasq

2.     다음 명령을 사용하여 dnsmasq를 실행할 전용 시스템 사용자를 생성합니다.

sudo groupadd -r dnsmasq
sudo useradd -r -g dnsmasq dnsmasq

참고: dnsmasq는 일반적으로 루트 사용자로 실행되지만 시작 후 다른 사용자로 변경하여 루트 권한을 삭제합니다(기본적으로 사용자는 "nobody"임).

3.     다음 명령을 사용하여 dnsmasq.conf 파일의 사본을 생성합니다.

sudo mv /etc/dnsmasq.conf /etc/dnsmasq.conf.orig

4.     텍스트 편집기(예: vim)를 사용하여 구성 파일을 엽니다.

sudo vim /etc/dnsmasq.conf

5.     /etc/dnsmasq.conf 파일을 다음과 유사하게 편집합니다.

# Server Configuration
listen-address=127.0.0.1
port=53
bind-interfaces
user=dnsmasq
group=dnsmasq
pid-file=/var/run/dnsmasq.pid

# Name resolution options
resolv-file=/etc/resolv.dnsmasq
cache-size=500
neg-ttl=60
domain-needed
bogus-priv

6.     /etc/resolv.dnsmasq 파일을 생성한 다음 Amazon DNS 서버 또는 DHCP 옵션 세트에 지정한 사용자 지정 domain-name-servers를 설정합니다.

sudo bash -c "echo 'nameserver 169.254.169.253' > /etc/resolv.dnsmasq"

참고: EC2-Classic의 경우 Amazon DNS 서버는 172.16.0.23에 있습니다. EC2 VPC의 경우 DHCP 옵션 세트에서 DNS 서버 위치에 대한 자세한 내용을 확인할 수 있습니다. dnsmasq 캐시가 있는 인스턴스에서 AMI를 생성하여 다른 CIDR을 사용하는 다른 VPC에서 시작하거나 DHCP 옵션에 지정된 사용자 지정 DNS 서버가 있는 경우 해당 네트워크의 이름 서버를 사용하도록 /etc/resolv.dnsmasq 파일을 조정합니다.

7.     dnsmasq 서버를 다시 시작하고 다음 명령을 사용하여 서비스를 부팅 시 시작으로 설정합니다.

Amazon Linux 1

sudo service dnsmasq restart
sudo chkconfig dnsmasq on

Amazon Linux 2

sudo systemctl restart dnsmasq.service
sudo systemctl enable dnsmasq.service

8.     dig 명령을 사용하여 dnsmasq가 올바르게 작동하는지 확인합니다.

dig aws.amazon.com @127.0.0.1

응답이 다음과 유사하면 dnsmasq 캐시가 올바르게 작동하는 것입니다.

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com @127.0.0.1
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 25122
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        41    IN    A    54.239.31.69

;; Query time: 1 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
...

9.     dnsmasq DNS 캐시를 기본 DNS 해석기로 설정합니다.

참고: /etc/dhcp/dhclient.conf 파일을 변경하거나 생성하여 DHCP에서 제공하는 기본 DNS 해석기를 억제해야 합니다. 자세한 내용은 정적 DNS 서버를 재부팅 중에 유지되는 Amazon Linux, Ubuntu 또는 RHEL을 실행하는 프라이빗 Amazon EC2 인스턴스에 할당하려면 어떻게 해야 합니까?를 참조하십시오.

10.    다음 명령을 사용하여 기본 DNS 해석기를 대체 옵션으로 구성합니다.

sudo bash -c "echo 'supersede domain-name-servers 127.0.0.1, 169.254.169.253;' >> /etc/dhcp/dhclient.conf"

11.    변경 사항을 적용하려면 dhclient 명령을 실행하거나 인스턴스를 재부팅합니다.

sudo dhclient

– 또는 –

sudo reboot

인스턴스가 DNS 캐시를 사용 중인지 확인하려면 dig 명령을 실행합니다.

dig aws.amazon.com

응답이 DNS 요청에 응답하는 서버가 127.0.0.1이라고 표시하면 DNS 캐시가 올바르게 작동하는 것입니다.

; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.62.rc1.56.amzn1 <<>> aws.amazon.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 1028
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 0

;; QUESTION SECTION:
;aws.amazon.com.            IN    A

;; ANSWER SECTION:
aws.amazon.com.        55    IN    A    54.239.31.69

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1) <<<-------
...

자동화

다음 중 하나를 사용하여 dnsmasq를 Amazon Linux에서 DNS 해석기로 설치 및 구성을 자동화할 수 있습니다.

다른 Linux 배포판에서 dnsmasq 설치를 자동화하려는 경우 두 파일 중 하나를 참조로 사용하고 사용자 지정할 수 있습니다.

두 파일 모두 VPC의 경우 Amazon DNS 서버 대체 주소 169.254.169.253 및 EC2-Classic의 경우 172.16.0.23을 사용하므로 VPC 인스턴스 또는 EC2-Classic에서 실행할 수 있습니다.

두 파일 모두 사용자 데이터 필드에 파일의 콘텐츠를 전달하여 시작 시 실행할 수 있습니다. Bash 스크립트는 독립 실행형 스크립트로 실행하거나 AWS Systems Manager Run Command를 사용하여 기존 인스턴스에서 작업을 수행할 수 있습니다.

Bash 스크립트를 독립 실행형 스크립트로 실행하려면:

1.    인스턴스에 스크립트를 다운로드하고 실행 가능하게 설정합니다.

wget https://raw.githubusercontent.com/awslabs/aws-support-tools/master/EC2/AutomateDnsmasq/AutomateDnsmasq.sh
chmod +x AutomateDnsmasq.sh

2.    루트 사용자로 다음 명령을 실행하거나 sudo를 사용합니다.

sudo ./AutomateDnsmasq.sh

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

AWS에서 개선해야 할 부분이 있습니까?


도움이 필요하십니까?