DNS

메론보이·2024년 6월 4일

리눅스

목록 보기
12/17
post-thumbnail

DNS (Domain Name System) 이해하기

DNS는 도메인 이름을 IP 주소로 변환해 주는 시스템입니다. 사용자가 웹 브라우저에 URL을 입력하면, DNS가 해당 도메인 이름을 서버의 IP 주소로 변환해줍니다. 이를 통해 사용자는 쉽게 기억할 수 있는 도메인 이름을 사용하여 웹사이트에 접근할 수 있습니다.

DNS의 정의와 개념

  • DNS(Domain Name System): 도메인 이름을 IP 주소로 변환하는 시스템입니다.
  • 도메인 이름: 사람이 이해하기 쉬운 주소 (예: www.example.com).
  • IP 주소: 컴퓨터가 이해하는 네트워크 주소 (예: 192.0.2.1).

DNS 구조

DNS는 계층적 구조로 구성되며, 루트 DNS 서버, 최상위 도메인(TLD) DNS 서버, 권한 있는 DNS 서버, 캐싱 DNS 서버 등으로 이루어집니다.

  • 루트 DNS 서버: DNS 계층의 최상위 서버로, 모든 TLD 서버의 위치를 알고 있습니다.
  • TLD DNS 서버: .com, .org, .net 등과 같은 최상위 도메인의 DNS 정보를 관리합니다.
  • 권한 있는 DNS 서버(Authoritative DNS Server): 특정 도메인 이름에 대한 최종 정보를 제공합니다.
  • 캐싱 DNS 서버(Caching DNS Server): 최근 조회한 DNS 쿼리를 캐시에 저장하여 빠른 응답을 제공합니다.

각 구성 요소의 개념과 역할 및 기능

  • DNS 리졸버(DNS Resolver): 클라이언트 측에서 DNS 쿼리를 처리하여 DNS 서버에 전달합니다. 캐싱 기능이 있어 자주 조회하는 도메인에 대해 빠르게 응답할 수 있습니다.
  • DNS 서버: 도메인 이름과 IP 주소의 매핑 정보를 저장하고 제공하는 서버입니다.
  • 레코드(Record): DNS 서버에 저장되는 도메인 이름과 관련된 정보입니다. 여러 유형이 있습니다.
    • A 레코드: 도메인 이름을 IPv4 주소로 변환합니다.
    • AAAA 레코드: 도메인 이름을 IPv6 주소로 변환합니다.
    • CNAME 레코드: 도메인 이름을 다른 도메인 이름으로 변환합니다.
    • MX 레코드: 도메인의 메일 서버 정보를 제공합니다.
    • NS 레코드: 도메인의 권한 있는 DNS 서버 정보를 제공합니다.
    • TXT 레코드: 도메인과 관련된 임의의 텍스트 정보를 제공합니다.

DNS의 작동 원리

  1. 사용자가 웹 브라우저에 도메인 이름(www.example.com)을 입력합니다.
  2. 브라우저는 로컬 DNS 리졸버에 쿼리를 보냅니다.
  3. 로컬 DNS 리졸버는 캐시를 확인하여 이전에 조회한 정보가 있는지 확인합니다.
  4. 캐시에 없다면 루트 DNS 서버에 쿼리를 보냅니다.
  5. 루트 DNS 서버는 해당 TLD 서버(.com)의 주소를 리졸버에 제공합니다.
  6. 리졸버는 TLD 서버에 쿼리를 보냅니다.
  7. TLD 서버는 해당 도메인의 권한 있는 DNS 서버의 주소를 제공합니다.
  8. 리졸버는 권한 있는 DNS 서버에 쿼리를 보냅니다.
  9. 권한 있는 DNS 서버는 도메인 이름에 해당하는 IP 주소를 리졸버에 응답합니다.
  10. 리졸버는 IP 주소를 브라우저에 반환하고, 브라우저는 해당 IP 주소로 웹 서버에 접속합니다.

