Linux 서버를 운영하다 보면 웹 서버, API 서버, 데이터베이스 연결 또는 패키지 설치 과정에서 DNS Lookup Failed, Temporary failure in name resolution, Name or service not known, Could not resolve host와 같은 DNS 관련 오류를 자주 접하게 됩니다.
이 오류는 네트워크 연결은 정상인데 도메인 이름을 IP 주소로 변환(DNS Lookup)하지 못할 때 발생하는 대표적인 네트워크 문제입니다.
이번 글에서는 DNS Lookup Failed 오류의 원인과 확인 방법, 해결 방법을 실무 중심으로 자세히 알아보겠습니다.
DNS Lookup Failed란?
인터넷에서는 사람이 기억하기 쉬운 도메인 이름 대신 IP 주소로 통신합니다.
예를 들어 다음과 같은 과정이 수행됩니다.
google.com
↓
DNS Server 조회
↓
142.250.xxx.xxx
↓
TCP 연결
DNS 서버에서 IP 주소를 받아오지 못하면 다음과 같은 오류가 발생합니다.
Temporary failure in name resolution
Could not resolve host
Name or service not known
즉, DNS 조회 자체가 실패한 상태입니다.
DNS Lookup Failed가 발생하는 주요 원인
대표적인 원인은 다음과 같습니다.
- DNS 서버 설정 오류
/etc/resolv.conf설정 오류- 인터넷 연결 장애
- 방화벽 차단
- DNS 서버 장애
- 잘못된 도메인 입력
- VPN 설정 문제
- Docker DNS 문제
- Kubernetes CoreDNS 문제
- DNS Cache 오류
실무에서는 resolv.conf 설정 오류가 가장 많이 발생합니다.
1. 네트워크 연결 확인하기
먼저 인터넷 연결이 정상인지 확인합니다.
ping 8.8.8.8
정상적으로 응답하면 네트워크 자체는 정상입니다.
다음으로 DNS를 확인합니다.
ping google.com
IP는 되지만 도메인이 안 된다면 DNS 문제일 가능성이 매우 높습니다.
2. DNS 서버 확인하기
현재 설정된 DNS 서버를 확인합니다.
cat /etc/resolv.conf
예시입니다.
nameserver 8.8.8.8
nameserver 1.1.1.1
DNS 서버 주소가 없거나 잘못되어 있다면 수정해야 합니다.
3. nslookup 실행하기
도메인을 조회합니다.
nslookup google.com
예시
Server: 8.8.8.8
Address: 8.8.8.8#53
DNS 서버 자체가 응답하는지 확인합니다.
4. dig 명령 사용하기
보다 자세한 DNS 정보를 확인합니다.
dig google.com
특정 DNS 서버를 지정할 수도 있습니다.
dig @8.8.8.8 google.com
Query Time과 Status를 함께 확인합니다.
5. host 명령 사용하기
간단하게 확인하려면
host google.com
DNS 응답 여부를 빠르게 확인할 수 있습니다.
6. DNS 서비스 확인하기
systemd-resolved를 사용하는 환경에서는 다음 명령으로 확인합니다.
systemctl status systemd-resolved
서비스가 중지되어 있다면
systemctl restart systemd-resolved
를 실행합니다.
7. 방화벽 확인하기
DNS는 일반적으로 UDP 53번 포트를 사용합니다.
iptables
iptables -L -n
firewalld
firewall-cmd --list-all
UDP 53이 차단되어 있지 않은지 확인합니다.
8. Docker 및 Kubernetes 확인하기
Docker
docker network inspect bridge
컨테이너 내부에서도 확인합니다.
cat /etc/resolv.conf
Kubernetes에서는 CoreDNS 상태를 확인합니다.
kubectl get pods -n kube-system
CoreDNS Pod가 정상인지 반드시 확인합니다.
9. DNS 응답 테스트하기
DNS 서버가 실제 응답하는지 테스트합니다.
dig @8.8.8.8 openai.com
또는
nslookup openai.com 8.8.8.8
공용 DNS에서도 실패한다면 네트워크 문제일 가능성이 있습니다.
10. 로그 확인하기
systemd-resolved 로그를 확인합니다.
journalctl -u systemd-resolved
커널 로그도 함께 확인합니다.
journalctl -k
DNS 관련 오류가 반복되는지 확인합니다.
DNS Lookup Failed 점검 순서
실무에서는 다음 순서대로 점검하는 것이 좋습니다.
- IP Ping 확인
- 도메인 Ping 확인
- resolv.conf 확인
- nslookup 실행
- dig 실행
- host 명령 확인
- DNS 서비스 확인
- 방화벽 확인
- Docker/Kubernetes DNS 확인
- 로그 확인
DNS Lookup Failed 사용 시 주의사항
다음 사항을 고려해야 합니다.
- IP Ping과 DNS Ping을 구분한다.
- resolv.conf 설정을 먼저 확인한다.
- DNS 서버 장애도 의심한다.
- Docker와 Kubernetes DNS도 함께 확인한다.
- UDP 53 포트 차단 여부를 확인한다.
- VPN 사용 시 DNS 설정이 변경될 수 있다.
단순히 인터넷이 안 된다고 해서 모두 DNS 문제는 아닙니다. IP 통신이 되는지 먼저 확인한 뒤 DNS를 점검하는 것이 중요합니다.
DNS Lookup Failed와 Connection Timed Out의 차이
| 항목 | DNS Lookup Failed | Connection Timed Out |
|---|---|---|
| 문제 위치 | DNS 조회 | TCP 연결 |
| 원인 | 이름 해석 실패 | 서버 응답 없음 |
| IP Ping | 가능 | 가능 또는 불가능 |
| 도메인 접속 | 실패 | DNS 성공 후 실패 |
DNS Lookup Failed는 도메인을 IP로 변환하지 못하는 문제, Connection Timed Out은 DNS 조회는 성공했지만 서버와 연결하지 못하는 문제입니다.
자주 묻는 질문
Ping 8.8.8.8은 되는데 google.com은 안 됩니다.
네트워크는 정상이며 DNS 설정 또는 DNS 서버 문제일 가능성이 매우 높습니다.
resolv.conf를 수정했는데 다시 원래대로 돌아옵니다.
NetworkManager나 systemd-resolved가 자동으로 파일을 다시 생성하는 경우가 있습니다. 해당 서비스의 설정도 함께 확인해야 합니다.
Docker 컨테이너에서만 DNS 오류가 발생합니다.
Docker Bridge Network 또는 컨테이너 내부의 /etc/resolv.conf 설정을 확인해야 합니다. Kubernetes에서는 CoreDNS Pod 상태도 함께 점검해야 합니다.
마무리
DNS Lookup Failed는 Linux 서버에서 가장 자주 발생하는 네트워크 오류 중 하나입니다. nslookup, dig, host, journalctl, /etc/resolv.conf 등을 활용하면 원인을 빠르게 분석할 수 있으며, DNS 서버 설정과 네트워크 연결 상태를 함께 점검하면 대부분의 문제를 해결할 수 있습니다.