
📖 목차
🔎 TLD?
TLD란 Top Level Domain의 약자로서, DNS 계층구조의 루트 도메인(Root Domain), 최상위 도메인(Top-Level Domain), 2단계 도메인 (Second-Level Domain)에 속한 요소중 하나이다.
일반적으로 흔히 보이는 TLD는 .com .net. org가 있거나 국가 코드 TLD는 .kr .us .tv(트위치 주소의 그 tv가 맞다. tv는 오세아니아에 위치한 투발루라는 국가의 코드명이다.)와 같은 국가나 지역을 나타내거나, 현재 이 블로그의 접속한 banseok.dev(혹은 banseok-dev.work)와 같은 주소 또한 .dev .work .blog .io 같은 new gTLDs에 속한다.
이러한 TLD는 DNS 쿼리를 조회하는 과정중 DNS 계층 순서에 따라 조회하게 될때 사용된다.
💡 TLD에도 예약어가 있다!
C/C++의 struct, void, int, return과 같은 프로그래밍 문법의 예약어나 Windows의 CON, PRN 등의 예약어처럼 TLD에도 예약어로 사용되는 TLD가 존재한다.
TLD 예약어는 IANA(Internet Assigned Numers Autority)가 관리하며, 숫자를 매긴 RFC(Request For Comments)라는 문서를 통해 예약된 TLD에 대해 기술하고 있다.
이러한 TLD 예약어는 .com .net TLD를 구매하여 점유해서 사용하는 것과 달리 TLD를 구매할 수도 없으며, 전세계에 연결된 네트워크 상에서 독점적으로 점유하여 사용할 수 없다.1
예약된 TLD는 주로 내부망을 관리하거나 테스트를 위해 사용되거나 DNS를 제공하기 위한 목적으로 사용된다. 물론, onion처럼 특정한 네트워크를 위해 사용되는 TLD도 있다.
📌 IANA 예약된 TLD
현재 예약된 IANA에서 관리하는 TLD를 간단한 설명도 같이 덧붙여 다음과 같이 나열한다.
.arpa
DNS 서버를 구성하다보면 역방향 NDS 조회로 자주 보게 되는 도메인이다. 과거 ARPANET의 흔적이 남은것으로 ARPANET의 Host를 현재의 DNS 시스템으로 이전하는 과정 중 사용하였으며, 목적이 완료되고도 경로 의존성이 되어 현 DNS 인프라 시스템의 한 축이 되었다.2
.alt
DNS 시스템 보호를 위한 DNSSEC 도입 이후 잠재적으로 발생할 수 있는 이름 충돌(name collision)을 시뮬레이션하기 위해 사용하거나, DNS 리졸버 및 캐시 서버 테스트를 진단할 때 사용되는 목적으로 사용되는 도메인이다.
.example
보통 메뉴얼이나 가이드에서 예시로 기재하는 경우가 많다. 실제로 사용되는 도메인은 아니며 예시로서 사용되는 것이 일반적이다.
.invalid
DNS 쿼리 방지를 위한 TLD로서, 잘못된 도메인을 루트 DNS로 쿼리하지 못하도록하며, 매뉴얼이나 가이드에서도 잘못된 도메인에 대한 예시로서 사용된다.
.local
멀티캐스트(Multicast) DNS를 위한 도메인으로서, Apple Bonjour3와 리눅스 Avahi와 같은 서비스들이 수동 설정 없이 내부 네트워크(서브넷)의 호스트를 자동으로 찾아 등록해주는것을 위한 도메인이다.
.localhost
127.0.0.1(IPv4), ::1(IPv6)와 같은 루프백 주소의 매핑으로 사용되는 도메인이다. 개발자들에게 익숙한 도메인으로, http://localhost/ 와 같은 웹 주소나 터미널에서 ping localhost와 같은 형식으로 자주 사용되는 도메인이다.
.test
말 그대로 테스트를 위한 도메인으로, 내부망에서 테스트를 위한 도메인으로서 사용된다.
.internal
.local 도메인을 mDNS 시스템과 혼재된 내부망에서 사용하다가 발생하는 이름 충돌에 대한 문제점을 시작으로 내부 네트워크 관리를 위해 선택된 TLD이다. 내부 네트워크에 존재하는 호스트 이름을 관리해야한다면 .local 대신 .internal 도메인을 사용하자.
.onion
토르 네트워크에서 사용되는 도메인 이름이다. 일반 사용자가 임의로 도메인을 선택할 수 없으며, 익명성과 보안을 위해 암호화 처리되어 생성된 도메인 주소가 부여되는 방식이다.
⚠️ 예약된 TLD를 사용할 때 주의점
위에서 기재한 예약된 TLD들은 사용할 때 주의점이 있다. 당연하게도 위에 간략하게 설명한 목적 이외에 사용은 금지된 사항이다. .local 도메인의 경우 mDNS를 사용하는 인프라내에서 각 호스트들끼리 충돌할 가능성도 있으며, 애초에 mDNS를 이용해 인프라를 구축해서 사용하라는 도메인이다. 내부망 인프라를 구축할 경우 .internal 도메인을 사용하자.
또한, 잘못된 TLD를 사용했을 경우 보안적으로 취약해질 수 있다.4 내부망의 DNS가 우연하거나 불의로 유출되었을 경우 DNS 스푸핑과 같은 공격에 노려질 수 있다. 그리고 예측 불가능한 범위를 넘어서 해당 도메인을 사용한 호스트의 도메인 네임이 어떻게 사용될지 모르게 된다.
마지막으로 당연하지만, 내부망에서 현재 IANA가 관리하는 TLD를 사용해서는 당연히 안된다. 이 부분도 보안적인 위협과 통제불가능 상황에 놓이게 되는 점을 기억해야한다.
🪄 .local & .internal 어떻게 사용해야 할까?
이 글을 쓰게 된 이유인 .local과 .internal TLD는 기존 mDNS를 지원하느 호스트와 지원하지 않는 호스트끼리 .local을 사용하는 혼재된 환경으로 인해 .internal TLD가 등장하게된 배경이 되었다. 이 두 도메인인 .local과 .internal을 구분해서 사용하는 방법은 정말 간단하다.
case 1) mDNS를 사용하는 호스트는 .local 도메인을 사용하면 된다.
case 2) mDNS를 사용하지 않는 호스트는 .internal 도메인을 사용하면 된다.
호스트가 mDNS를 지원하는 기준으로 나누어 판단하면 쉽게 나누어 판단할 수 있다. 물론, .internal 도메인을 설정한 호스트에서 mDNS를 사용하지 않다가, 이후 mDNS를 사용하게 되면 .local로 도메인을 변경해야 되는 점은 주의하자. 당연히, 내부 DNS 서버를 구축해서 사용한다면, 해당 DNS 서버 zone 파일 수정해야하고 다른 host에서 해당 host에 연결되어 있으면 이 부분도 수정이 필요하게 될 것이다.
📒 여담
사실 기존에 내부망에 존재하는 여러 Host를 관리할 때, .local 도메인을 주로 사용하다가 이걸 사용하는게 괜찮은지에 대한 의문으로부터 정보를 찾아보던 중 문제가되는 상황이라는걸 인지하고 알아보게 되었다. 특히 .internal 도메인은 2024년 7월 29일 Special Meeting of the ICANN Board 회의에서 결정되어 이제야 겨우 1년 지난 도메인이여서 알기 어려웠던 부분도 있다.
.internal TLD에 대한 소개도 하는 겸 다른 예약된 TLD를 정리하는 글을 쓰게 되었다.
- .onion과 같은 토르 네트워크도 암호화를 기반한, 사용자가 임의로 생성할 수 없이 자동으로 생성되는 주소이다. ↩︎
- RFC 921 – October 1984 – Domain Implementation Schedule – Revised https://www.rfc-editor.org/rfc/rfc921.txt ↩︎
- 예전 Windows용 iTunes를 사용하던 사용자라면 기억할 것이다. 또한, Apple 생태계에서 깊숙하게 네트워크를 다룬다면 어느정도 인지하고 있을 것이다. ↩︎
- 특히, 현재 최상위로 이미 등록된 TLD(.com .net과 같은)를 사용할 경우 정말로 위험해질 수 있다. 이미 준비된 TLD는 사용전 항상 조심해야한다. ↩︎