DNS in detail

이원찬·2023년 12월 7일

Try Hack Me

목록 보기
1/14

What is DNS?

해석본

DNS(Domain Name System)은 복잡한 숫자를 기억할 필요 없이 우리가 인터넷 상의 장치와 소통할 수 있게 해줍니다. 모든 장소에는 고유의 주소가 있는것 처럼, 모든 컴퓨터는 인터넷에서 소통하기 위하여 고유한 주소를 가지고 있고, 이를 IP주소라고 합니다. IP 주소는 127.0.0.1 처럼 마침표를 기준으로 0~255 범위의 4자리 수로 나타냅니다. 유저가 웹사이트를 방문하는 것을 원할때, 이렇게 복잡한 숫자를 기억하는 것은 그다지 편리한 방법은 아닙니다. 이때 DNS가 도움을 줄수 있습니다. 따라서 127.0.0.1 을 기억하는 대신 다른 도메인 주소를 기억할 수 있습니다.


정리

각 컴퓨터는 자신의 고유 주소인 IP를 가지고 있습니다. IP는 0~255까지의 숫자가 마침표를 기준으로 나누어져 있습니다. ex) 127.0.0.1
하지만 인터넷에 연결 할때, 이 숫자를 다 외우는 것은 불편하니 이를 도와주는 DNS라는 친구가 있는데, 이 친구는 IP주소를 기억하는 대신에 도메인주소를 기억하게 해주어 더욱 편리하게 해줍니다.


Domain hierarchy

해석본

  • TLD(Top-Level Domain)
    TLD는 도메인 이름의 가장 오른쪽 부분입니다. 예를 들어 tryhackme.com의 TLD는 .com입니다. TLD에는 gTLD(Generic Top Level)과 ccTLD(Country Code Top level Domain)이렇게 두가지 유형이 있습니다. 역사적으로, gTLD는 유저에게 도메인의 이름의 목적을 알려기 위한 것이였습니다. 예를 들어 .com은 상업용, .org는 조직용, .edu는 교육용, .gov는 정부용으로 사용됩니다. 그리고 ccTLD는 지리적 목적으로 사용되었습니다. 예를 들어 .ca는 캐나다, .co.uk는 영국입니다. 이러한 수요로 인해, .online, .club, .website, .biz와 같은 새로운 gTLD가 유입되고 있습니다.
  • Second-Level Domain
    tryhackme.com으로 예를 들면, .com부분이 TLD이고 tryhackme가 Second-Level Domain입니다. 도메인 이름을 등록할때 Second-Level Domain은 63글자 + TLD로 제한되어 있습니다. 그리고 a-z 0-9와 하이픈(하이픈으로 시작하거나 끝나거나, 하이픈이 연속될수 없습니다.)만 사용할수 있습니다
  • Subdomain
    Subdomain은 Subdomain을 구분하기위해 마침표를 사용하며, Second-level Domain의 왼쪽에 위치하고 있습니다. 예를 들어 admin.tryhackme.com에서 admin부분이 Subdomain입니다. Subdomain은 Second-Level Domain과 같이 63자 이하로 작성 가능과 a-z 0-9 및 하이픈만사용할 수 있습니다. jupiter.servers.tryhackme.com과 같이 마침표로 구분된 여러가지 Subdomain을 사용해서 더욱 긴 이름을 만들 수 있습니다. 하지만 그 길이는 253자 이하여야 합니다. 도메인 이름에 대한 Subdomain의 수에는 제한이 없습니다.

정리

- TLD(TOP-Level Domain)
TLD는 도메인의 가장 오른쪽 부분에 위치해 있으며, gTLD(Generic Top Level)ccTLD(Country Code Top Level Domain) 이렇게 두가지의 유형으로 나눌수 있습니다.
gTLD는 .com .org .edu .gov와 같이 도메인 이름의 목적을 알리기 위하여 사용되고, .online .club .website .biz와 같은 새로운 gTLD가 유입되고 있습니다
ccTLD는 .ca .co.uk와 같이 지리적 목적으로 사용됩니다.

- Second-Level Domain
tryhackme.com에서 tryhackme부분이 Second-Level Domain입니다. 이것은 63글자 + TLD로 제한되어 있고, a-z 0-9와 하이픈만 사용할 수 있습니다.

- Subdomain
Subdomain은 admin.tryhackme.com에서 admin부분이며 Second-Level Domain의 왼쪽에 위치해 있습니다. Subdomain의 작성 제한은 Second-Level Domain와 일치하며, 도메인 이름에 대한 Subdomain의 수에는 제한이 없습니다.


DNS Record Types

해석본 / 정리