실제 사용 예시

웹사이트 접속 시

  1. 사용자가 "www.example.com"을 브라우저에 입력합니다.
  2. 브라우저는 DNS 리졸버에 "www.example.com"의 IP 주소를 요청합니다.
  3. 리졸버는 DNS 서버를 통해 도메인 이름을 IP 주소(예: 192.0.2.1)로 변환합니다.
  4. 브라우저는 IP 주소로 웹 서버에 접속하여 웹페이지를 로드합니다.

이메일 송수신 시

  1. 사용자가 "user@example.com"으로 이메일을 보냅니다.
  2. 메일 서버는 수신자의 도메인(example.com)의 MX 레코드를 조회하여 수신 메일 서버의 IP 주소를 얻습니다.
  3. 메일 서버는 해당 IP 주소로 메일을 전송합니다.

DNS의 재귀 쿼리와 순환 쿼리

  • 재귀 쿼리 (Recursive Query): 클라이언트가 DNS 리졸버에게 요청을 보내면, 리졸버가 최종 응답(IP 주소 등)을 찾아 클라이언트에게 반환하는 방식입니다. 리졸버는 필요한 경우 다른 DNS 서버들과 통신하며 모든 과정을 대신 처리합니다.

    • 클라이언트가 로컬 DNS 리졸버에게 쿼리를 보냅니다.
    • 로컬 DNS 리졸버는 루트 DNS 서버, TLD DNS 서버, 권한 있는 DNS 서버를 순차적으로 조회하여 최종 IP 주소를 찾습니다.
    • 리졸버는 최종 IP 주소를 클라이언트에게 반환합니다.
  • 순환 쿼리 (Iterative Query): 클라이언트가 직접 여러 DNS 서버에 순차적으로 쿼리를 보내며 최종 응답을 찾는 방식입니다. DNS 서버는 자신이 알고 있는 범위 내에서 응답하고, 필요한 경우 다른 서버의 주소를 클라이언트에게 반환합니다.

    • 클라이언트가 DNS 서버에게 쿼리를 보냅니다.
    • DNS 서버는 도메인 이름에 대한 IP 주소를 알고 있으면 응답합니다. 그렇지 않으면 다음 DNS 서버의 주소를 클라이언트에게 반환합니다.
    • 클라이언트는 제공된 다음 DNS 서버에 쿼리를 보냅니다.
    • 이 과정을 반복하여 최종 IP 주소를 찾습니다.

DNS의 동작 방식

DNS는 계층적이고 분산된 시스템으로 작동하며, 도메인 이름을 IP 주소로 변환하는 과정을 거칩니다.

  1. 사용자가 도메인 이름을 입력: 사용자가 브라우저에 도메인 이름(예: www.example.com)을 입력합니다.
  2. 로컬 DNS 리졸버 조회: 브라우저는 로컬 DNS 리졸버에 도메인 이름의 IP 주소를 요청합니다.
  3. 캐시 확인: 로컬 DNS 리졸버는 캐시에 해당 도메인 이름의 IP 주소가 있는지 확인합니다.
  4. 재귀 쿼리 수행:
    • 루트 DNS 서버 조회: 리졸버는 루트 DNS 서버에 도메인 이름의 IP 주소를 요청합니다.
    • TLD DNS 서버 조회: 루트 DNS 서버는 해당 TLD(.com) 서버의 주소를 반환합니다.
    • 권한 있는 DNS 서버 조회: 리졸버는 TLD DNS 서버에 쿼리를 보내고, 권한 있는 DNS 서버의 주소를 반환받습니다.
    • 최종 IP 주소 조회: 리졸버는 권한 있는 DNS 서버에 쿼리를 보내 최종 IP 주소를 받습니다.
  5. 응답 반환: 로컬 DNS 리졸버는 최종 IP 주소를 클라이언트(브라우저)에 반환합니다.
  6. 웹 서버 접속: 브라우저는 반환받은 IP 주소로 웹 서버에 접속합니다.

