티스토리 뷰
CentOS 강좌 PART 2. 2 DNS Server 구축과 운영 2
1.Master DNS Server Local host file 구성
1 2 3 4 5 6 | [root@ns1 whchoi]# hostnamectl set-hostname ns1.cisko-dc.com [root@ns1 whchoi]# hostnamectl status Static hostname: ns1.cisko-dc.com # hostname을 사용할 nameserver 호스트이름으로 변경하고 확인한다. # /etc/hosts 파일도 동일하게 변경해 준다. | cs |
2. Master Bind 설치
1 2 3 4 | [root@ns1 whchoi]# yum -y install bind bind-utils [root@ns1 whchoi]# rpm -q bind bind-utils # yum과 RPM을 통해 bind 설치를 한다. | cs |
3.Master DNS Service Start
1 2 3 4 5 | root@ns1 whchoi]# systemctl enable named.service [root@ns1 whchoi]# systemctl start named.service [root@ns1 whchoi]# systemctl status named.servicee # named.service를 활성화하고, Start시킨다. | cs |
4.Master DNS firewall setting
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | [root@ns1 whchoi]# firewall-cmd --zone=public --add-port=53/tcp --permanent [root@ns1 whchoi]# firewall-cmd --zone=public --add-port=53/udp --permanent [root@ns1 whchoi]# firewall-cmd --reload # firewall 정책에서 TCP/UDP 53번 포트를 모두 허용하고, 데몬을 재구동한다. [root@ns1 whchoi]# nmap -p 53 10.72.86.7 Nmap scan report for ns1.cisko-dc.com (10.72.86.7) Host is up (0.00012s latency). PORT STATE SERVICE 53/tcp open domain [root@ns1 whchoi]# nmap -sU -p 53 10.72.86.7 Nmap scan report for ns1.cisko-dc.com (10.72.86.7) Host is up (0.00027s latency). PORT STATE SERVICE 53/udp open domain # nmap을 통해 TCP/UDP 서비스가 정상적으로 오픈되어 있는지 시험해 본다. # nmap은 기본 설치되어 있지 않으므로, "yum -y install nmap" 을 통해 설치한다. | cs |
5.Master DNS Server Config
DNS 구성은 크게 3단계로 구성이 된다.
Bind9 의 Name Service를 위한 정책 구성과 보안/감사,로그 등에 대한 설정, 그리고 Forward Zone과 Reverse Zone에 대한 설정으로 나뉜다.
대부분 Name Service가 제대로 구성되지 않는 것은 이 단계이며, 만들어진 Zone 파일들의 권한 설정도 자주 등장하는 이슈이다.
이해가 쉽도록 아래 구조를 설명해 놓았다.
5-A. Zone 에 대한 전역 환경 설정 (/etc/named.conf)
/etc/named.conf 에서 Bind 에 대한 전체적인 환경 설정을 구성할 수 있다.
Zone에 대한 정의를 상세하게 할수도 있고, /etc/named.rfc1912.zone에서 수행해도 된다.
또한 전체적인 정책 구성과 감사,보안,로그에 대한 설정도 구성할 수 있다.
Master DNS는 /etc/named.conf를 아래와 같이 에디터로 수정한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | [root@ns1 whchoi]# more /etc/named.conf | awk '/listen-on port 53/' listen-on port 53 { 127.0.0.1; 10.72.86.7;}; # /etc/named.conf 파일에서 53번 포트로 nameserver가 listen할 수 있도록 추가한다. root@ns1 whchoi]# more /etc/named.conf | awk '/allow-query/' allow-query { any;}; # allow-query에 query를 허용할 IP 대역을 설정한다. 여기에서는 any로 모두 허용. root@ns1 whchoi]# more /etc/named.conf| awk '/allow-transfer/' allow-transfer { localhost; 10.72.78.253;}; # allow-transfer에 slave DNS를 설정한다. # 만약 slave DNS를 구성하지 않는다면 생략해도 된다. | cs |
5-B. Zone 파일에 대한 설정 (/etc/named.rfc1912.zone)
/etc/named.conf에서 설정해도 되지만, 하단에 변수로 설정되어 있는 해당 파일에서 설정해도 무방하다.
RFC 1912 섹션 3.1에 해당 하는 내용을 토대로 구성되는 Zone 파일 구성이다.
다양한 형태의 주소 체계들에 대해 Zone 파일을 구성 선언할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 | [root@ns1 whchoi]# vi /etc/named.rfc1912.zone # 생략. zone "cisko-dc.com" IN{ type master; file "forward.zone"; allow-update { none; }; notify yes; also-notify {10.72.78.253;}; }; # forward zone에 대한 레코드 설정이다. 해당 파일은 /var/named/forward.zone으로 생성한다. # notify yes; , also-notify {10.72.78.253;}; 은 slave DNS을 구성하기 위한 정의이다. zone "86.72.10.in-addr.arpa" IN{ type master; file "reverse.86zone"; allow-update { none; }; notify yes; also-notify {10.72.78.253;}; }; # reverse zone에 대한 레코드 설정이다. 해당 파일은 /var/named/reverse.86zone으로 생성한다. # notify yes; , also-notify {10.72.78.253;}; 은 slave DNS을 구성하기 위한 정의이다. # “86.72.10.in-addr.arpa"는 주소의 역순으로 적어주면 된다. zone "78.72.10.in-addr.arpa" IN{ type master; file "reverse.78zone"; allow-update { none; }; notify yes; also-notify {10.72.78.253;}; }; # reverse zone에 대한 레코드 설정이다. 해당 파일은 /var/named/reverse.78zone으로 생성한다. # notify yes; , also-notify {10.72.78.253;}; 은 slave DNS을 구성하기 위한 정의이다. # C 클래스 대역이 1개인 경우는 필요 없으며, 관리상으로 2개로 분리하였다. | cs |
5-C. Forward, Reverse Record DB 생성 (/var/named/)
이제 실제 레코드를 생성하면 된다.
한개는 A , NS, CNAEM등 HostName을 IP로 전환하여 응답해주는 테이블이고, 또 하나는 PTR로 역으로 응답해주는 테이블이다.
따라서 레코드 작성도 역으로 해 주면 된다. 전자를 Forward Zone이라 하고, 후자를 Reverse Zone이라 한다.
모두 /var/named/생성해야 하며, 일정한 양식을 지켜 주면 된다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | [root@ns1 whchoi]# vi /var/named/forward.zone $TTL 3H @ IN SOA cisko-dc.com. root.cisko-dc.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum ;Define nameservers IN NS ns1.cisko-dc.com. IN NS ns2.cisko-dc.com. ;Define 86Net Servers dcoob IN A 10.72.86.1 n5k-a IN A 10.72.86.2 n5k-b IN A 10.72.86.3 dc2-fi-v IN A 10.72.86.4 dc2-fi-a IN A 10.72.86.5 dc2-fi-b IN A 10.72.86.6 ns1 IN A 10.72.86.7 ntp1 IN CNAME ns1.cisko-dc.com. # serial : 시리얼 번호를 기준으로 Primary/Secondary간에 최신 업데이트 기준을 참고한다. 작은쪽에서 큰쪽에게 데이터를 업데# 이트 받는다. 날짜 기준으로 관리하는 것이 편하다. # refresh : Secondary 서버가 Primary 서버로 부터 업데이트 받는 기준을 의미. (1D - 하루) # Retry : 새로 고침 간격을 의미. (1H - 1시간) # expire : Primary에 연결되지 않았을 경우의 지정시간. 이 기간이 넘으면 해당 도메인에 응답하지 않는다. # TTL - Time to Live의 약어로 , 자신의 DNS정보를 다른 DNS가 가져간 이후 캐시에 저장하는 기간을 의미합니다. # 예.(3H - 3시간) # IN - Internet # SOA - Start of Authority # NS - NameServer 예시에서는 Master, Slave NameServer가 해당 # MX - Mail Exchanger , 메일서버 # A - A Record , 호스트이름과 매핑되는 IP 주소 체계 # CNAME - 호스트 Alias와 유사한 기능을 한다. 예제에서는 NTP1 서버가 ns1 서버로 CNAME되었다. # CNAME은 호스팅 서비스를 받거나 , AWS, Azure, GCP등 클라우드 서비스 할 경우에도 네임서비스 편의성과 동적 IP들에 # 대한 대응 방안으로 많이 사용되기도 한다. # 실제는 A 레코드 관리에 대한 부담을 덜기위해서도 많이 사용된다. | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | TTL 3H @ IN SOA cisko-dc.com. root.cisko-dc.com. ( 0 ; serial 1D ; refresh 1H ; retry 1W ; expire 3H ) ; minimum ;Define nameservers IN NS ns1.cisko-dc.com. IN NS ns2.cisko-dc.com. ;Define 86Net Servers 1 IN PTR dcoob.cisko-dc.com. 2 IN PTR n5k-a.cisko-dc.com. 3 IN PTR n5k-b.cisko-dc.com. 4 IN PTR dc2-fi-vip.cisko-dc.com. 5 IN PTR dc2-fi-a.cisko-dc.com. 6 IN PTR dc2-fi-b.cisko-dc.com. # reverse zone은 이미 /etc/named.rfc1912.zone에서 선언된 주소를 따르게 되므로 , 가장 마지막 주소만 구성한다. # PTR - Pointer 는 역방향 검색 즉 Reverse Query에 대한 레코드 타입으로 A 레코드의 반대개념이다. | cs |
5-D. 로그 설정 (/etc/named.conf)
설정하지 않아도 되는 부분이지만, 기본으로 로그 설정이 미비하다.
특히 TimeStamp등이 기본 설정되지 않아서, 로그를 통해 설치시 트러블 슈팅을 하거나, 향후 DNS 관리할 때 어려움이 따른다.
따라서 가급적 설정하고, Log를 수신할 파일들을 생성 및 권한 설정을 하는 것이 좋다.
1 2 3 4 5 6 7 8 9 10 11 12 13 | [root@ns1 whchoi]# vi /etc/named.conf logging { channel default_debug { file "data/named.run"; print-time yes; print-severity yes; print-category yes; severity debug; }; category queries { "default_debug"; }; category resolver { "default_debug"; }; }; # 위와 같이 로그를 수정하여, TimeStamp를 구성하고 debug 레벨로 로그를 확인한다. | cs |
6.bind config file에 대한 ownership과 권한설정
대부분의 Bind 서비스의 역할은 named가 담당하게 된다.. named가 실행하거나 읽어들일 파일들에 대해 그룹 및 소유 권한을 부여해 준다.
모든 파일은 /var/named 에 존재한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | [root@ns1 whchoi]# chgrp named -R /var/named/ # var/named 파일들에 대해 named가 소유권을 가질 수 있도록 변경한다. [root@ns1 whchoi]# ls -al /var/named/ 합계 28 drwxrwx--T. 5 root named 191 3월 22 07:49 . drwxr-xr-x. 20 root root 280 3월 21 22:12 .. drwxrwx---. 2 named named 23 3월 21 22:14 data drwxrwx---. 2 named named 31 3월 21 22:33 dynamic -rw-r-----. 1 root named 3774 3월 22 04:11 forward.zone -rw-r-----. 1 root named 2281 5월 22 2017 named.ca -rw-r-----. 1 root named 152 12월 15 2009 named.empty -rw-r-----. 1 root named 152 6월 21 2007 named.localhost -rw-r-----. 1 root named 168 12월 15 2009 named.loopback -rw-r-----. 1 root named 729 3월 22 04:11 reverse.78zone -rw-r-----. 1 root named 3284 3월 22 04:11 reverse.86zone drwxrwx---. 2 named named 6 1월 30 02:23 slaves # 정상적으로 named가 소유권을 가지고 있는지 확인한다. | cs |
7. Slave DNS 수정
1~4번까지의 과정은 모두 동일하다.
/etc/named.conf , /etc/named.rfc1912.zone 등의 구성이 일부 변경되며, Forward, Reverse Zone 파일을 /var/named/slaves 폴더로 이동해서 저장한다.
1 2 3 4 5 6 7 8 | [root@ns1 whchoi]# vi /etc/named.conf loptions { listen-on port 53 { 127.0.0.1; 10.72.78.253; }; allow-query { any; }; allow-transfer {none;}; # allow-transger는 none 처리한다. | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | [root@ns1 whchoi]# vi /etc/named.rfc1912.zone type slave; masters {10.72.86.7;}; # 위와 같이 type을 slave로 모두 변경하고, master 정보를 추가한다. # 또한 allow-update { none; }; 을 모두 삭제한다. zone "cisko-dc.com" IN{ type slave; file "slaves/forward.zone"; masters {10.72.86.7;}; }; zone "86.72.10.in-addr.arpa" IN{ type slave; file "slaves/reverse.86zone"; masters {10.72.86.7;}; }; zone "78.72.10.in-addr.arpa" IN{ type slave; file "slaves/reverse.78zone"; masters {10.72.86.7;}; }; # file의 위치는 slaves/ 로 변경하여, /var/named/slaves/에 위치하도록 한다. | cs |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | [root@centrepo whchoi]# chgrp named -R /var/named/ [root@centrepo whchoi]# chgrp named -R /var/named/slaves/ [root@centrepo whchoi]# ls -al /var/named/ total 40 drwxrwx--T. 5 named named 191 Mar 21 18:11 . drwxr-xr-x. 21 root root 4096 Mar 21 15:35 .. drwxrwx---. 2 named named 23 Mar 21 16:10 data drwxrwx---. 2 named named 31 Mar 21 16:25 dynamic -rw-r--r--. 1 root named 4508 Mar 21 18:10 forward.zone -rw-r-----. 1 root named 2281 May 22 2017 named.ca -rw-r-----. 1 root named 152 Dec 15 2009 named.empty -rw-r-----. 1 root named 152 Jun 21 2007 named.localhost -rw-r-----. 1 root named 168 Dec 15 2009 named.loopback -rw-r--r--. 1 root named 807 Mar 21 18:11 reverse.78zone -rw-r--r--. 1 root named 4316 Mar 21 18:11 reverse.86zone drwxrwx---. 2 named named 70 Mar 21 17:09 slaves [root@centrepo whchoi]# ls -al /var/named/slaves/ total 20 drwxrwx---. 2 named named 70 Mar 21 17:09 . drwxrwx--T. 5 named named 191 Mar 21 18:11 .. -rw-r--r--. 1 root named 4508 Mar 21 18:42 forward.zone -rw-r--r--. 1 root named 807 Mar 21 18:43 reverse.78zone -rw-r--r--. 1 root named 4316 Mar 21 18:43 reverse.86zone # 정상적으로 named가 소유권을 가지고 있는지 확인한다. | cs |
8. 구성 점검과 DNS 재구동
nameservice가 정상적으로 구성되었는지를 점검하기 위해 named-checkconf 와 named-checkzone 기능을 지원한다.
이 기능을 통해 지금까지 구성한 파일들이 정상적으로 구성되었는지 확인 할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | root@ns1 whchoi]# named-checkconf /etc/named.conf [root@ns1 whchoi]# named-checkconf /etc/named.rfc1912.zones [root@ns1 whchoi]# named-checkzone cisko-dc.com /var/named/forward.zone zone cisko-dc.com/IN: loaded serial 0 OK [root@ns1 whchoi]# named-checkzone 10.72.86.7 /var/named/reverse.86zone zone 10.72.86.7/IN: loaded serial 0 OK [root@ns1 whchoi]# named-checkzone 10.72.78.253 /var/named/reverse.78zone zone 10.72.78.253/IN: loaded serial 0 OK # 정상적으로 구동되었으면, 위에서 처럼 에러발생이 없고, 이슈가 있는 경우 어떤 에러인지를 알려준다. [root@ns1 whchoi]# service named restart Redirecting to /bin/systemctl restart named.service # checkconf, checkzone에서 에러가 나지 않더라도, 서비스 재구동에서 에러가 발생하는 경우가 있다. # 이 경우에도 구성 문법에러인 경우 이므로 /etc/named.conf , /etc/named.rfc1912.zone, forward, reverse # 파일 모두를 재점검해야 한다. | cs |
9. Client에서 Name Service 준비 및 시험.
Client 에서 dns 정보를 수정해 준다. 여기서 주의할 점은 /etc/resolv.conf는 현재 네트워크 구성 정보를 디스플레이 할 뿐이다.
파일을 수정해도, 시스템이 재구동되면 다시 원복된다.
/etc/sysconfig/network-scripts/ifcfg-ens192 를 수정해야 정상적으로 구동이 가능하다.
Bind util 도구에서 제공되는 nslookup, dig 도구를 통해 정상동작 여부를 확인 한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 | whchoi@centos151 ~]$ vi /etc/sysconfig/network-scripts/ifcfg-ens192 HWADDR=00:50:56:8f:29:1a NAME=ens192 GATEWAY=10.72.78.129 DNS1=10.72.86.7 DNS2=10.72.78.253 DOMAIN=“cisko-dc.com" # network script 파일에서 변경해야, /etc/resolv.conf가 재구동후에도 변경되지 않는다. [whchoi@centos151 ~]$ more /etc/resolv.conf # Generated by NetworkManager search cisko-dc.com nameserver 10.72.86.7 nameserver 10.72.78.253 # 정상적으로 Client가 설정되었는지 확인한다. [whchoi@centos151 ~]$ nslookup > www.cisco.com Server: 10.72.86.7 Address: 10.72.86.7#53 Non-authoritative answer: www.cisco.com canonical name = origin-www.cisco.com. Name: origin-www.cisco.com Address: 72.163.4.161 > ntp2 Server: 10.72.86.7 Address: 10.72.86.7#53 ntp2.cisko-dc.com canonical name = centrepo.cisko-dc.com. Name: centrepo.cisko-dc.com Address: 10.72.78.253 > 10.72.86.2 Server: 10.72.86.7 Address: 10.72.86.7#53 2.86.72.10.in-addr.arpa name = n5k-a.cisko-dc.com. # nslookup을 통해 정상적으로 질의 및 응답이 이루어지는지 확인해 보고, 역질의도 정상적인지 확인한다. # centos7 minimal 에는 해당 도구가 설치되어 있지 않으므로, yum -y install bind-utils 를 설치한다. [whchoi@centos151 ~]$ dig ntp2.cisko-dc.com ; <<>> DiG 9.9.4-RedHat-9.9.4-73.el7_6 <<>> ntp2.cisko-dc.com ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 17597 ;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 2, ADDITIONAL: 3 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ;; QUESTION SECTION: ;ntp2.cisko-dc.com. IN A ;; ANSWER SECTION: ntp2.cisko-dc.com. 10800 IN CNAME centrepo.cisko-dc.com. centrepo.cisko-dc.com. 10800 IN A 10.72.78.253 ;; AUTHORITY SECTION: cisko-dc.com. 10800 IN NS ns2.cisko-dc.com. cisko-dc.com. 10800 IN NS ns1.cisko-dc.com. ;; ADDITIONAL SECTION: ns1.cisko-dc.com. 10800 IN A 10.72.86.7 ns2.cisko-dc.com. 10800 IN A 10.72.78.253 ;; Query time: 0 msec ;; SERVER: 10.72.86.7#53(10.72.86.7) ;; WHEN: Fri Mar 22 08:20:46 KST 2019 ;; MSG SIZE rcvd: 153 # bind-utils를 설치하면 dig 명령도구 키트가 설치되는 데 DNS를 확인하는 데 매우 유용한 도구이다. # DNS 질의 응답 및 레코드 등에 대한 상세 정보를 확인해 볼 수 있다. | cs |
10. DNS 로그 확인
DNS로그는 Bind9 구축 뿐만 아니라, 추후 보안 및 감사도구로 사용할 수 있는 매우 중요한 도구 이다.
앞서 설정한 파일의 결과를 살펴보고 , 추가적으로 보안을 설정하며 향후 관리에 매우 유용할 것이다.
로그 관련 상세 추가 설정은 아래 URL을 참조한다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | [root@ns1 whchoi]# ls -al /var/named/data/ 합계 104 drwxrwx---. 2 named named 23 3월 21 22:14 . drwxrwx--T. 5 root named 191 3월 22 08:13 .. -rw-r--r--. 1 named named 102474 3월 22 08:32 named.run # 앞서 설정된 로그를 확인한다. [root@ns1 whchoi]# tail -15 /var/named/data/named.run 22-Mar-2019 08:18:44.722 network unreachable resolving 'HX-C240-2/A/IN': 2001:500:2::c#53 22-Mar-2019 08:18:44.722 network unreachable resolving 'HX-C240-2/AAAA/IN': 2001:500:2::c#53 22-Mar-2019 08:18:44.723 network unreachable resolving './NS/IN': 2001:500:2d::d#53 22-Mar-2019 08:18:44.723 network unreachable resolving './NS/IN': 2001:500:a8::e#53 22-Mar-2019 08:18:44.723 network unreachable resolving 'HX-C240-2/A/IN': 2001:500:2d::d#53 22-Mar-2019 08:18:44.723 network unreachable resolving 'HX-C240-2/AAAA/IN': 2001:500:2d::d#53 22-Mar-2019 08:18:44.723 network unreachable resolving 'HX-C240-2/A/IN': 2001:500:a8::e#53 22-Mar-2019 08:18:44.723 network unreachable resolving 'HX-C240-2/AAAA/IN': 2001:500:a8::e#53 22-Mar-2019 08:18:44.724 network unreachable resolving 'HX-C240-3/AAAA/IN': 2001:500:2::c#53 22-Mar-2019 08:18:44.725 network unreachable resolving 'HX-C240-3/A/IN': 2001:500:2d::d#53 22-Mar-2019 08:18:44.725 network unreachable resolving 'HX-C240-3/AAAA/IN': 2001:500:2d::d#53 22-Mar-2019 08:18:44.725 network unreachable resolving 'HX-C240-3/A/IN': 2001:500:a8::e#53 22-Mar-2019 08:18:44.725 network unreachable resolving 'HX-C240-3/AAAA/IN': 2001:500:a8::e#53 22-Mar-2019 08:20:31.920 network unreachable resolving 'ntp2/A/IN': 2001:500:2f::f#53 22-Mar-2019 08:20:31.921 network unreachable resolving './NS/IN': 2001:500:2f::f#53 | cs |
'운영체제 > CentOS 강좌' 카테고리의 다른 글
CentOS 강좌 PART 2. 4 LAMP 기반 WordPress 설치 (0) | 2019.03.27 |
---|---|
CentOS 강좌 PART 2. 3 NTP Server 구축과 운영 (1) | 2019.03.22 |
CentOS 강좌 PART 2. 2 DNS Server 구축과 운영 1 (2) | 2019.03.20 |
CentOS 강좌 PART 2. 1 SSH Server 구축과 운영 (0) | 2019.03.19 |
CentOS 강좌 PART 1. 10 VI 에디터 소개와 사용법 (0) | 2019.03.18 |
공지사항