DNS 서버

도메인 네임 시스템(DNS)은 사람이 읽을 수 있는 도메인 이름(예: www.amazon.com)을 컴퓨터가 읽을 수 있는 IP 주소(예: 192.0.2.44)로 변환한다.
스마트폰이나 노트북부터 대규모 소매 웹 사이트의 콘텐츠를 서비스하는 서버에 이르기까지 인터넷상의 모든 컴퓨터는 숫자를 사용하여 서로를 찾고 통신한다.

이러한 숫자를 IP 주소라고 한다. 웹 브라우저를 열고 웹 사이트로 이동할 때는 긴 숫자를 기억해 입력하는 대신 example.com과 같은 도메인 이름을 입력해도 원하는 웹 사이트로 갈 수 있는 것이다.

Ubuntu Linux에서는 bind9이라는 패키지를 통해 DNS를 구축한다. bind9은 Ubuntu 뿐만 아니라 RedHat 계열 등 많은 리눅스에서 널리 사용되는 패키지이다.
bind9은 인터넷에 dns 정보를 게시 할 수 있을 뿐만 아니라 사용자의 dns 쿼리를 처리할 수 있다.
설정 정보
사용할 도메인 : jshskdltm.shop(가비아에서 구입)
서버 공인 IP : 210.122.10.35

1. DNS 구축
사전 작업DNS 호스트 설정


호스트 명을 지정하고 VM IP 주소를 매핑해 준다.
ns, ns1으로 DNS 호스트 명을 지정해 주었다. 이 호스트 명을 네임서버로 설정할 것이다.

2. 네임서버 설정

네임서버를 jshskdltm.shop을 관리하는 네임서버를 방금 설정한 DNS 호스트 ns.jshskdltm.shop, ns1.jshskdltm.shop로 지정한다.

패키지 설치

DNS 설정에 필요한 bind9 패키지와 resolvconf 패키지를 설치한다

apt install -y bind9       # bind9 패키지 설치

DNS 설정 파일 수정

VM 리부팅 및 적용 확인

reboot
root@localhost:~# cat /etc/resolv.conf
nameserver 210.122.10.35
nameserver 127.0.0.1               #자기 자신을 자체 DNS 서버로 지정
nameserver 127.0.0.53

DNS named.conf 파일 검토

DNS 서버의 디폴트 설정파일은 named.conf 파일이다. Bind9 패키지는 기본적으로 필요한 설정 파일들의 내용을 다른 파일들에 분산시켜 작성하고 named.conf파일에 include 하는 방식을 디폴트로 사용한다

cat named.conf
include "/etc/bind/named.conf.options";
include "/etc/bind/named.conf.local";
include "/etc/bind/named.conf.default-zones";

root@localhost:/etc/resolvconf/resolv.conf.d# cat /etc/bind/named.conf.options
options {
dnssec-validation auto;
        recursion yes;
        listen-on { any; };
        allow-query { any; };
};

listen-on { any; } : 서버는 모든 IPv4 주소에서 DNS 요청을 수신

recursion yes : 재귀적 질의. 클라이언트가 DNS 서버에 도메인 이름을 질의했는데, DNS 서버에 정보가 없을 때 서버가 다른 DNS 서버에 질의를 대신하여 결과를 클라이언트에게 전달하는 기능

allow-query { any; }; : 모든 클라이언트가 DNS 서버에 질의 가능

도메인 zone 파일 경로 삽입

아직 zone 파일을 만들지는 않았지만 /etc/bind/ 디렉토리에 db.jshskdltm.shop이라는 이름으로 zone 파일을 만들기로 하고 구문을 입력해 저장한다

root@localhost:/etc/bind# vi named.conf.default-zones
// 도메인 "jshskdltm.shop"에 대한 존(Zone) 설정
// 내용 추가
zone "jshskdltm.shop" {
        type master;
        file "/etc/bind/db.jshskdltm.shop";
};

ZONE 파일 생성

DNS Zone 이란 특정 기관이나 관리자에 의해 관리되는 DNS 정보의 영역이다. 따라서 DNS 정보를 관리상의 목적으로 계층적인 영역(Zone)으로 만든 개념이라 할 수 있다.

DNS 존 파일(DNS Zone File)은 도메인 네임 시스템(DNS)에서 특정 도메인 이름과 관련된 정보

cd /etc/bind#
cp db.local db.jshskdltm.shop
vi db.jshskdltm.shop <- 보통 이렇게하는건 서브도메인 네이밍 형식
$TTL    604800
@       IN      SOA     jshskdltm.shop. 1c2649394.gmail.com. (
                     2023092401         ; Serial
                         604800         ; Refresh
                          86400         ; Retry
                        2419200         ; Expire
                         604800 )       ; Negative Cache TTL
@       IN      NS      ns.jshskdltm.shop.
@       IN      NS      ns1.jshskdltm.shop.
@       IN      A       210.122.10.35
ns      IN      A       210.122.10.35  ; ns A 레코드 추가
ns1     IN      A       210.122.10.35  ; ns1 A 레코드 추가

IP 주소, 메일 서버 정보 등)를 포함하는 텍스트 파일이다.

