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

5분 분량
0

재부팅하는 동안 유지되는 정적 DNS 서버 항목을 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 구성하고 싶습니다.

간략한 설명

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

해결 방법

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

Amazon Linux 2023

Amazon Linux 2023은 systemd-resolved를 사용합니다. 자세한 내용을 보려면 archlinux.org 웹 사이트의 resolved.conf(5)를 참조하세요.

확인자 구성

/etc/systemd/resolved.conf 파일을 편집하고 DNS도메인 옵션을 변경합니다.

# /etc/systemd/resolved.conf

[Resolve]
DNS=8.8.8.8
Domains=~.

또는 드롭인을 생성합니다. 예: /etc/systemd/resolved.conf.d/dns_servers.conf.

#/etc/systemd/resolved.conf.d/dns_servers.conf

[Resolve]
DNS=8.8.8.8 8.8.4.4
Domains=~.

참고: resolved.conf(5)에서 Domains=~. 옵션을 설정할 때 다음 사항에 유의하세요.

  • Domains=~. 옵션이 설정되지 않은 경우 systemd-resolved는 링크별 구성에 설정된 링크별 DNS 서버를 사용할 수 있습니다.
  • Domains=~. 옵션은 링크별 구성에 지정된 보다 구체적인 검색 도메인과 일치하는 도메인 이름의 쿼리에는 영향을 미치지 않습니다. 도메인 이름은 여전히 각각의 링크별 DNS 서버를 사용하여 확인됩니다.

링크별 구성에 대한 자세한 내용을 보려면 archlinux.org 웹 사이트의 systemd-networkd#network 파일을 참조하세요.

/etc/resolv.conf가 가리키는 위치를(으)로 변경하세요.

/etc/resolv.conf는 로컬 호스트 스텁 확인자로 기본 설정되어 있습니다. 이를 변경하려면 다른 내용으로 파일을 다시 만들거나 로컬 호스트 스텁 확인자가 아닌 다른 곳을 가리키도록 합니다. 예를 들어, systemd-resolved에서 사용하는 서버의 플랫화된 목록이 포함된 /run/systemd/resolve/resolv.conf를 가리킬 수 있습니다.

resolvectl status 명령을 사용하여 구성을 테스트할 수 있으며, 예를 들어 resolvectl이 amazonaws.com을 쿼리하고 출력을 검토할 수 있습니다.

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.    domain-name-servers를 재정의하려면 파일에 supersede 명령을 추가합니다. 다음 예제에서는 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/dhcp/dhclient.conf 파일의 DNS 서버 값을 재정의하려면 인터페이스별 구성 파일(/etc/sysconfig/network-scripts/ifcfg-*)에서 사용자 지정 DNS 서버를 지정합니다.

예를 들어, 다음 예는 두 개의 사용자 지정 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.    domain-name-servers를 재정의하려면 파일에 supersede 명령을 추가합니다. 다음 예제에서는 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 패키지가 네트워크 인터페이스 구성을 처리하고 시스템 확인 서비스가 스텁 확인자를 사용하여 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 주소를 원하는 주소로 바꾸어야 합니다.

cat << 'EOF' | sudo tee /etc/netplan/99-custom-dns.yaml
network:
  version: 2
  ethernets:
    ens5:
      nameservers:
        addresses: [1.1 .1 .1, 1.0 .0 .1]
      dhcp4-overrides:
        use-dns: false
        use-domains: false
EOF

참고: 이전 예제에서는 인터페이스가 ens5로 지정되어 있습니다. 인터페이스 이름이 설정한 인터페이스와 일치하는지 확인합니다. 인터페이스 이름을 확인하려면 ip a 명령을 사용합니다.

2.    다음 명령을 실행합니다.

netplan generate

이렇게 변경한 후에도 /etc/resolv.conf는 여전히 스텁 확인자 IP를 표시합니다. 이는 예상된 결과입니다. 스텁 확인자 IP는 운영 체제에 로컬입니다. 백그라운드에서 스텁 확인자는 앞의 99-custom-dns.yaml 파일에 지정한 DNS 서버를 사용합니다.

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

4.    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.    domain-name-servers를 재정의하려면 파일에 supersede 명령을 추가합니다. 다음 예제에서는 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/90-dns-none.conf 파일을 생성합니다.

[main]
dns=none

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

관련 정보

networkmanager.conf(5)(Linux 매뉴얼 페이지)

AWS 공식
AWS 공식업데이트됨 일 년 전