내용으로 건너뛰기

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

6분 분량
0

재부팅 시에 유지되는 정적 DNS 서버를 사용하여 Amazon Elastic Compute Cloud(Amazon EC2) 인스턴스를 구성하려고 합니다.

해결 방법

기본적으로 Amazon Virtual Private Cloud(Amazon VPC)와 연결된 EC2 인스턴스는 스타트업 시 DNS 서버 주소를 요청합니다. DHCP(Dynamic Host Configuration Protocol)가 요청을 전송하면 Amazon에서 DNS 서버 주소와 함께 DHCP 응답을 로컬 /etc/resolv.conf 파일에 씁니다.

인스턴스를 다시 시작하면 사용자 지정 DNS 서버 주소가 포함된 resolv.conf 파일에 대한 수동 수정 내용이 손실됩니다. 인스턴스를 재부팅할 때 정적 DNS 서버를 유지하려면 Linux 배포에 따라 구성을 업데이트하십시오.

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

AL2023

Amazon Linux 2023(AL2023)은 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=~.

참고: systemd-resolved링크별 구성에 설정된 per-link DNS 서버를 사용하지 않도록 Domains=~. 옵션을 설정하십시오. Domains=~. 옵션은 per-link 구성에 지정된 구체적인 검색 도메인과 일치하는 도메인 이름의 쿼리에는 영향을 주지 않습니다. 도메인 이름이 확인되면 해당 per-link DNS 서버가 사용됩니다.

/etc/resolv.conf가 가리키는 위치 변경

기본적으로 /etc/resolv.conf는 로컬 호스트 스텁 확인자를 가리킵니다. 확인자를 변경하려면 업데이트된 필드로 파일을 다시 만들거나 로컬 호스트 스텁 확인자가 아닌 다른 위치를 가리키도록 하십시오. 예를 들어, systemd-resolved에서 사용하는 서버의 플랫화된 목록이 포함된 /run/systemd/resolve/resolv.conf를 가리키도록 합니다.

로컬 DNS 캐시를 사용할 경우 구성 파일 상태 예시:

### Default Symbolic link status : point to stub-resolv.conf
### Flow: DNS query => Local Cache DNS 127.0.0.53 ( systemd-resolved ) => External DNS

# ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 39 Mar  5 02:28 /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf

# cat /etc/resolv.conf
nameserver 127.0.0.53      
options edns0 trust-ad
search .

### 127.0.0.53 is used for systemd-resolved ( local cache dns )
# lsof -nP -p `pidof systemd-resolved` |grep TCP
systemd-r 339 systemd-resolve   14u     IPv4               2753      0t0  TCP 127.0.0.53:53 (LISTEN)

로컬 DNS 캐시를 사용하지 않는 경우 구성 파일 상태 예시:

### Changed Symbolic link status : point to /run/systemd/resolve/resolv.conf
# cat  /run/systemd/resolve/resolv.conf
nameserver 1.1.1.1
nameserver 1.0.0.1
search .

# ln -sf ../run/systemd/resolve/resolv.conf /etc/resolv.conf

# ls -al /etc/resolv.conf
lrwxrwxrwx 1 root root 34 Apr  1 16:05 /etc/resolv.conf -> ../run/systemd/resolve/resolv.conf

구성을 테스트하려면 다음 명령을 실행합니다.

# resolvectl status
# resolvectl query amazonaws.com

출력 예시:

# resolvectl status

Global
       Protocols: -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
resolv.conf mode: uplink
      DNS Servers 8.8.8.8 8.8.4.4
       DNS Domain ~.

Link 2 (ens5)
Current Scopes: DNS
     Protocols: +DefaultRoute -LLMNR -mDNS -DNSOverTLS DNSSEC=no/unsupported
   DNS Servers: 10.2.0.2
    DNS Domain: ap-northeast-2.compute.internal
# resolvectl query amazonaws.com
amazonaws.com: 207.171.166.22                               -- link: ens5
               72.21.206.80                                 -- link: ens5
               72.21.210.29                                 -- link: ens5

-- Information acquired via protocol DNS in 3.0ms.
-- Data is authenticated: no; Data was acquired via local or encrypted transport: no
-- Data from: cache

AL1 또는 AL2

Amazon Linux 1(AL1) 또는 Amazon Linux 2(AL2) 인스턴스를 구성하려면 etc/dhcp/dhclient.conf 파일 또는 ifcfg-eth0.conf 파일을 업데이트하십시오. 두 파일을 모두 구성하면 ifcfg-eth0.conf 파일에 지정된 DNS 서버가 우선 적용됩니다.

전제 조건: ifcfg-eth0.conf 파일의 PEERDNS 파라미터 값을 yes로 설정합니다. PEERDNS 파라미터를 no로 설정하면 Amazon EC2에서 ifcfg-* 파일에 지정되거나 DHCP에서 제공하는 DNS 서버를 무시합니다.

/etc/dhcp/dhclient.conf 파일 업데이트

다음 단계를 완료하십시오.

  1. 기존 /etc/dhcp/dhclient.conf 파일을 엽니다. 또는 새로 만듭니다.
    참고: 이 파일을 편집하려면 루트 사용자 권한이 있어야 합니다. sudo -i를 사용하여 루트 사용자가 되거나 sudo를 사용하여 모든 명령을 구현하십시오.
  2. domain-name-servers를 재정의하려면 파일에 다음 supersede 명령을 추가합니다.
    supersede domain-name-servers 000.000.000.000, 000.000.000.000;
    참고: 000.000.000.000을 DNS 서버 또는 인스턴스에서 사용할 서버의 IP 주소로 바꾸십시오.
  3. /etc/sysconfig/network-scripts/ifcfg-*와 같은 per-interface 구성 파일에서 PEERDNS 파라미터를 yes로 설정합니다.
  4. EC2 인스턴스를 재부팅합니다. 인스턴스 재부팅 시 resolv.conf 파일이 dhclient 파일에 지정된 DNS 서버만 포함하도록 업데이트됩니다.

