[DNS 개념과 실습] 내부망 구성부터 레코드 이해까지

2025. 6. 9. 17:02·네트워크
728x90
반응형

DNS란 무엇인가?

DNS는 도메인 이름을 IP 주소로 변환해주는 시스템이다. 예를 들어, 우리가 www.google.com을 입력하면 DNS는 그걸 142.250.xxx.xxx 같은 IP로 바꿔주게된다. 해당 과정이 없으면 우리는 모두 ip주소를 외워서 접근을 해야만 한다.


도메인의 구조 (FQDN)

DNS에서 쓰이는 도메인 이름은 계층적으로 구성되어있다. 가장 오른쪽이 루트, 그리고 Top Level Domain (TLD), Second Level Domain (SLD), 마지막으로 호스트 이름 순으로 이어진다.

FQDN(Fully Qualified Domain Name)

우리가 흔히 쓰는 www.google.com 같은 주소는 사실 계층 구조로 되어 있다.
이걸 DNS 용어로 FQDN (Fully Qualified Domain Name)이라고 부르는데, 각 부분은 아래처럼 나뉜다:

[host].[SLD].[TLD].(root)

ex)
[www].[google].com.(root)
구분 예시 설명
Root . 전세계 루트 도메인 (A~M까지 13개 루트 서버 존재)
TLD com, org, io 등 최상위 도메인
SLD google, naver 등 도메인을 소유한 주체
Host www, mail 등 실제 서비스 위치

주요 DNS 레코드 종류

레코드 용도 예시
A 호스트 이름을 IPv4 주소로 매핑 www → 10.0.8.3
MX 메일 서버를 지정 @ → mail.labs.local
CNAME 별칭 지정 (Canonical Name) ftp → www
NS 이 도메인을 관리하는 네임서버 labs.local → ns.labs.local
SOA 도메인 존 정보의 시작점 (권한 보유 정보) labs.local. root.labs.local.

DNS 통신 포트 정리

이전내용의 dhcp까지 포함해 서비스의 주요 포트를 알아보자.

서비스 프로토콜 포트 용도
DNS UDP 53 질의 및 응답
DHCP UDP 67 서버 수신 포트
DHCP UDP 68 클라이언트 송신 포트

혹시 방화벽 설정에서 막혀있다면 내부 dns서버를 구성해도 응답이 이루어지지 않는다.

[네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리


DNS 내부망 서버 구성해보기

bind9 설치

sudo apt update
sudo apt install bind9 bind9utils bind9-doc -y

bind9은 DNS 네임서버를 구축하고 레코드를 관리할 수 있도록 도와주는 패키지.

/etc/bind/named.conf.options

해당 파일을 열어 아래 내용을 추가한다.

# vi /etc/bind/named.conf.options

options {
  directory "/var/cache/bind";
  recursion yes;
  dnssec-validation no;
  allow-query { 10.0.8.0/24; };        # 해당 ip의 요청만 허용
  listen-on port 53 { any; };
  listen-on-v6 { any; };
};

/etc/bind/named.conf.local

# vi /etc/bind/named.conf.local

zone "labs.local" {
  type master;
  file "/etc/bind/db.labs.local";
};

/etc/bind/db.labs.local

# vi /etc/bind/db.labs.local

$TTL 604800
@ IN SOA labs.local. root.labs.local. (
  2 ; Serial
  604800 ; Refresh
  86400 ; Retry
  2419200 ; Expire
  604800 ) ; Negative Cache TTL
@ IN NS ns
ns IN A 10.0.8.3
www IN A 10.0.8.3
mail IN A 10.0.8.3
@ IN MX 10 mail
# DNS 서버 설정 확인
named-checkconf

# Zone 파일 구문 확인
named-checkzone labs.local /etc/bind/db.labs.local

# DNS 서비스 재시작
systemctl restart named

# DNS 서비스 상태 확인
systemctl status named

클라이언트 DNS 설정 (netplan + systemd-resolved)

netplan 설정

# vi /etc/netplan/50-cloud-init.yaml

network:
  version: 2
  ethernets:
    ens160:
      dhcp4: true
      nameservers:
        addresses: [10.0.8.3]    # 구축해둔 네임서버의 주소
        search: [labs.local]    # 도메인 이름을 자동완성해줌

search 단락은 도메인 이름을 자동으로 완성해주는 역할을 한다.
짧은 호스트명 → 완전한 도메인명(FQDN)으로 바꿔주는 자동 규칙
ex) ns -> ns.labs.local

sudo netplan apply netplan 적용

/etc/resolv.conf 확인

