Amazon EC2 인스턴스에 재부팅해도 유지되는 정적 DNS 서버를 할당하려면 어떻게 해야 합니까?

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 파일을 수동으로 수정하지 않아도 됩니다. 인스턴스를 재부팅할 때 정적 DNS 서버를 유지하려면 Linux 배포에 따라 다음 절차 중 하나를 완료하세요.

해결 방법

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

Amazon Linux 2023

Amazon Linux 2023은 systemd-resolved를 사용합니다. 자세한 내용은 Archlinux 웹 사이트에서 systemd-resolved를 참조하세요.

확인자 구성

/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=~.

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

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

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

구성을 테스트하려면 resolvectl status 명령을 실행하고 resolvectl query amazonaws.com을 사용하세요. 그런 다음 출력을 검토하세요.

Amazon Linux 또는 Amazon Linux 2

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

두 옵션이 모두 작동하려면 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 서버만 포함하도록 업데이트됩니다.
  3. per-interface 구성 파일인 /etc/sysconfig/network-scripts/ifcfg-*에서 PEERDNS 파라미터를 yes로 설정합니다.
  4. EC2 인스턴스를 재부팅합니다.

옵션 2

다음 단계를 완료합니다.

  1. /etc/dhcp/dhclient.conf 파일의 DNS 서버 값을 재정의하려면 per-interface 구성 파일에서 사용자 지정 DNS 서버를 지정합니다.
    예를 들어, 다음 파일은 두 개의 사용자 지정 DNS 서버를 포함하도록 수정된 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. per-interface 구성 파일인 /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 서버만 포함하도록 업데이트됩니다.
  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.confsupersede 문이 예상대로 작동하지 않을 수 있습니다.

  • 해당 파일이 인스턴스에서 symlink가 아닙니다.
  • 해당 파일은 다른 파일을 가리키는 symlink입니다. 예를 들어, 파일은 /run/systemd/resolve/resolv.conf를 가리킵니다.

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

  1. Netplan은 일반적으로 /etc/netplan 디렉터리에 구성 파일을 저장합니다. 이름이 /etc/netplan/99-custom-dns.yaml인 파일을 만든 다음 파일에 다음 줄을 입력합니다. 예제 DNS 서버 IP 주소를 사용자의 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 YAML 파일을 구성 파일로 변환하려면 다음 netplan 명령을 실행합니다.
    netplan generate
    이제 /etc/resolv.conf에 스텁 확인자 IP 주소가 있습니다. 이는 예상된 결과입니다. 스텁 확인자 IP 주소는 운영 체제에 로컬입니다. 백그라운드에서 스텁 확인자는 99-custom-dns.yaml 파일에 지정한 DNS 서버를 사용합니다.
  3. 인스턴스를 재부팅합니다.
  4. 시스템이 의도한 DNS 서버 IP 주소를 올바르게 수신하는지 확인하려면 systemd-resolve 명령을 실행합니다.
    systemd-resolve --status

RHEL 7.5

기본적으로 NetworkManager 서비스는 resolv.conf 파일을 관리합니다. 그런 다음 이 서비스는 DHCP에서 제공하는 DNS 서버로 파일을 채웁니다. NetworkManager가 resolv.conf 파일을 관리하지 않도록 허용하지 않으므로 resolv.conf 파일이 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 서버만 포함하도록 업데이트됩니다.
  3. per-interface 구성 파일인 /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 파일을 수동으로 채웁니다.

관련 정보

Amazon VPC의 DHCP 옵션 세트

Archlinux 웹 사이트의 2.1 네트워크 파일

Archlinux 웹 사이트의 resolved.conf(5)

Archlinux 웹 사이트의 dhclient.conf(5)

Archlinux 웹 사이트의 networkmanager.conf(5)

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