ifcfj-eth0 파일 업데이트

다음 단계를 완료하십시오.

  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. /etc/sysconfig/network-scripts/ifcfg-*와 같은 per-interface 구성 파일에서 PEERDNS 파라미터를 yes로 설정합니다.

참고: 인스턴스에서 Ubuntu 16.04 또는 Red Hat Enterprise Linux(RHEL) 7.5를 실행하는 경우에도 위의 해결 단계를 사용할 수 있습니다.

Ubuntu 18.04, 20.04 및 22.04

Ubuntu 18.04에서는 netplan.io 패키지가 네트워크 인터페이스 구성을 관리하고 systemd-resolved 서비스가 스텁 확인자를 사용하여 DNS 쿼리를 관리합니다. 스텁 확인자 IP 주소는 /run/systemd/resolve/stub-resolv.conf 파일에 대한 symlink/etc/resolv.conf 파일에 있습니다. /etc/resolv.conf 파일에 다음 구성이 있는 경우 /etc/dhcp/dhclient.confsupersede 문이 예상대로 작동하지 않을 수 있습니다.

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

DNS 서버 값을 재정의하려면 다음 단계를 완료하십시오.

  1. 다음 데이터를 사용하여 이름이 /etc/netplan/99-custom-dns.yaml인 파일을 생성합니다.

    ### Create Customer DNS config
    # 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
    
    ### Required File Permission
    # chmod 600 /etc/netplan/99-custom-dns.yaml
    
    ### Checking Netplan Configuration status
    # netplan get
    network:
      version: 2
      ethernets:
        ens5:
          match:
            macaddress: "0a:e5:a1:40:a2:f5"
          nameservers:
            addresses:
            - 1.1.1.1
            - 1.0.0.1
          dhcp4: true
          dhcp4-overrides:
            use-dns: false
            use-domains: false
          dhcp6: false
          set-name: "ens5"

    참고: 1.1.1.1, 1.0.0.1을 DNS 서버 IP 주소로 바꾸십시오. Netplan은 /etc/netplan 디렉터리에 구성 파일을 저장합니다. 위 예제에서는 ens5 인터페이스를 사용합니다. 인터페이스 이름이 인터페이스와 일치하는지 확인하십시오. 인터페이스 이름을 보려면 다음 명령을 실행합니다.

    # ip a

    출력 예시:

    1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
        link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
        inet 127.0.0.1/8 scope host lo
           valid_lft forever preferred_lft forever
        inet6 ::1/128 scope host
           valid_lft forever preferred_lft forever
    2: ens5: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 9001 qdisc mq state UP group default qlen 1000
        link/ether 0a:e5:a1:40:a2:f5 brd ff:ff:ff:ff:ff:ff
        inet 172.31.35.233/20 metric 100 brd 172.31.47.255 scope global dynamic ens5
           valid_lft 2828sec preferred_lft 2828sec
        inet6 fe80::8e5:a1ff:fe40:a2f5/64 scope link
           valid_lft forever preferred_lft forever
  2. Netplan YAML 파일을 구성 파일로 변환하려면 다음 netplan 명령을 실행합니다.

    # netplan generate
    # netplan try
    # netplan apply

    참고: "WARNING:root:Cannot call Open vSwitch: ovsdb-server.service is not running" 메시지가 표시될 수 있습니다. 이 메시지를 무시하고 다음 단계로 진행해도 됩니다. WARNING 메시지를 표시되지 않도록 하려면 DPDK가 포함된 Open vSwitch 패키지를 설치하십시오. 이제 스텁 확인자 IP 주소는 /etc/resolv.conf에 있습니다. 이는 스텁 확인자 IP 주소가 운영 체제(OS)에 로컬이기 때문에 예상된 동작입니다. 백그라운드에서 스텁 확인자는 99-custom-dns.yaml 파일에 지정된 DNS 서버를 사용합니다.

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

  4. 시스템이 의도한 DNS 서버 IP 주소를 올바르게 사용하는지 확인하려면 Ubuntu 버전에 따라 다음 명령을 실행합니다.
    Ubuntu 18.04:

    systemd-resolve --status

    Ubuntu 20.04 및 22.04:

    resolvectl status

RHEL 7.5

기본적으로 NetworkManager 서비스는 RHEL 배포에 대한 resolv.conf 파일을 관리합니다. 그런 다음 이 서비스는 DHCP에서 제공하는 DNS 서버로 파일을 채웁니다. 사용자 지정 DNS 서버를 사용하려면 resolv.conf 파일에서 NetworkManager를 차단하여 resolv.conf 파일이 DHCP에서 제공하는 DNS 서버를 무시하도록 하십시오.

AL1 또는 AL2에서 /etc/dhcp/dhclient.conf 파일 업데이트를 위한 단계를 완료합니다. 또는 다음 콘텐츠가 포함된 /etc/NetworkManager/conf.d/90-dns-none.conf 파일을 생성합니다.

[main]
dns=none

인스턴스를 재부팅한 다음, /etc/resolv.conf 파일을 수동으로 생성합니다.

관련 정보

Amazon VPC의 DHCP 옵션 세트

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

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

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

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

AWS 공식업데이트됨 일 년 전