DNS는 웹사이트만을 위한 것이 아니며, 여러가지 DNS 레코드가 존재합니다. 여러분이 접할 수 있는 가장 일반적인 것 중 일부를 살펴보겠습니다.

  • A 레코드
    이 레코드는 IPv4(예: 104.26.10.229)로 확인됩니다.

  • AAAA 레코드
    이 레코드는 IPv6(예: 2606:4700:20::681a:be5)로 확인됩니다.

  • CHAME 레코드
    TryHackMe의 온라인 샵에는 CNAME 레코드 shop.shopify.com을 반환하는 서브도메인 이름 stor.tryhackme.com이 있습니다. 이러면 IP 주소를 계산하기 위해 shops.shopify.com에 또 다른 DNS 요청이 있을 것입니다.

  • MX 레코드
    이 레코드는 쿼리하는 도메인의 이메일을 처리하는 주소로 해결됩니다. 예를 들어 tryhackme.com에 대한 MX 레코드 응답은 alt1.aspmx.l.google.com 과 같습니다. 이러한 레코드에는 우선 순위 플래그도 함께 제공됩니다. 이는 서버를 시도하기 위해 메인 서버가 다운되고 이메일이 백업 서버로 전송되어야 하는 경우에 적합합니다.

  • TXT 레코드
    TXT 레코드는 텍스트 기반의 데이터를 저장할 수 없는 자유 텍스트 필드입니다. TXT 레코드는 여러 용도로 사용되지만 일부일반적인 도메인을 대신하여 이메일을 보낼 권한이 있는 서버를 나열하는것일 수 있습니다(스팸 및 수푸핑된 이메일과의 싸움에 도움이 될 수 있습니다). 또한 타사 서비스에 가입할 때 도메인 이름의 소유권을 확인하는 데 사용할 수 있습니다.


Making A Request

해석본

  • WHAT happens when you make a DNS request
    1. 도메인 이름을 요청할 때 컴퓨터는 먼저 로컬 캐시를 확인하여 최근에 주소를 검색했는지 확인하고, 검색하지 않은 경우 재귀 DNS 서버에 대한 요청이 수행됩니다.
    2. 재귀적 DNS 서버는 일반적으로 ISP에서 제공하지만 직접 선택할 수도 있습니다. 이 서버에는 최근에 검색한 도메인 이름의 로컬 캐시도 있습니다. 결과가 로컬에서 발견되면 이 캐시는 컴퓨터로 다시 전송되고 요청이 여기에서 종료됩니다(Google, Facebook, Twitter와 같이 인기 있고 요청이 많은 서비스의 경우 일반적입니다). 요청을 로컬에서 찾을 수 없으면 인터넷의 루트 DNS 서버에서 시작하여 정답을 찾는 여정이 시작됩니다.
    3. 루트 서버는 인터넷의 DNS 백본 역할을 하며, 요청에 따라 올바른 최상위 도메인 서버로 리디렉션되는 역할을 합니다. 예를 들어 www.tryhackme.com 을 요청하면 루트 서버는 .com의 최상위 도메인을 인식하고 .com 주소를 처리하는 올바른 TLD 서버를 참조합니다.
    4. TLD 서버는 DNS 요청에 응답할 수 있는 권한 있는 서버를 어디에서 찾을 것인지에 대한 기록을 보유하고 있습니다. 권한 있는 서버는 종종 도메인의 네임서버라고도 알려져 있습니다. 예를 들어, tryhackme.com 의 네임서버는 kip.ns.cloudflare.com 와 uma.ns.cloudflare.com 입니다. 도메인 이름이 다운될 경우 백업 역할을 할 여러 네임서버를 종종 찾을 수 있습니다.
    5. 권한 있는 DNS 서버는 특정 도메인 이름의 DNS 레코드를 저장하고 도메인 이름의 DNS 레코드를 업데이트하는 역할을 하는 서버입니다. 레코드 유형에 따라 DNS 레코드는 재귀적 DNS 서버로 다시 전송되며, 재귀적 DNS 서버에서 로컬 복사본이 나중에 요청을 위해 캐싱된 다음 요청을 한 원래 클라이언트로 다시 전달됩니다. DNS 레코드는 모두 TTL(Time To Live) 값과 함께 제공됩니다. 이 값은 응답을 다시 검색할 때까지 로컬에 저장해야 하는 시간(초)으로 표시됩니다. 캐싱을 사용하면 서버와 통신할 때마다 DNS 요청을 해야 하는 시간이 절약됩니다.

정리

DNS 요청을 할 때 수행되는 작업을 5가지로 정리해보면

  1. 도메인 이름을 요청할 때 컴퓨터는 최근에 주소를 검색했는지 확인하고, 검색을 안했을 경우 Recursive DNS Server에 요청을 보냅니다.
  2. Recursive DNS Server에는 도메인 이름의 로컬 캐시가 있습니다. 이 결과가 로컬에서 발견되면 이 캐시는 다시 컴퓨터로 전송되고, 요청이 여기에서 종료됩니다. 요청을 로컬에서 찾을 수 없으면 인터넷의 루트 DNS 서버에서 작업을 합니다.
  3. root serverDNS 백본의 역할을 하며, 요청에 따라 올바른 도메인 서버로 redirect합니다. TLD 서버를 참조하면 이해하기 쉬울거 같습니다.
  4. TLD 서버는 DNS 요청에 응답 권한이 있는 서버를 어디에서 찾을 것인가에 대한 기록을 가지고 있습니다. 권한이 있는 서버는 도메인의 nameserver 라고 불리기도 하며, 도메인 이름이 다운될 경우 백업 역할을 할 여러 sameserver를 찾을 수 있습니다.
  5. authoritative DNS server는 특정 도메인 이름의 DNS 레코드를 저장하고 도메인 이름의 DNS 레코드를 업데이트하는 역할을 합니다. 레코드 유형에 따라 Recursive DNS Server로 다시 전송이 되며, Recursive DNS Server에서는 로컬 복사본이 캐싱된 다음 요청을 한 클라이언트로 TTL값과 함께 다시 전달됩니다.
profile
개발과 보안을 공부하고 있습니다.

0개의 댓글