프라이빗 Amazon EC2 인스턴스에서 Amazon Linux, Ubuntu 또는 RHEL을 실행하고 있습니다. 재부팅 중에 지속되는 정적 DNS 서버를 EC2 인스턴스에 할당하려면 어떻게 해야 하나요?

최종 업데이트 날짜: 2021년 11월 8일

재부팅 중 지속되는 정적 DNS 서버 항목을 사용하여 Amazon EC2(Amazon Elastic Compute Cloud) 인스턴스를 구성하려면 어떻게 해야 하나요?

간략한 설명

기본적으로 Amazon Virtual Private Cloud(Amazon VPC)와 연결된 Amazon EC2 인스턴스는 시작 시 DHCP(Dynamic Host Configuration Protocol)를 사용하여 DNS 서버 주소를 요청합니다. DHCP 응답은 로컬 /etc/resolv.conf 파일에 기록되는 DNS 서버 주소를 반환합니다. 사용자 지정 DNS 서버 주소를 사용하여 resolv.conf 파일을 수동으로 수정한 내용은 인스턴스를 다시 시작할 때 손실됩니다. 이 문제를 해결하는 데 사용하는 방법은 Linux 배포판에 따라 다릅니다. VPC 및 DNS 서버에 대한 자세한 내용은 Amazon DNS 서버를 참조하세요.

해결 방법

중요: Amazon EC2 인스턴스를 변경하기 전에 Amazon Machine Image(AMI) 또는 Amazon Elastic Block Store(Amazon EBS) 스냅샷을 사용하여 백업을 생성하십시오. 인스턴스의 네트워킹 구성을 변경하면 인스턴스에 연결하지 못할 수 있습니다.

Amazon Linux, Amazon Linux 2

다음 옵션 중 하나를 사용하여 Amazon EC2 인스턴스를 구성합니다. 두 옵션을 모두 적용할 경우 ifcfg-eth0 파일에 지정된 DNS 서버(옵션 2)가 우선적으로 적용됩니다.

두 옵션 모두 ifcfg-eth0 파일의 PEERDNS 파라미터 값이 yes로 설정된 경우에만 작동합니다. PEERDNS 파라미터를 no로 설정하면 ifcfg-* 파일에 지정되어 있거나 DHCP에서 제공한 DNS 서버가 무시됩니다.

옵션 1:

1.    /etc/dhcp/dhclient.conf 파일을 편집하거나 생성합니다.

참고: 이 파일을 편집하려면 루트 사용자 권한이 있어야 합니다. sudo -i를 사용하여 루트가 되거나 sudo를 사용하여 모든 명령을 실행합니다.

2.    파일에 supersede 명령을 추가하여 domain-name-servers를 재정의합니다. 다음 예에서 xxx.xxx.xxx.xxx를 인스턴스에 사용하려는 DNS 서버의 IP 주소(하나 이상)로 바꿉니다.

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

앞에서 수정한 후 resolv.conf 파일은 인스턴스 재부팅 시 dhclient 파일에 지정한 DNS 서버만 포함하도록 업데이트됩니다. supersede 명령에 대한 자세한 내용은 Linux 매뉴얼 페이지의 dhclient.conf(5)를 참조하세요.

3.    인터페이스별 구성 파일(/etc/sysconfig/network-scripts/ifcfg-*)에서 PEERDNS 파라미터를 yes로 설정합니다.

4.    EC2 인스턴스를 재부팅합니다.

옵션 2:

1.    인터페이스별 구성 파일(/etc/sysconfig/network-scripts/ifcfg-*)에서 사용자 지정 DNS 서버를 지정하여 /etc/dhcp/dhclient.conf 파일의 DNS 서버 값을 재정의합니다.

예를 들어 다음 예제에서는 2개의 사용자 지정 DNS 서버(DNS1DNS2)를 포함하도록 수정된 Amazon Linux 인스턴스의 /etc/sysconfig/network-scripts/ifcfg-eth0 파일을 보여줍니다.

DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
TYPE=Ethernet
USERCTL=yes
PEERDNS=yes
IPV6INIT=no
PERSISTENT_DHCLIENT=yes
RES_OPTIONS="timeout:2 attempts:5"
DHCP_ARP_CHECK=no
MTU="9001"
DNS1=8.8.8.8
DNS2=8.8.4.4

2.    인터페이스별 구성 파일(/etc/sysconfig/network-scripts/ifcfg-*)에서 PEERDNS 파라미터를 yes로 설정합니다.

Ubuntu 16.04

1.    /etc/dhcp/dhclient.conf 파일을 편집하거나 생성합니다.

참고: 이 파일을 편집하려면 루트 사용자 권한이 있어야 합니다. sudo -i를 사용하여 루트가 되거나 sudo를 사용하여 모든 명령을 실행합니다.

