포스트

DNS(Domain Name System)

DNS(Domain Name System)

DNS(Domain Name System)

DNS(Domain Name System)란?

DNS(Domain Name System)는 도메인 이름(예: google.com)을 IP 주소(예: 142.250.190.78)로 변환하는 시스템이다. 인터넷에서 웹사이트에 접속할 때 사람이 기억하기 쉬운 도메인 주소를 입력하면, DNS가 해당 도메인의 실제 서버 IP 주소를 찾아준다.

DNS가 필요한 이유

  1. IP 주소 대신 도메인을 사용할 수 있음 → 사용자가 172.217.161.206 대신 google.com을 입력하면 DNS가 자동으로 변환해준다.
  2. IP 주소 변경 시에도 동일한 도메인 유지 가능 → 서버 IP가 바뀌어도 DNS 레코드만 변경하면 된다.
  3. 분산 구조로 빠른 응답 가능 → 계층적으로 분산되어 있어서 빠르고 안정적인 네트워크 제공한다.

DNS 동작 과정

  1. 사용자가 웹사이트 접속 시도s
    • 브라우저에서 www.google.com을 입력하고 접속
  2. 브라우저가 캐시(Cache) 확인
    • 먼저 로컬(컴퓨터, 브라우저, OS)에 저장된 DNS 캐시를 확인
    • 캐시에 IP 주소가 있다면 바로 해당 IP로 연결 (DNS 요청 불필요)
    • 없다면 다음 단계 진행
  3. Hosts 파일 확인
    • 운영체제(OS)에는 hosts 파일이라는 것이 있으며, 여기에 특정 도메인의 IP 주소를 직접 지정할 수 있다.
    • hosts 파일을 확인하여 해당 도메인의 IP 주소가 등록되어 있다면, DNS 조회 없이 해당 IP로 연결된다.
    • 일반적으로 hosts 파일은 다음 경로에 있다.
      1
      2
      
       Windows: C:\Windows\System32\drivers\etc\hosts
       Mac/Linux: /etc/hosts
      
    • MAC으로 호스트 파일 등록해보기

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      
      // 상황 : isGoogle.com을 치면 내 깃허브 아이피 주소를 반환하게 설정할 예정
      1. 내 깃허브 아이피 주소를 확인하기
        - ping https://imkh817.github.io를 입력하여 IP 확인
        - 결과 : PING https://imkh817.github.io (185.199.109.153): 56 data bytes
      2. sudo nano /etc/hosts 입력하여 hosts 파일 수정 준비
      3. 185.199.109.153 isGoogle.com 을 입력 후 ctrl+X -> Y -> Enter 입력
      4. 반영되도록 DNS 캐시 삭제
        - sudo dscacheutil -flushcache 입력
        - sudo killall -HUP mDNSResponder 입력
      5. 이제 isGoogle.com으로 ping 보내 확인해보기
        - 결과 : PING isgoogle.com (185.199.109.153): 56 data bytes
      
      • 개발 환경에서 특정 도메인을 로컬 서버로 연결하거나, 특정 사이트 접속을 차단하는 용도로 사용 가능하다.
  4. 로컬 DNS 서버(Recursive Resolver) 조회
    • hosts 파일에도 없으면, 보통 인터넷 제공업체(ISP)의 DNS 서버에 요청한다.
    • 해당 DNS 서버도 캐시를 가지고 있으며, 캐시에 있으면 바로 응답한다.
    • 없다면 DNS 계층 구조를 따라 추가 요청 수행한다.
  5. 계층적 네임 서버 조회 (DNS 계층 구조)
    • 만약 로컬 DNS 서버에도 캐시가 없다면, 다음 순서대로 DNS 서버를 조회한다.
  • (1) 루트 네임 서버(Root DNS)
    • 최상위 DNS 서버 (전 세계에 13개 존재, .으로 표현됨)
    • 사용자가 요청한 도메인의 최상위 도메인(TLD, .com, .org, .kr 등) 담당 서버를 알려준다.
  • (2) TLD 네임 서버 (Top-Level Domain)
    • .com, .net, .org, .kr 같은 최상위 도메인(TLD) 관리한다.
    • google.com 요청 시, .com을 관리하는 TLD 네임 서버로 요청 전달한다.
  • (3) 권한(Authoritative) 네임 서버
    • 특정 도메인(예: google.com)의 IP 주소를 실제로 관리하는 서버이다.
    • google.com의 IP 주소를 최종적으로 응답한다.
  1. 브라우저가 IP 주소를 받아 웹사이트 접속
    • DNS 서버로부터 받은 IP 주소로 브라우저가 웹사이트 접속한다.
    • 해당 IP 주소를 캐시에 저장하여 다음 요청 시 빠르게 처리한다.

DNS 캐싱과 TTL(Time To Live)

DNS 조회를 속도를 높이기 위해 DNS 캐싱(DNS Caching)이 사용된다. DNS 응답에는 TTL(Time To Live) 값이 포함되며, 이 TTL 시간이 지나야 새로운 IP를 조회한다.

예시 :

  • google.com의 TTL이 300초 (5분)이면, 5분 동안 캐시된 값을 사용한다.
  • TTL이 짧으면 변경이 빠르지만 트래픽 증가, TTL이 길면 트래픽 감소하지만 변경 반영이 느리다.

DNS 요청 방식 (재귀 vs 반복)

DNS 조회 방식에는 재귀(Recursive) 조회와 반복(Iterative) 조회 두 가지 방식이 있다.

  1. 재귀 조회(Recursive Query)
    • 클라이언트가 로컬 DNS 서버(Recursive Resolver)에게 요청하면, 이 서버가 필요한 모든 추가 조회를 수행한 후 최종 IP 주소를 클라이언트에게 반환한다.
    • 클라이언트는 한 번의 요청만 보낸다. 재귀 조회
  2. 반복 조회(Iterative Query)
    • 클라이언트가 직접 루트 네임 서버 → TLD 네임 서버 → 권한 네임 서버 순으로 반복해서 질의한다.
    • 일반적으로 사용자는 로컬 DNS 서버에게 재귀 요청을 보내고, 로컬 DNS 서버는 반복 요청을 수행하는 방식이다. 반복 조회

      DNS 레코드 유형

      DNS 레코드 유형

  • 예제 : 아래 그림을 해석해보기 DNS 예제2
    • 11.22.33.44의 IP주소는 example.com에 대응되어있고, DNS 캐시 저장은 300초이다.
    • example.com이라는 도메인 이름을 www.example.com이라는 별칭으로 사용하겠다.

DNS의 문제점과 해결 방법

  1. DNS 프로퍼게이션(DNS Propagation) 지연
    • DNS 설정을 변경해도 전 세계 DNS 서버가 변경 사항을 반영하는 데 시간이 걸린다.
    • TTL이 길다면 변경 사항이 최대 48시간까지 반영되지 않을 수도 있다.
    • 해결 방법: TTL을 낮추고 변경 후 다시 높이기
  2. DNS 스푸핑(DNS Spoofing)
    • 공격자가 가짜 DNS 응답을 보내 사용자를 피싱 사이트로 유도
    • 해결 방법: DNSSEC (DNS Security Extensions) 사용
  3. ISP의 DNS 서버가 느릴 경우
    • 기본 ISP DNS가 느릴 수 있음
    • 해결 방법: 공개 DNS 서버 사용
      • Google DNS → 8.8.8.8, 8.8.4.4
      • Cloudflare DNS → 1.1.1.1, 1.0.0.1
      • OpenDNS → 208.67.222.222, 208.67.220.220
이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.