Ubuntu 사용자라면 누구나 한 번쯤 "도메인 이름은 안 되는데 IP로는 접속이 된다"는 상황을 겪어보셨을 겁니다. 이럴 때 문제의 원인은 대부분 DNS 설정에 있습니다. 특히 최근 Ubuntu는 systemd-resolved라는 DNS 리졸버 데몬을 기본으로 사용하기 때문에 구조에 대한 이해가 중요합니다.


1. DNS 요청의 흐름

아래의 요약을 주의깊게 읽어보시고 이해하시면 거의 모든 문제가 해결됩니다.

  1. 사용자가 브라우저 등 애플리케이션에서 도메인으로 요청
  2. 리눅스는 기본적으로 DNS를 풀어내기 위해서 /etc/resolv.conf를 읽음 (이 파일은 /run/systemd/resolve/stub-resolv.conf와 심볼릭링크 되어있음.)
  3. /run/systemd/resolve/stub-resolv.conf127.0.0.53으로 설정되어있으며, 이것으로 드디어 systemd-resolved 등장하게 됨.
  4. 시스템의 systemd-resolved는 셋팅파일인 /etc/systemd/resolved.conf의 통제를 받음
  5. 즉, systemd-resolved/etc/systemd/resolved.conf에서 설정한 DNS 서버에 질의를 하고,
  6. 응답을 받고 도메인 → IP 주소 변환 완료

2. 핵심 구성 요소 요약

위에서 설명했다시피 systemd-resolved에는 다음과 같은 4가지의 핵심 구성 파일이 있습니다. 이 파일들의 역할을 이해하는 것이 핵심입니다.

2-1. /etc/resolv.conf

  • 전통적인 리눅스 시스템에서 DNS 서버 목록을 읽는 위치
  • 그러나 현재는 systemd와의 호환성을 위해 심볼릭 링크로 존재해야 함
  • 보통 다음처럼 설정되어야 정상 작동: bash /etc/resolv.conf -> ../run/systemd/resolve/stub-resolv.conf
  • 즉, 이 파일은 현재 시스템에서 "전통적인 앱들과 systemd-resolved 사이의 중계자 역할"을 합니다

2-2. /run/systemd/resolve/stub-resolv.conf

  • systemd-resolved가 관리하는 로컬 DNS 스텁 서버(127.0.0.53) 정보를 담고 있음
  • /etc/resolv.conf가 이 파일을 가리킬 경우, 모든 DNS 요청이 systemd-resolved를 거치게 됨

2-3./etc/systemd/resolved.conf

  • systemd-resolved핵심 설정파일
  • 여기에 DNS=, FallbackDNS= 등의 항목을 설정하여 우선순위 지정 가능
  • 영구적 설정이며 재부팅 후에도 유지됨

2-4. /run/systemd/resolve/resolv.conf

  • systemd-resolved가 관리하는 실제 DNS 서버 리스트가 들어 있는 파일
  • 고급 사용자가 stub-resolv.conf 대신 이걸 /etc/resolv.conf로 연결하면 직접 DNS 서버로 요청 가능 (바이패스 설정)

3. 문제발생의 예 : ISP가 제공한 공유기에 설정된 DNS서버가 불안정할 경우

  • 대한민국의 대표적 ISP KT의 DNS 서버 (예: 168.126.63.1)가 공유기에 설정되어있으나, 내가 그 공유기를 직접 컨트롤 할 권한이 없는 경우에 간헐적으로 DNS 문제가 발생한다.
  • KT DNS는 응답 속도가 불안정하거나, UDP/TCP 핸드셰이크가 실패하는 경우가 많음
  • systemd-resolved 로그에 다음과 같은 메시지가 반복되면 문제 징후: Using degraded feature set TCP instead of UDP for DNS server 168.126.63.1. Using degraded feature set UDP instead of TCP for DNS server 168.126.63.1.
  • 결과적으로 도메인 해석 실패 → 웹사이트 접속 불가 현상 발생

4. 추천 DNS 서버

이름 주소 특징
Google DNS 8.8.8.8, 8.8.4.4 빠르고 안정적
Cloudflare DNS 1.1.1.1, 1.0.0.1 속도 빠르고 개인정보 보호 우수
Quad9 9.9.9.9 보안 위협 필터링 제공

5. 안정적인 DNS 구성 방법

  1. /etc/systemd/resolved.conf 파일 열기
[Resolve]
DNS=1.1.1.1 8.8.8.8
FallbackDNS=9.9.9.9
  1. 설정 적용
sudo systemctl restart systemd-resolved
  1. /etc/resolv.conf가 올바르게 연결되었는지 확인
ls -l /etc/resolv.conf

/run/systemd/resolve/stub-resolv.conf로 연결되어야 함

필요 시 강제로 재설정:

sudo ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf

6. NetworkManager의 개입 주의

GUI 환경을 사용하는 Ubuntu는 NetworkManager가 DNS를 덮어쓰는 경우가 있음

  • 자동 DNS 설정이 켜져 있으면 systemd-resolved 설정이 무시될 수 있음
  • 해결 방법: bash nm-connection-editor → 연결 편집 → IPv4 탭 → 자동 DNS 끄기 → 수동 DNS 입력

7. 결론

  • KT DNS는 불안정성이 자주 보고되므로 사용을 지양하는 것이 좋습니다
  • systemd-resolved를 통한 DNS 구성은 우분투에서 안정성을 높이는 매우 강력한 방법입니다
  • 설정을 정확히 이해하고 적용하면, 도메인 해석 실패로 인한 스트레스를 줄일 수 있습니다

8. Jesse의 코멘트

이해에 기반한 설정이야말로 가장 강력한 보안이자 유지관리입니다. 이 글이 Ubuntu에서의 DNS 설정에 대해 헷갈려했던 분들께 실질적인 도움이 되기를 바랍니다.