SOA레코드는 특정 도메인에 대한 권한 있는 정보 즉, 공식적이고 신뢰할 수 있는 정보를 담고 있다. 해당 도메인의 DNS 서버가 어떤 것인지에 대한 정보를 제공한다.

  • 도메인 이름: SOA 레코드가 적용되는 도메인의 이름입니다.
  • 관리자 이메일: 도메인을 관리하는 사람의 이메일 주소(일반적으로 @ 기호가 .으로 대체됩니다).
  • 시리얼 번호: DNS 레코드의 버전 번호로, 변경이 있을 때마다 증가시켜야 한다.이를 통해 다른 DNS 서버가 레코드의 업데이트 여부를 확인
  • 갱신 간격: 다른 DNS 서버가 SOA 레코드를 확인하고 업데이트를 요청하는 주기
  • 재시도 간격: 업데이트 요청이 실패했을 때 다시 시도하는 간격
  • 만료 기간: 슬레이브 DNS 서버가 SOA 레코드를 유지할 수 있는 최대 기간으로, 이 기간이 지나면 해당 정보를 삭제
  • 최소 TTL: 레코드의 최소 생존 시간으로, 다른 DNS 서버가 이 정보를 캐시할 수 있는 최소 기간
  • 네임서버: 해당 도메인을 관리하는 권한 있는 네임서버의 이름입니다.

1. $TTL 604800

  • 정의: 기본 TTL(Time to Live) 값으로, 이 존 파일 내의 모든 레코드에 적용된다.
  • 의미: 604800초(7일) 동안 이 레코드가 캐시될 수 있음을 의미한다. 클라이언트가 이 DNS 정보를 요청할 때, 이 TTL 값만큼의 시간 동안 동일한 정보를 사용할 수 있다.

2. @ IN SOA jshskdltm.shop. 1c2649394.gmail.com. ( … )

  • @: 현재 도메인(jshskdltm.shop)을 나타낸다.
  • IN SOA: SOA(Start of Authority) 레코드를 시작. SOA 레코드는 DNS 존에 대한 관리 정보를 제공한다.
  • jshskdltm.shop: 주 네임서버의 도메인 이름이다.
  • 1c2649394.gmail.com.: 도메인 관리자 이메일 주소를 나타내며, 일반적으로 @ 기호 대신 .을 사용한다.
  • 괄호 안의 값들:
    • 2023092401: 시리얼 번호로, 존 파일이 수정될 때마다 증가해야 한다. 이 번호는 다른 DNS 서버가 변경된 내용을 인식하는 데 사용된다.
    • 604800: Refresh 주기. 슬레이브 서버가 주 서버를 확인하는 주기(7일)
    • 86400: Retry 주기. Refresh가 실패했을 때 다시 시도하는 간격(1일)
    • 2419200: Expire 주기. 슬레이브 서버가 정보를 유지할 수 있는 최대 기간(28일)
    • 604800: Negative Cache TTL. 존재하지 않는 레코드에 대한 캐시 유효 기간(7일)

3. @       IN      NS      ns.jshskdltm.shop.

@       IN      NS      ns1.jshskdltm.shop.

  • @: 현재 도메인을 나타냄
  • IN NS: 네임서버(Nameserver) 레코드를 지정.
  • jshskdltm.shop.: 이 도메인의 네임서버로 jshskdltm.shop을 지정. 즉, 이 도메인의 DNS 요청이 이 네임서버로 전달된다는 의미.
    1, 2차 네임서버를 지정했다.

4. @  IN  A  210.122.10.35

  • @: 현재 도메인(jshskdltm.shop)을 나타냄.
  • IN A: A 레코드를 지정합니다. A 레코드는 도메인을 IP 주소에 매핑.
  • 210.122.10.35: jshskdltm.shop 도메인이 이 IP 주소로 매핑 됨. 즉, 사용자가 이 도메인에 접근할 때 이 IP 주소로 연결된다는 의미

5. ns  IN  A  210.122.10.35

  ns1  IN  A  210.122.10.35

ns, ns1: 서브도메인 이름을 나타낸다.

IN A: A 레코드를 지정.

한마디로ns.jshskdltm.shop, ns1.jshskdltm.shop이 이 IP 주소로 매핑 됨을 의미한다.

DNS 캐시 레코드는 DNS 서버가 요청된 도메인 이름에 대한 정보를 저장해 두는 것을 의미한다. 여기서의 DNS 서버는 해당 레코드를 7일 동안 캐시하고 그 이후에는 새로 요청하여 업데이트한다.

DNS 존 파일에서 @ 기호는 “현재 도메인”을 나타낸다. 즉, DNS 존 파일에서 @ 기호를 사용하여 나타내는 도메인을 의미한다.

존 파일이 jshskdltm.shop 도메인에 대한 것이라면, @는 jshskdltm.shop을 가리키는 것이다.

이렇게 사용함으로써, 전체 도메인 이름을 반복적으로 입력할 필요 없이 간단하게 현재 도메인을 참조할 수 있다.

  • @ IN NS jshskdltm.shop.는 jshskdltm.shop 도메인의 네임서버를 지정하는 것이고,
  • @ IN A 210.122.10.35는 jshskdltm.shop 도메인의 A 레코드를 설정하고 있는 것이다.

본 매뉴얼에서는 작업하는 VM이 네임 서버이므로 이 VM이 jshskdltm.shop이라는 이름의 네임서버인 것이다.

DNS 설정 테스트

윈도우에서 CMD 창에 nslookup 명령어를 입력해서 도메인을 테스트한다

DNS 서버 쿼리 성공

도메인이 DNS 서버 IP에 맞게 외부에서 쿼리가 된다.

Leave a Reply

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다