서버 구축

[DNS] ubuntu 22.04에 DNS서버 구축 하기

jinkwon.kim 2023. 7. 15. 09:50
728x90
반응형

개요

DNS 서버를 ubunu 22.04에 구축 해보겠습니다. 

설치 tool

DNS 서버를 설정하려면 BIND (Berkeley Internet Name Domain)와 같은 DNS 소프트웨어를 설치하고 구성해야 합니다.

설치

sudo apt update
sudo apt install bind9 bind9utils bind9-doc

사전 설정

관리하지 않는 domain을 google DNS에 물어보기 위해서 다음과 같을 설정을 하겠습니다. 

allow-query : 허용 IP 처리

recursion : DNS 실패시 재귀처리 설정

forwarders : DNS 실패시 DNS를 물어볼 다른 DNS Server 설정

dnssec-validation no; 사설 dns와 또 연동시에는 이걸 no로 설정해야 정상 동작 합니다.

 

/etc/bind/named.conf.options

options {
        directory "/var/cache/bind";

        // If there is a firewall between you and nameservers you want
        // to talk to, you may need to fix the firewall to allow multiple
        // ports to talk.  See http://www.kb.cert.org/vuls/id/800113

        // If your ISP provided one or more IP addresses for stable
        // nameservers, you probably want to use them as forwarders.
        // Uncomment the following block, and insert the addresses replacing
        // the all-0's placeholder.

        // BIND DNS 서버가 DNS 쿼리를 받을 수 있는 클라이언트의 IP 주소를 지정하는 역할을 합니다.
        allow-query { 
                any; 
                //192.0.2.0/24; 
        };

        // DNS 쿼리의 재귀적 처리를 활성화하거나 비활성화하는 역할을 합니다.
        // yes : DNS 서버가 클라이언트로부터 받은 쿼리에 대한 정보를 가지고 있지 않을 경우, 
        //       다른 DNS 서버에게 그 정보를 요청하도록 하는 재귀 쿼리를 활성화합니다.
        // no  : DNS 서버는 클라이언트의 쿼리에 직접 응답하지 못하면, 
        //       클라이언트에게 다른 DNS 서버에 직접 요청하도록 지시하는 비재귀 쿼리만 처리하게 됩니다.
        recursion yes;
		
        //  DNS 쿼리에 대한 답변을 찾을 수 없을 때, 그 쿼리를 어디로 전달할지를 지정하는 것입니다.
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };

        //========================================================================
        // If BIND logs error messages about the root key being expired,
        // you will need to update your keys.  See https://www.isc.org/bind-keys
        //========================================================================
        // 만약 forwarding이 안되면 아래꺼는 no로 설정 하면 됩니다.
        dnssec-validation auto;

        listen-on-v6 { any; };
};

사전 설정 TEST

다른 host의 DNS Server를 방금 만든 DNS Server 대체하여 TEST 해보겠습니다. 

dns-server 변경

/etc/resolv.conf 에 nameserver를 한개 추가합니다. 

저는 192.168.0.10 을 최 상단에  추가하였습니다.

dns-server test

nslookup www.google.com  시 IP주소가 정상적으로 나오는지 확인 합니다.

개인 dns 주소 설정

zone이란것을 만들고 설정 해야 합니다. 

DNS Server에서 zone이란 1개의 domain을 의미하고 이 zone은 파일로 관리가 됩니다. 그래서 이 zone을 통하여 DNS Server는 각 Domain에 대한 관리 권한을 구분하고, 특정 Domain에 대한 변경이 다른 Domain에 영향을 미치지 않도록 합니다.

Doman과 zone파일 연결

/etc/bind/named.conf.local 파일에 BIND에서  로컬 DNS 존을 정의하는 데 사용됩니다.

그러므로 이 파일에 우리가 관리할 domain과 zone파일은 연결해 주시면 됩니다.

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

zone 생성

위에 설정한 file 항목에 명시된 파일명으로 zone을 만들어보겠습니다. 

아래 명령을 실행해서 기존에 존재하는 local zone에대한 설정을 그대로 복사해서 만들면 되니다. 

 

sudo cp /etc/bind/db.local /etc/bind/db.doitnowman.com

zone 설정

/etc/bind/db.doitnowman.com 에대하여 아래와 같이 우선 설정을 해주 겠습니다.그리고 항목 별로 알아보겠습니다.

