본문 바로가기

카테고리 없음

Linux에서의 이름 해석(Name Resolution) 경로 이해하기

Today Keys : linux, name, resolution, domain, query, dns, ip, glibc, nss, resolver, 질의


리눅스(Linux)의 이름 해석(Name Resolution) 경로

구분 내용 동작 방식
시스템 해석기 경로 gblic + NSS(Name Service Switch) 운영체제의 표준 경로로, /etc/nsswitch.conf 규칙에 따라서 지정된 순서대로 질의 수행
DNS 직접 질의 라이브러리에서 자체 질의 수행 운영체제 표준 경로와 상관 없이, /etc/resolv.conf에 선언된 DNS 서버로 직접 질의 수행

 

시스템 해석기 경로 (glibc + NSS)

  • 운영체제의 공식 이름 해석(Name Resolution) 체계
  • /etc/nsswitch.conf 파일의 hosts: 항목에 따라 이름 해석(Name Resolution)을 수행
  • hosts 항목 작성 예시 및 항목 설명

    hosts: files resolve dns myhostname

     #glibc가 nsswitch.conf의 hosts에 정의된 순서대로 이름을 해석(hostname lookup), 즉 순차 처리

    구분 내용
    files /etc/hosts 파일에서 검색
    resolve systemd-resolved에게 질의 (D-Bus 인터페이스)
    dns /etc/resolv.conf에 정의된 네임서버로 직접 질의
    myhostname 로컬 호스트명/루프백 해석

 

DNS 직접 질의

  • Application, Runtime에서 glibc NSS를 우회하고, 직접 /etc/resolv.conf 에 설정된 Name Server로 질의하기도 함.
  • /etc/resolv.conf 를 직접 질의하는 예
    • Node.js : dns.resolve()
    • GO : cgo 비활성
    • Python + dnspython
    • nginx : resolver 지시자 사용시

 

 

리눅스(Linux)의 이름 해석(Name Resolution) 경로에 따른 발생 가능 이슈

  • 시스템 해석기 경로(glibc+NSS)가 아닌 DNS 직접 질의를 하는 경우에는 '/etc/hosts' 에 설정한 값이 적용되지 않기 때문에 동일한 도메인에 대한 결과 값이 상이하거나, 아예 질의가 안될 수 있음(Ex. '/etc/hosts' 에서만 적용한 개발용 도메인)
  • DNS Cache를 적용이 되지 않음

리눅스(Linux)의 이름 해석(Name Resolution) 경로 이슈 대응

  • /etc/resolv.conf 를 stub(127.0.0.53)으로 설정
    ln -sf /run/systemd/resolve/stub-resolv.conf /etc/resolv.conf 
    
    #systemd-resolved의 stub-resolv를 stub으로 사용
    #/run/systemd/resolve/resolv.conf 에 upstream dns 설정
    # /etc/resolv.conf는 NetworkManager를 통해서도 관리되기 때문에
    # /etc/NetworkManager/NetworkManager.conf 에서 dns=none 혹은 dns=systemd-resolved 옵션을 지정


  • Application 설계 시, DNS 직접 질의를 하지 않도록 설계 필요