cat /etc/resolv.conf

nameserver 127.0.0.53
search labs.local

→ 실제 질의는 127.0.0.53을 통해 10.0.8.3으로 forwarding됨.

전체 동작 흐름

1. netplan (YAML 설정)
   ↓
2. systemd-networkd 또는 NetworkManager (백엔드 네트워크 관리자)
   ↓
3. systemd-resolved (DNS 처리기)
   ↓
4. /etc/resolv.conf (내부적으로 127.0.0.53 포워딩)

DNS 우선순위 및 설정 반영 순서

  • ➖ netplan 설정 → sudo netplan apply로 적용
  • ➖ 이 설정은 systemd-networkd나 NetworkManager에 의해 NIC에 반영됨
  • ➖ 설정된 DNS 주소가 systemd-resolved에 전달됨
  • ➖ systemd-resolved는 이를 /run/systemd/resolve/stub-resolv.conf로 관리하고
  • ➖ /etc/resolv.conf는 보통 그 파일로 심볼릭 링크됨 (127.0.0.53로만 보여짐)

정확한 DNS 적용을 확인하려면?

# 실제 적용된 DNS 서버 확인
resolvectl status

# resolv.conf가 systemd-resolved에 의해 관리되는지 확인
ls -l /etc/resolv.conf
# 변경한 netplan 설정이 DNS까지 적용되었는지 확인
cat /run/systemd/resolve/resolv.conf

주의 ‼️

netplan만 수정하고 /etc/resolv.conf만 보고 판단 → 잘못된 판단

  • → /etc/resolv.conf는 항상 127.0.0.53만 보여질 수 있음

systemd-resolved가 꺼져 있음 → DNS 질의 실패

  • → systemctl status systemd-resolved로 확인 필요

  • ➖ netplan은 설정 도구일 뿐, 최종 DNS 질의는 systemd-resolved가 처리한다.
  • ➖ 정확한 DNS 적용 확인은 resolvectl status, /run/systemd/resolve/resolv.conf 등을 통해 확인해야 한다.
  • ➖ /etc/resolv.conf만 보면 오해할 수 있음 → systemd-resolved와의 연동 여부를 항상 체크해야 한다.

마무리

DNS는 단순히 "이름 → IP"가 아니라 네트워크 구조 전체의 핵심이다.

resolv.conf, systemd-resolved, netplan 등 클라이언트 쪽 설정과도 맞물려 있고,

DNS 서버가 올바르게 응답하지 않으면 인터넷은 "될 듯 말 듯" 끊긴다.

내부망 DNS를 구축할 때는 정방향/역방향 설정, 레코드 체계, 검색 도메인(search) 개념까지 챙겨야 한다.

728x90
반응형

'네트워크' 카테고리의 다른 글

[네트워크 기초] IP 주소와 서브넷, 그리고 클래스와 CIDR  (0) 2025.06.13
[네트워크 기초] OSI 7계층과 TCP/IP 모델 정리  (1) 2025.06.13
[네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리  (0) 2025.06.05
[리눅스 NFS] NFS? 우분투 서버/클라이언트 설정까지  (0) 2025.06.04
[가상화와 네트워크 구조] NAT, bridges, 호스트 전용 네트워크 개념 정리  (0) 2025.05.30
'네트워크' 카테고리의 다른 글
  • [네트워크 기초] IP 주소와 서브넷, 그리고 클래스와 CIDR
  • [네트워크 기초] OSI 7계층과 TCP/IP 모델 정리
  • [네트워크 기초] DHCP 동작 원리와 Broadcast 통신 흐름 정리
  • [리눅스 NFS] NFS? 우분투 서버/클라이언트 설정까지
highgarden
highgarden
커밋 하나하나가 쌓여 커다란 정원이 되는 중입니다. 하루하루 정성껏 심어가는 중 https://github.com/highgarden7
  • highgarden
    커밋심는 정원
    highgarden
  • 전체
    오늘
    어제
    • 분류 전체보기 (37)
      • ai (1)
      • devops (2)
      • Nest.js (14)
      • linux (14)
      • 네트워크 (6)
      • git (0)
      • aws (0)
      • docker (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • github
  • 공지사항

  • 인기 글

  • 태그

    E2E
    vercel
    IP
    githib action
    nestjs
    Java
    Chat GPT
    Linux
    springboot
    네트워크
  • 최근 댓글

  • 최근 글

  • 250x250
  • hELLO· Designed By정상우.v4.10.3
highgarden
[DNS 개념과 실습] 내부망 구성부터 레코드 이해까지
상단으로

티스토리툴바