;
; BIND data file for local loopback interface
;
$TTL	604800
@	IN	SOA	ns.doitnowman.com. root.doitnowman.com. (
			      2		; Serial
			 604800		; Refresh
			  86400		; Retry
			2419200		; Expire
			 604800 )	; Negative Cache TTL
;
@	IN	NS	ns.doitnowman.com.
@	IN	A	127.0.0.1
ns	IN	A	192.168.0.10
www	IN	A	192.168.0.101

각행  설명

$TTL 604800

이 라인은 Time To Live 값을 설정합니다. TTL 값은 DNS 레코드가 캐시에서 유지되는 시간을 나타냅니다. 이 경우에는 604800초, 즉 일주일 동안입니다.

@ IN SOA ns.doitnowman.com. root.doitnowman.com.

Start of Authority (SOA) 레코드를 설정합니다. SOA 레코드는 존의 기본 정보를 제공하며, 이 존의 주 DNS 서버와 존 관리자의 이메일 주소를 포함합니다.

이 예제에서, `ns.doitnowman.com`이 주 DNS 서버이며, `root.doitnowman.com`이 존 관리자의 이메일 주소입니다.

세부 항목

- Serial:

존 파일의 버전을 나타냅니다. 존 파일이 변경될 때마다 이 값은 증가해야 합니다.
- Refresh

secondary DNS 서버가 primary DNS 서버에게 존 정보를 새로 고칠 빈도를 나타냅니다. 이 경우에는 604800초, 즉 일주일에 한 번입니다.
- Retry

secondary DNS 서버가 primary DNS 서버에게 존 정보를 새로 고치려는 시도가 실패한 후 다시 시도하는 빈도를 나타냅니다. 이 경우에는 86400초, 즉 하루에 한 번입니다.
- Expire

secondary DNS 서버가 primary DNS 서버로부터 존 정보를 새로 고칠 수 없는 경우, 존 정보를 사용을 중단하는 시점을 나타냅니다. 이 경우에는 2419200초, 즉 4주입니다.
- Negative Cache TTL

존 내에 없는 정보에 대한 쿼리의 응답을 캐시하는 시간을 나타냅니다. 이 경우에는 604800초, 즉 일주일입니다.

@ IN NS ns.doitnowman.com.

이 라인은 Name Server (NS) 레코드를 설정합니다. 이 레코드는 `doitnowman.com`에 대한 DNS 서버를 나타냅니다. @은 현재 존의 이름을 나타내는 바로가기입니다.

@ IN A 127.0.0.1

Address (A) 레코드를 설정합니다. 이 레코드는 doitnowman.com의 IPv4 주소를 나타냅니다. 이 경우는 특별히 루프백 주소인 127.0.0.1로 설정되어 있습니다.

ns IN A 192.168.0.10

이 라인은 A 레코드를 설정합니다. 이 레코드는 ns.doitnowman.com의 IPv4 주소를 나타냅니다.

현재 DNS Sever의 주소를 사용하면 됩니다.

www IN A 192.168.0.101

이 라인은 `www.doitnowman.com`의 IPv4 주소를 나타내는 A 레코드를 설정합니다. 

각 레코드는 주어진 도메인 이름에 대한 정보를 제공합니다. 이 정보는 클라이언트가 도메인 이름을 IP 주소로 변환하거나, 메일 서버를 찾는 등의 작업을 수행하는 데 사용됩니다.

BIND 재 시작

zone 설정이 끝났으면 BIND를 재 시작 해주시면됩니다. 

bind뒤에 붙은 버전은 현재 설치 버전에 맞게 변경해 주시면 됩니다.

 

systemctl restart bind9

신규 DNS TEST

아래 명령을 실행시 192.168.0.101 으로 잘 나오면 정상적으로 설치가 된것 입니다.

$nslookup www.doitnowman.com 

정리

- DNS Server를 구축하려면 BIND를 통해서 DNS Server를 구축 할 수 있습니다. 

- BIND는 zone 파일은 통하여 domain을 관리합니다. 

- zone파일에는 domain에 대한 하위 sub domain또는 host에 대한 주소를 설정 할 수 있습니다.

 

728x90
반응형

'서버 구축' 카테고리의 다른 글

메일 서버 구축  (0) 2017.06.01
[DNS] centos 서버 구축 하기  (1) 2016.12.27
구축 구성도  (0) 2016.12.27