2.    파일에 supersede 명령을 추가하여 domain-name-servers를 재정의합니다. 다음 예에서 xxx.xxx.xxx.xxx를 인스턴스에 사용하려는 DNS 서버의 IP 주소(하나 이상)로 바꿉니다.

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

이렇게 수정한 후 resolv.conf 파일은 인스턴스 재부팅 시 dhclient 파일에 지정한 DNS 서버만 포함하도록 업데이트됩니다. supersede 명령에 대한 자세한 내용은 Linux 매뉴얼 페이지의 dhclient.conf(5)를 참조하세요.

3.    인스턴스를 재부팅합니다.

Ubuntu 18.04

기본적으로 Ubuntu 18.04에서는 netplan.io 패키지가 네트워크 인터페이스 구성을 처리하고 systemd-resolved 서비스가 스텁 리졸버를 사용하여 DNS 쿼리를 처리합니다. 스텁 리졸버 IP는 /etc/resolv.conf에 있습니다.

그리고 이 /etc/resolv.conf 파일은 /run/systemd/resolve/stub-resolv.conf 파일에 대한 symlink입니다. /etc/resolv.conf 파일과 관련해 다음에 해당하는 경우 /etc/dhcp/dhclient.conf의 supersede 문이 정상적으로 작동하지 않을 수 있습니다.

  • 이 파일이 인스턴스에서 symlink가 아닙니다.
  • 이 파일이 다른 파일(예: /run/systemd/resolve/resolv.conf)을 가리키는 symlink입니다.

이 두 가지 조건 중 하나라도 해당하면 기본 Ubuntu 18.04 구성이 사용자 지정된 것입니다.

다음 단계를 실행하여 DNS 서버 값을 재정의합니다.

1.    Netplan은 일반적으로 /etc/netplan 디렉터리에 구성 파일을 저장합니다. /etc/netplan/99-custom-dns.yaml이라는 이름의 파일을 생성한 후 다음 코드 줄로 채웁니다. 자리 표시자 DNS 서버 IP 주소를 원하는 주소로 바꿔야 합니다.

network:
    version: 2
    ethernets:
        eth0:         
            nameservers:
                    addresses: [1.2.3.4, 5.6.7.8]
            dhcp4-overrides:
                    use-dns: false

이렇게 변경한 후에도 /etc/resolv.conf에는 스텁 리졸버 IP가 표시됩니다. 이는 예상된 동작입니다. 스텁 리졸버 IP는 운영 체제에 대해 로컬이며, 스텁 리졸버는 앞서 99-custom-dns.yaml 파일에 지정한 DNS 서버를 백그라운드에서 사용합니다.

2.    인스턴스를 재부팅합니다.

3.    systemd-resolve 명령을 사용하여 시스템에서 올바른 DNS 서버 IP 주소를 선택하는지 확인합니다.

systemd-resolve --status

RHEL 7.5

기본적으로 NetworkManager 서비스가 resolv.conf 파일을 관리합니다. 이 서비스는 DHCP에서 제공되는 DNS 서버로 해당 파일을 채웁니다. resolv.conf 파일이 DHCP에서 제공되는 DNS 서버를 무시하도록 NetworkManager가 resolv.conf 파일을 더 이상 관리하지 않게 설정할 수 있습니다.

옵션 1:

1.    /etc/dhcp/dhclient.conf 파일을 편집하거나 생성합니다.

참고: 이 파일을 편집하려면 루트 사용자 권한이 있어야 합니다. sudo -i를 사용하여 루트가 되거나 sudo를 사용하여 모든 명령을 실행합니다.

2.    파일에 supersede 명령을 추가하여 domain-name-servers를 재정의합니다. 다음 예에서 xxx.xxx.xxx.xxx를 인스턴스에 사용하려는 DNS 서버의 IP 주소(하나 이상)로 바꿉니다.

supersede domain-name-servers xxx.xxx.xxx.xxx, xxx.xxx.xxx.xxx;

이렇게 수정한 후 resolv.conf 파일은 인스턴스 재부팅 시 dhclient 파일에 지정한 DNS 서버만 포함하도록 업데이트됩니다. supersede 명령에 대한 자세한 내용은 Linux 매뉴얼 페이지의 dhclient.conf(5)를 참조하세요.

3.    인터페이스별 구성 파일(/etc/sysconfig/network-scripts/ifcfg-*)에서 PEERDNS 파라미터를 yes로 설정합니다.

4.    인스턴스를 재부팅합니다.

옵션 2:

1.    다음 콘텐츠가 포함된 /etc/NetworkManager/conf.d/disable-resolve.conf-managing.conf 파일을 생성합니다.

[main]
dns=none

2.    인스턴스를 재부팅한 후 /etc/resolv.conf 파일을 수동으로 채웁니다.


이 문서가 도움이 되었나요?


결제 또는 기술 지원이 필요하세요?