정방향 조회와 역방향 조회

  • 정방향 조회 (Forward Lookup): 도메인 이름을 IP 주소로 변환하는 과정입니다.
    • 예: www.example.com → 192.0.2.1
  • 역방향 조회 (Reverse Lookup): IP 주소를 도메인 이름으로 변환하는 과정입니다. 역방향 조회를 위해서는 PTR(포인터) 레코드가 사용됩니다.
    • 예: 192.0.2.1 → www.example.com

DNS 캐시

DNS 캐시는 DNS 리졸버가 이전에 조회한 쿼리 결과를 일정 기간 동안 저장하여 재사용하는 메커니즘입니다. 이는 네트워크 트래픽을 줄이고, 쿼리 응답 시간을 단축시킵니다.

  • TTL(Time To Live): 각 DNS 레코드는 TTL 값을 가지며, 이 값은 레코드가 캐시에 유지되는 시간을 지정합니다. TTL이 만료되면 캐시에서 제거됩니다.
  • 성능 향상: 캐시는 자주 조회되는 도메인에 대해 빠른 응답을 제공하여 성능을 향상시킵니다.
  • 부하 감소: 캐시는 DNS 서버의 부하를 줄이고 네트워크 트래픽을 감소시킵니다.

BIND 설정에서의 정방향 조회 존 파일 설정

정방향 조회 존 파일은 도메인 이름을 IP 주소로 변환하는 데 사용됩니다. 예를 들어, www.example.com을 192.0.2.3으로 변환합니다.

방향 조회 존 파일 예시

존 파일 위치: 일반적으로 /etc/bind 디렉토리 아래에 존 파일이 위치합니다.

$TTL 86400
@   IN  SOA     ns1.example.com. admin.example.com. (
                2024060401 ; Serial
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400 )    ; Minimum TTL

    IN  NS      ns1.example.com.
    IN  NS      ns2.example.com.

ns1 IN  A       192.0.2.1
ns2 IN  A       192.0.2.2
www IN  A       192.0.2.3

정방향 조회 존 파일 설명

  • $TTL 86400: 레코드의 기본 TTL 값은 86400초(1일)입니다.
  • @ IN SOA ns1.example.com. admin.example.com. (...): ns1.example.com이 이 존의 권한 있는 DNS 서버이며, 관리자는 admin@example.com입니다.
    • Serial: 존 파일의 버전 번호입니다. 변경 시 이 값을 증가시켜야 합니다.
    • Refresh: 세컨더리 서버가 존 파일을 갱신하는 주기입니다(초 단위).
    • Retry: 세컨더리 서버가 존 파일 갱신에 실패한 경우 다시 시도하는 주기입니다(초 단위).
    • Expire: 세컨더리 서버가 존 파일을 유효하다고 간주하는 기간입니다(초 단위).
    • Minimum TTL: 최소 TTL 값입니다.
  • IN NS ns1.example.com.: ns1.example.com이 네임 서버입니다.
  • IN NS ns2.example.com.: ns2.example.com이 두 번째 네임 서버입니다.
  • ns1 IN A 192.0.2.1: ns1.example.com의 IP 주소는 192.0.2.1입니다.
  • ns2 IN A 192.0.2.2: ns2.example.com의 IP 주소는 192.0.2.2입니다.
  • www IN A 192.0.2.3: www.example.com의 IP 주소는 192.0.2.3입니다.

BIND 설정에서의 역방향 조회 존 파일 설정

역방향 조회 존 파일은 IP 주소를 도메인 이름으로 변환하는 데 사용됩니다. 예를 들어, 192.0.2.3을 www.example.com으로 변환합니다.

역방향 조회 존 파일 예시

