Help us improve the AWS re:Post Knowledge Center by sharing your feedback in a brief survey. Your input can influence how we create and update our content to better support your AWS journey.
재부팅해도 유지되는 정적 DNS 서버를 EC2 인스턴스에 할당하려면 어떻게 해야 합니까?
재부팅 시에 유지되는 정적 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 파일 업데이트
다음 단계를 완료하십시오.
- 기존 /etc/dhcp/dhclient.conf 파일을 엽니다. 또는 새로 만듭니다.
참고: 이 파일을 편집하려면 루트 사용자 권한이 있어야 합니다. sudo -i를 사용하여 루트 사용자가 되거나 sudo를 사용하여 모든 명령을 구현하십시오. - domain-name-servers를 재정의하려면 파일에 다음 supersede 명령을 추가합니다.
참고: 000.000.000.000을 DNS 서버 또는 인스턴스에서 사용할 서버의 IP 주소로 바꾸십시오.supersede domain-name-servers 000.000.000.000, 000.000.000.000; - /etc/sysconfig/network-scripts/ifcfg-*와 같은 per-interface 구성 파일에서 PEERDNS 파라미터를 yes로 설정합니다.
- EC2 인스턴스를 재부팅합니다. 인스턴스 재부팅 시 resolv.conf 파일이 dhclient 파일에 지정된 DNS 서버만 포함하도록 업데이트됩니다.
ifcfj-eth0 파일 업데이트
다음 단계를 완료하십시오.
-
/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 -
/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.conf의 supersede 문이 예상대로 작동하지 않을 수 있습니다.
- 해당 파일이 인스턴스의 symlink가 아닙니다.
- 해당 파일이 다른 파일(예: /run/systemd/resolve/resolv.conf)을 가리키는 symlink입니다.
DNS 서버 값을 재정의하려면 다음 단계를 완료하십시오.
-
다음 데이터를 사용하여 이름이 /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 -
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 서버를 사용합니다.
-
시스템이 의도한 DNS 서버 IP 주소를 올바르게 사용하는지 확인하려면 Ubuntu 버전에 따라 다음 명령을 실행합니다.
Ubuntu 18.04:systemd-resolve --statusUbuntu 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 파일을 수동으로 생성합니다.
관련 정보
Archlinux 웹 사이트의 네트워크 파일
Archlinux 웹 사이트의 resolved.conf(5)
Archlinux 웹 사이트의 dhclient.conf(5)
Archlinux 웹 사이트의 networkmanager.conf(5)
관련 콘텐츠
AWS 공식업데이트됨 일 년 전
