서버이야기

RHEL에서의 DNS Cache, 그리고 systemd-resolved 이야기 2

지기(ZIGI) 2025. 11. 9. 19:39

 이번 포스팅은 지난 포스팅이었던 RHEL에서의 DNS Cache, 그리고 systemd-resolved 이야기 1 에서 다루지 못한 몇 가지 개념 내용을 몇 가지 정리해 보려고 합니다. 


glibc (GNU C Libriary)

  • 리눅스 시스템에서 대부분의 프로그램이 사용하는 표준 C 라이브러리
  • 대부분의 사용자 명령어(ping, ssh, curl 등)는 내부적으로 glibc를 통해 시스템 콜(System Call) 을 호출
    즉, 운영체제 커널과 애플리케이션 사이의 표준 인터페이스 계층 역할을 수행
  • getaddrinfo()는 glibc에 포함된 함수로, 내부적으로 NSS(Name Service Switch) 모듈을 호출하여
    이름 해석(Name Resolution, 이름 조회) 을 수행함

 

glibc NSS (Name Service Switch)

  • glibc의 하위 구성 요소로, 이름(name), 계정(account), 호스트(host) 등의  “데이터 조회 소스”를 제어하는 플러그인 시스템
  • 도메인 이름에 대한 호스트 이름 해석(Hostname Resolution) 또한 NSS 기능 중 하나로,  “어떤 데이터 소스(data source)를 어떤 순서로 사용할지”를 결정하는 모듈 체계
  • /etc/nsswitch.conf 파일을 읽어, hosts: 항목에 지정된 순서에 따라 호스트 이름 해석(Hostname Resolution)을 수행함
    이 때, hosts 뒤에 선언된 module이 호스트 이름 해석(Hostname Resolution)에 사용되는 데이터 소스(data source)가 됩니다.

 

nsswitch.conf 설정 예시 및 동작 순서

  • nssswitch.conf에서 도메인 이름에 대한 호스트 이름 해석(Hostname Resolution)에 사용되는 데이터 소스 설정 예시와 각 데이터 소스 모듈이 어떤 것을 의미하는지 정리해 보았습니다. 
  • 아래 예시에서는 resolve가 포함되어 있지만, RHEL의 기본 값에는 resolve는 포함되지 않습니다.
hosts: files resolve dns myhostname

 #glibc가 nsswitch.conf의 hosts에 정의된 순서대로 이름을 해석(hostname lookup), 즉 순차 처리
구분 내용
files /etc/hosts 파일에서 검색
resolve systemd-resolved에게 질의 (D-Bus 인터페이스)
dns /etc/resolv.conf에 정의된 네임서버로 직접 질의
myhostname 로컬 호스트명/루프백 해석

NSS (Name Service Switch)의 Action 

  • nsswitch.conf에 설정된 각 순서 사이에 [ ... ] 조건자(action modifier)를 넣으면, 다음 단계로 가기 위한 조건 제어 가능
  • 각 앞 모듈의 결과 상태(STATUS)에 따라, 후속 모듈을 어떻게 할지 ACTION을 지정
  • ACTION  문법
    • [STATUS=ACTION] : 지정된 STATUS일 때 해당 ACTION 수행
    • [!STATUS=ACTION] : 지정된 STATUS가 아닐 때 ACTION 수행 (!는 부정 의미)
  • STATUS 값
STATUS  내용 Default Action 예시
SUCCESS
해당 모듈에 접근 Ok, 정상적인 Query 결과 반환 됨
return 정상 응답 반환
NOTFOUND
해당 모듈에 접근 Ok, Query에 대한 값이 존재하지 않음
continue 해당 값이 존재하지 않음
UNAVAIL
해당 모듈에 접근 X
continue DNS 서버다운, systemd-resoved 서비스 다운, Socket 생성 실패 등

TRYAGAI 해당 모듈을 일시적으로 사용 못함 continue 서버 응답 지연, 일시적 Time-out, 재전송 대기 등
  • Action 값
ACTION 내용
RETURN 즉시 결과를 반환하고, 이후의 조회는 수행하지 않음.
CONTINUE 다음 조회 모듈로 넘어가서 추가 조회를 수행함.