CentOS 7에서 DNS 이름 해석이 되지 않는 문제를 해결하는 방법

안녕하세요. 지구 IDC 기술팀입니다.

오늘은 CentOS 7에서 DNS 이름 해석이 되지 않는 문제를 해결하는 방법을 알아보겠습니다. 서버가 IP 주소로는 외부 통신이 되지만 도메인 이름으로 접속할 때 Could not resolve host, Name or service not known, Temporary failure in name resolution과 같은 오류가 발생한다면 DNS 설정과 이름 해석 경로를 순서대로 확인해야 합니다.

CentOS 7에서는 일반적으로 NetworkManager가 네트워크 연결 프로필과 /etc/resolv.conf의 DNS 정보를 관리합니다. 따라서 /etc/resolv.conf를 바로 덮어쓰기보다 IP 통신 상태, NetworkManager가 받은 DNS 서버, 연결 프로필의 DNS 설정, /etc/resolv.conf, /etc/nsswitch.conf 순으로 원인을 좁히는 것이 안전합니다.

적용 환경과 CentOS 7 지원 상태

항목 내용
운영체제 CentOS Linux 7
기본 네트워크 관리 NetworkManager 및 nmcli 기준
예시 인터페이스 ens3 — 실제 서버의 인터페이스명으로 변경
예시 DNS 1.1.1.1, 8.8.8.8 — 사내·IDC 전용 DNS가 있다면 해당 서버를 우선 사용

DNS 문제인지 먼저 구분하기

DNS 설정을 변경하기 전에 서버의 IP 주소와 기본 경로가 정상인지 확인합니다.

ip addr show
ip route show
ip route show default

외부 IP 주소로 직접 통신이 가능한지도 확인합니다.

ping -c 3 1.1.1.1

ICMP는 네트워크 정책에 따라 차단될 수 있으므로 ping 실패만으로 인터넷 연결이 끊겼다고 단정하지 마십시오. IP 통신은 되지만 다음 도메인 조회만 실패한다면 DNS 문제일 가능성이 높습니다.

getent hosts server.example.com
getent hosts centos.org

NetworkManager와 현재 DNS 서버 확인

먼저 NetworkManager 서비스와 활성 연결 상태를 확인합니다.

systemctl is-active NetworkManager.service
systemctl status NetworkManager.service --no-pager
nmcli device status
nmcli connection show --active

NetworkManager가 인터페이스에 적용한 DNS 주소를 확인합니다.

nmcli device show | grep -E 'GENERAL.DEVICE|IP4.DNS|IP6.DNS'

특정 인터페이스만 확인하려면 다음처럼 실행합니다.

nmcli device show ens3 | grep -E 'IP4.DNS|IP6.DNS'

DNS 주소가 전혀 표시되지 않는다면 DHCP에서 DNS를 받지 못했거나 연결 프로필에 DNS가 설정되지 않았을 수 있습니다. DNS 주소가 표시되지만 조회가 실패한다면 해당 DNS 서버의 장애나 네트워크 차단을 점검해야 합니다.

/etc/resolv.conf 확인

현재 resolver 설정을 확인합니다.

ls -l /etc/resolv.conf
cat /etc/resolv.conf

정상적인 예에서는 하나 이상의 nameserver 항목이 존재합니다.

nameserver 1.1.1.1
nameserver 8.8.8.8

실제 서버에서는 IDC, 클라우드 또는 사내망에서 제공하는 내부 DNS 주소가 표시될 수 있습니다. 특히 사설 도메인이나 Active Directory를 사용하는 서버는 공용 DNS로 임의 변경하면 내부 도메인이 해석되지 않을 수 있습니다.

만약 nameserver 127.0.0.1처럼 로컬 주소가 설정되어 있다면 실제 로컬 DNS 서비스가 53번 포트를 수신하는지 확인합니다.

sudo ss -luntp | grep ':53 '

nmcli로 DNS 서버를 영구 설정

NetworkManager가 활성화된 서버라면 먼저 현재 연결 프로필 이름을 확인합니다.

nmcli connection show --active

아래 예시에서는 연결 프로필 이름을 System ens3로 가정합니다. 실제 출력의 NAME 값을 사용하십시오.

DHCP가 제공한 DNS를 무시하고 지정한 DNS만 사용

sudo nmcli connection modify "System ens3" ipv4.ignore-auto-dns yes
sudo nmcli connection modify "System ens3" ipv4.dns "1.1.1.1 8.8.8.8"

설정을 확인한 뒤 연결을 다시 활성화합니다.

nmcli connection show "System ens3" | grep -E 'ipv4.dns:|ipv4.ignore-auto-dns:'
sudo nmcli connection up "System ens3"

적용 후 실제 DNS 주소를 다시 확인합니다.

nmcli device show ens3 | grep -E 'IP4.DNS'
cat /etc/resolv.conf

DHCP DNS를 유지하면서 DNS를 추가