역방향 존 파일 위치: 일반적으로 /etc/bind 디렉토리 아래에 위치합니다.

$TTL 86400
@   IN  SOA     ns1.example.com. admin.example.com. (
                2024060401 ; Serial
                3600       ; Refresh
                1800       ; Retry
                604800     ; Expire
                86400 )    ; Minimum TTL

    IN  NS      ns1.example.com.
    IN  NS      ns2.example.com.

1   IN  PTR     ns1.example.com.
2   IN  PTR     ns2.example.com.
3   IN  PTR     www.example.com.

역방향 조회 존 파일 설명

  • $TTL 86400: 레코드의 기본 TTL 값은 86400초(1일)입니다.
  • @ IN SOA ns1.example.com. admin.example.com. (...): ns1.example.com이 이 존의 권한 있는 DNS 서버이며, 관리자는 admin@example.com입니다.
    • Serial: 존 파일의 버전 번호입니다. 변경 시 이 값을 증가시켜야 합니다.
    • Refresh: 세컨더리 서버가 존 파일을 갱신하는 주기입니다(초 단위).
    • Retry: 세컨더리 서버가 존 파일 갱신에 실패한 경우 다시 시도하는 주기입니다(초 단위).
    • Expire: 세컨더리 서버가 존 파일을 유효하다고 간주하는 기간입니다(초 단위).
    • Minimum TTL: 최소 TTL 값입니다.
  • IN NS ns1.example.com.: ns1.example.com이 네임 서버입니다.
  • IN NS ns2.example.com.: ns2.example.com이 두 번째 네임 서버입니다.
  • 1 IN PTR ns1.example.com.: 192.0.2.1의 도메인 이름은 ns1.example.com입니다.
  • 2 IN PTR ns2.example.com.: 192.0.2.2의 도메인 이름은 ns2.example.com입니다.
  • 3 IN PTR www.example.com.: 192.0.2.3의 도메인 이름은 www.example.com입니다.

BIND 설정 파일 통합

BIND 설정 파일은 named.conf 파일에 존 파일을 정의하여 통합됩니다.

named.conf 예시

options {
    directory "/etc/bind";
};

zone "example.com" {
    type master;
    file "/etc/bind/db.example.com";
};

zone "2.0.192.in-addr.arpa" {
    type master;
    file "/etc/bind/db.192.0.2";
};

named.conf 설명

  • options { directory "/etc/bind"; };: 존 파일의 기본 디렉토리를 /etc/bind로 설정합니다.
  • zone "example.com": example.com 도메인에 대한 정방향 조회 존을 정의합니다.
    • type master;: 이 서버가 권한 있는 서버임을 나타냅니다.
    • file "/etc/bind/db.example.com";: 존 파일의 위치를 지정합니다.
  • zone "2.0.192.in-addr.arpa": 192.0.2.0/24 네트워크에 대한 역방향 조회 존을 정의합니다.
    • type master;: 이 서버가 권한 있는 서버임을 나타냅니다.
    • file "/etc/bind/db.192.0.2";: 존 파일의 위치를 지정합니다.

이와 같이, BIND 설정 파일을 통해 도메인 이름을 IP 주소로 변환하는 정방향 조회와 IP 주소를 도메인 이름으로 변환하는 역방향 조회를 설정할 수 있습니다. 각 존 파일에는 SOA, NS, A, PTR 레코드가 포함되어 있으며, 이를 통해 DNS 서버가 도메인 이름과 IP 주소 간의 매핑을 수행할 수 있습니다.

DNS 시스템은 도메인 이름을 IP 주소로 변환하거나, 그 반대로 변환하는 중요한 역할을 수행합니다. 캐시를 통해 성능을 최적화하고, 재귀와 순환 쿼리를 통해 효율적으로 작동합니다. 이를 통해 네트워크 통신의 기본을 제공하며, 다양한 서비스와 애플리케이션에서 활용됩니다.

0개의 댓글