sudo nmcli connection modify "System ens3" +ipv4.dns "1.1.1.1"
sudo nmcli connection up "System ens3"

ifcfg 파일에서 DNS를 설정하는 방법

CentOS 7은 /etc/sysconfig/network-scripts/ifcfg-* 형식도 사용합니다. NetworkManager가 비활성화되어 있거나 기존 서버가 ifcfg 파일 중심으로 관리되는 경우 현재 인터페이스 파일을 확인합니다.

ls -l /etc/sysconfig/network-scripts/ifcfg-*
grep -E '^(DEVICE|NAME|BOOTPROTO|PEERDNS|DNS1|DNS2)=' /etc/sysconfig/network-scripts/ifcfg-ens3

ifcfg-ens3는 실제 인터페이스 파일명으로 변경하십시오. DHCP DNS를 사용하지 않고 특정 DNS를 고정하려면 다음 값을 구성할 수 있습니다.

PEERDNS=no
DNS1=1.1.1.1
DNS2=8.8.8.8

변경 전 파일을 백업합니다.

sudo cp -a /etc/sysconfig/network-scripts/ifcfg-ens3 \
  /etc/sysconfig/network-scripts/ifcfg-ens3.bak

NetworkManager가 관리하는 서버라면 설정 파일을 다시 읽고 연결 프로필을 활성화합니다.

sudo nmcli connection reload
nmcli connection show
sudo nmcli connection up "System ens3"

NetworkManager를 사용하지 않는 오래된 구성이라면 현재 network.service 상태와 운영 방식을 먼저 확인하십시오. 원격 서버에서 네트워크 서비스를 무조건 재시작하는 것은 권장하지 않습니다.

nsswitch.conf와 hosts 파일 점검

Name Service Switch 확인

grep '^hosts:' /etc/nsswitch.conf

DNS를 통한 이름 해석이 필요한 일반적인 환경에서는 이 조회 순서에 dns 항목이 포함되어 있어야 합니다. LDAP, NIS, SSSD 등 특수한 이름 서비스 구성을 사용하는 서버라면 조직의 정책을 확인하지 않고 해당 항목을 임의로 삭제하지 마십시오.

/etc/hosts 충돌 확인

cat /etc/hosts
getent hosts server.example.com

특정 도메인만 잘못된 IP로 해석되거나 DNS 변경 후에도 결과가 바뀌지 않는다면 /etc/hosts에 해당 이름이 고정 등록되어 있는지 확인하십시오.

방화벽과 로컬 DNS 서비스 점검

DNS 클라이언트는 외부 DNS 서버의 UDP 53번과 상황에 따라 TCP 53번으로 통신할 수 있어야 합니다. 서버에서 송신 트래픽을 제한하고 있다면 firewalld와 iptables 정책을 확인합니다.

sudo firewall-cmd --state
sudo firewall-cmd --list-all
sudo iptables -S

클라우드 보안 그룹, IDC 상위 방화벽 또는 사내 방화벽에서 DNS 통신을 막고 있지 않은지도 확인합니다.

BIND, dnsmasq, Unbound 같은 로컬 DNS 서비스를 사용하는 서버라면 서비스와 53번 포트 수신 상태를 확인합니다.

sudo ss -luntp | grep ':53 '
ps -ef | grep -E '[n]amed|[d]nsmasq|[u]nbound'

해결 여부 확인

설정 변경 후에는 DNS 주소, resolver 파일과 실제 이름 해석을 차례대로 다시 확인합니다.

nmcli device show | grep -E 'GENERAL.DEVICE|IP4.DNS|IP6.DNS'
cat /etc/resolv.conf
getent hosts centos.org
getent hosts server.example.com

bind-utils가 이미 설치되어 있다면 특정 DNS 서버에 직접 질의해 기본 resolver 문제와 DNS 서버 자체 문제를 구분할 수 있습니다.

dig @1.1.1.1 centos.org
dig centos.org

첫 번째 질의는 성공하지만 두 번째 질의만 실패한다면 /etc/resolv.conf, NetworkManager DNS 또는 NSS 설정을 다시 확인합니다.

자주 발생하는 오류와 해결 방법

CentOS 7 DNS 오류 진단표
증상 가능한 원인 확인 방법 해결 방향
Could not resolve host DNS 서버 누락, 응답 불가 또는 resolver 설정 오류 nmcli device show, cat /etc/resolv.conf, getent hosts 정상 DNS 서버를 연결 프로필에 설정하고 재확인
Name or service not known DNS 조회 실패, 잘못된 호스트명 또는 NSS 설정 문제 getent hosts, grep '^hosts:' /etc/nsswitch.conf 호스트명과 NSS 조회 순서 확인
재부팅 후 resolv.conf가 다시 변경됨 NetworkManager 또는 DHCP가 파일을 다시 생성 nmcli connection show, ifcfg의 PEERDNS/DNS1 확인 nmcli 또는 ifcfg에 영구 DNS 설정
IP 주소 통신도 되지 않음 DNS가 아닌 IP·게이트웨이·상위 네트워크 문제 ip addr, ip route 네트워크 연결 자체를 먼저 복구
DNS 수정 후에도 yum이 실패 CentOS 7 EOL 저장소 URL 또는 Vault 전환 문제 getent hosts 성공 여부와 yum 실제 오류 확인 DNS와 별도로 EOL 저장소 구성을 점검

원상복구 방법

nmcli로 DHCP DNS를 무시하도록 변경했다면 자동 DNS 사용을 다시 활성화하고 수동 DNS 값을 제거할 수 있습니다.

sudo nmcli connection modify "System ens3" ipv4.ignore-auto-dns no
sudo nmcli connection modify "System ens3" ipv4.dns ""
sudo nmcli connection up "System ens3"

ifcfg 파일을 직접 변경했다면 작업 전에 만든 백업으로 복원합니다.

sudo cp -a /etc/sysconfig/network-scripts/ifcfg-ens3.bak \
  /etc/sysconfig/network-scripts/ifcfg-ens3
sudo nmcli connection reload

관련 지구 IDC 기술자료

공식 참고자료

기관 문서 확인 내용 조회일
Red Hat RHEL 7 Networking Guide — Configuring IP Networking with nmcli NetworkManager 연결 프로필, ipv4.ignore-auto-dns와 DNS 설정
Red Hat RHEL 7 Networking Guide — Configuring IP Networking with ifcfg Files PEERDNS, DNS1, DNS2, /etc/resolv.conf 반영 방식
CentOS Project CentOS Linux CentOS Linux 7 공식 지원 종료일 2024년 6월 30일
CentOS Project CentOS Linux 7 End of Life 안내 EOL 이후 업데이트 종료 및 Vault 보관 안내

자주 묻는 질문

/etc/resolv.conf에 DNS를 직접 입력하면 안 되나요?

임시 진단에는 사용할 수 있지만 NetworkManager나 DHCP가 파일을 관리하는 서버에서는 재연결 또는 재부팅 후 값이 덮어써질 수 있습니다. 영구 설정은 nmcli 연결 프로필이나 ifcfg 파일에 반영하는 것이 좋습니다.

IP 주소로는 접속되는데 도메인만 안 됩니다. DNS 문제인가요?

가능성이 높습니다. 먼저 getent hosts, nmcli device show, /etc/resolv.conf를 확인하십시오. 특정 도메인만 실패한다면 해당 DNS 레코드 또는 /etc/hosts 매핑도 점검해야 합니다.

공용 DNS인 1.1.1.1이나 8.8.8.8을 사용해도 되나요?

인터넷 도메인만 사용하는 일반 서버에서는 사용할 수 있지만 회사 내부 도메인, Active Directory, 사설 서비스가 있다면 조직에서 지정한 DNS를 사용해야 합니다. 공용 DNS로 변경하면 내부 이름이 해석되지 않을 수 있습니다.

DNS 클라이언트 서버에서 53번 포트를 외부에 열어야 하나요?

일반적인 DNS 클라이언트는 외부 DNS 서버로 나가는 UDP/TCP 53번 통신이 가능하면 됩니다. 서버가 DNS 서비스를 제공하지 않는다면 외부에서 들어오는 53번 포트를 열 필요는 없습니다.

DNS를 고쳤는데 yum이 계속 실패하는 이유는 무엇인가요?

CentOS Linux 7은 이미 EOL이므로 기존 미러 구성이나 저장소 주소가 더 이상 정상 동작하지 않을 수 있습니다. 먼저 getent hosts로 DNS 이름 해석이 정상임을 확인한 뒤, 남은 오류가 저장소 URL·Vault·TLS 등 별도 원인인지 확인하십시오.

마무리

오늘은 CentOS 7에서 DNS 이름 해석이 되지 않을 때 IP 통신 상태와 NetworkManager DNS 설정, /etc/resolv.conf, ifcfg 파일, NSS와 방화벽을 순서대로 확인하는 방법을 설명드렸습니다.

DNS 문제는 /etc/resolv.conf만 임시 수정하면 재부팅 후 다시 발생하는 경우가 많습니다. NetworkManager가 관리하는 서버라면 실제 연결 프로필에 DNS 값을 반영하고, 원격 서버에서는 네트워크 프로필을 다시 활성화하기 전에 현재 설정 백업과 콘솔 접근 수단을 확보하시기 바랍니다.

CentOS 7은 이미 공식 지원이 종료된 운영체제이므로 장애를 해결한 이후에는 지원 중인 운영체제로의 이전도 함께 검토하시기 바랍니다. 오늘 준비한 내용은 여기까지입니다.

  • 0 用户发现这个很有用
此文章对您是否有帮助?
« Back