반응형

설명

CentOS 7에서 CHROOT가 적용된 DNS 서비스를 이중화로 구성합니다. DNS에 질의는 제한된 네트워크에서만 가능하도록 제한합니다.

 

 

 

BIND 버전 및 서버 구성

OS: CentOS 7

BIND Version: 9.11.4-26

마스터: 192.168.80.176

슬레이브1: 192.168.80.177

슬레이브2: 192.168.80.178

 

 

 

Hostname 설정

각 서버의 호스트네임을 설정한후 재접속합니다.

 

### Setting Hostname ###

### Master ###
[root@localhost ~]# hostnamectl set-hostname master

### Slave1 ###
[root@localhost ~]# hostnamectl set-hostname slave1

### Slave2 ###
[root@localhost ~]# hostnamectl set-hostname slave2

 

 

 

SELinux 비활성화

편의상 SELinux를 사용하지 않으므로 비활성화합니다.

 

### Inactive the SELinux ###

### Master ###
[root@master ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@master ~]# reboot

### Slave1 ###
[root@slave1 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@slave1 ~]# reboot

### Slave2 ###
[root@slave2 ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
[root@slave2 ~]# reboot

 

 

 

Firewall 설정

파이어월에 DNS 서비스를 등록합니다.

 

### Register dns service in the firewall ###

### Master ###
[root@master ~]# firewall-cmd --permanent --add-service=dns
[root@master ~]# firewall-cmd --reload

### Slave1 ###
[root@slave1 ~]# firewall-cmd --permanent --add-service=dns
[root@slave1 ~]# firewall-cmd --reload

### Slave2 ###
[root@slave2 ~]# firewall-cmd --permanent --add-service=dns
[root@slave2 ~]# firewall-cmd --reload

 

파이어월 서비스 리스트를 확인하여 방금 추가한 DNS 서비스가 등록되었는지 확인할수 있습니다.

 

### Check the service list registered in the firewall ###

### Master/Slave1/Slave2 ###
[root@master ~]# firewall-cmd --list-services
cockpit dhcpv6-client dns nfs proftpd ssh

[root@master ~]# firewall-cmd --info-service=dns
dns
  ports: 53/tcp 53/udp
  protocols:
  source-ports:
  modules:
  destination:
  includes:
  helpers:

 

 

 

BIND 패키지 설치

DNS 서비스에 필요한 패키지를 설치합니다.

 

### Install the BIND package ###

### Master/Slave1/Slave2 ###
[root@master ~]# yum -y install bind bind-chroot bind-utils

 

DNS 서비스의 자동시작을 활성화하고, DNS 서비스를 시작합니다.

 

### Activate and start the DNS Service ###

### Master/Slave1/Slave2 ###
[root@master ~]# systemctl enable named-chroot
[root@master ~]# systemctl start named-chroot

 

 

 

환경파일 설정

DNS 서비스를 구성하는 환경파일을 설정합니다. 환경파일에서 많은 옵션이 있지만, 이중화 구성에 맞춰서 필요한 부분만 추가 또는 변경하겠습니다. "listen-on port 53"와 "listen-on-v6 port 53"는 각각 Master/Slave1/Slave2의 IP로 설정합니다. 쿼리 질의는 "office-nets"로 제한하며, 그외 네트워크에서 도메인 해석 질의는 거부합니다. 이중화 구성에서 가장 중요한 옵션인 "allow-transfer"를 "none"으로 설정하고, 개별 존에서 "allow-transfer"를 허용하도록 설정하겠습니다. "allow-update"는 "none"이 기본값이지만, 존 정보(레코드)를 업데이트할수 있으므로 명시적으로 "none"으로 설정하며, "allow-transfer"와 같이 필요한 존에 대해서만 개별 설정합니다.

 

### /etc/named.conf ###

### Master ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.176; };
        listen-on-v6 port 53   { fe80::4f4b:783b:ba20:31ae; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

### /etc/named.conf ###

### Slave1 ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.177; };
        listen-on-v6 port 53   { fe80::e88e:f526:fd9e:3215; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

### /etc/named.conf ###

### Slave2 ###
acl office-nets {
        192.168.80.0/24;
};

options {
        listen-on port 53      { 192.168.80.178; };
        listen-on-v6 port 53   { fe80::d834:f330:e901:82ef; };
        ...
        allow-query            { office-nets; };
        allow-transfer         { none; };
        allow-update           { none; };
        ...
};

logging {
		...
};

zone "." IN {
		...
};

include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

 

 

 

Master DNS 서버에서 이중화할 ZONE 설정

Master DNS에서 서비스 및 전송할 존을 설정합니다. 테스트용도로 아래와 같이 포워드 존과 리버스 존 하나씩 설정하겠습니다. 이 두개의 존 정보는 존 트랜트퍼 기능을 사용하여 Slave1과 Slave2로 전송하기 위해서, Slave1과 Slave2의 IP를 설정합니다. 이 두개의 존은 다이나믹 존으로 사용하지 않으므로 "allow-update"를 "none"으로 설정합니다.

 

### /etc/named.rfc1912.zones ###

### Master ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type master;
        file "master/testlab.localhost.zone";
        allow-transfer { 192.168.80.177; 192.168.80.178; };
        allow-update { none; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "master/80.168.192.in-addr.arpa.zone";
        allow-transfer { 192.168.80.177; 192.168.80.178; };
        allow-update { none; };
};

 

포워드 존과 리버스 존 파일을 저장할 master 폴더를 생성합니다.

 

### Make the master folder and change the ownership ###

[root@master ~]# mkdir /var/named/master
[root@master ~]# chown root.named /var/named/master

 

생성한 master 폴더에 포워드 존 파일을 생성하며, DNS 서버에 맞춰서 네임서버도 생성합니다.

 

### /var/named/master/testlab.localhost.zone ###

### Master ###
$TTL 1D
@       IN      SOA     testlab.localhost.      root.testlab.localhost. (
                                        2021120701      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
        IN      NS      ns1.testlab.localhost.
        IN      NS      ns2.testlab.localhost.
        IN      NS      ns3.testlab.localhost.

ns1     IN      A       192.168.80.176
ns2     IN      A       192.168.80.177
ns3     IN      A       192.168.80.178

www     IN      A       192.168.80.191
ftp     IN      A       192.168.80.191

 

정방향 영역에 맞춰서 역방향 영역의 존 파일도 함께 생성합니다. 정방향 영역의 레코드에 대응하는 역방향 영역의 레코드인 PTR은 사용하지 않는다면 만들지 않아도 무방합니다. 

 

### /var/named/master/80.168.192.in-addr.arpa.zone ###

### Master ###
$TTL 1D
@       IN      SOA     testlab.localhost.      root.testlab.localhost. (
                                        2021120701      ; serial
                                        1D              ; refresh
                                        1H              ; retry
                                        1W              ; expire
                                        3H )            ; minimum
        IN      NS      ns.testlab.localhost.

191     IN      PTR     www
191     IN      PTR     ftp

 

존 영역 파일의 생성이 끝났다면, master 폴더 및 폴더에 포함된 파일의 소유권을 모두 변경합니다. (폴더 및 존 파일의 소유가 root.root인 경우 도메인 네임 해석이 거부될수도 있으므로, 반드시 소유권을 root.named로 변경합니다)

 

### Change the permission of the added zone ###

### Master ###
[root@master ~]# chown root.named /var/named/master/*

 

 

 

Slave1/Slave2 DNS 서버에서 이중화할 ZONE 설정

실제 존 파일은 Master에서 전송되므로, Slave1/Slave2에서는 Master에서 선언한 존을 아래와 같이 Slave에 맞춰서 설정합니다. (존 파일은 allow-transfer 옵션에 의해서 자동 생성됩니다)

 

### /etc/named.rfc1912.zones ###

### Slave1/Slave2 ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type slave;
        file "slaves/testlab.localhost.zone";
        masters { 192.168.80.176; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/80.168.192.in-addr.arpa.zone";
        masters { 192.168.80.176; };
};

 

Slave로 전송되는 존 파일은 성능향샹을 위해서 바이너리로 포멧되므로, 해당 존 파일은 열어보거나 편집할수 없습니다. 만약 일반 텍스트로 존 파일의 전송을 원한다면 아래와 같이 "masterfile-format text" 옵션을 추가한후 "named-chroot" 데몬을 재시작합니다.

 

### /etc/named.rfc1912.zones ###

### Slave1/Slave2 ###

### Customer's Forward Zone ###
zone "testlab.localhost" IN {
        type slave;
        file "slaves/testlab.localhost.zone";
        masterfile-format text;
        masters { 192.168.80.176; };
};

### Customer's Reverse Zone ###
zone "80.168.192.in-addr.arpa" IN {
        type slave;
        file "slaves/80.168.192.in-addr.arpa.zone";
        masterfile-format text;
        masters { 192.168.80.176; };
};

 

 

 

존 데이터 동기화

각 Slave에서 DNS를 시작하면 특별한 문제가 없는한 Master에서 바로 존 파일을 전송받으며, 아래와 같이 해당 존 파일이 생성됩니다.

 

### Zone data synchronization between master and slave1/slave2  ###

### Slave1 ###
[root@slave1 ~]# systemctl restart named-chroot
[root@slave1 ~]# ls -l /var/named/slaves
-rw-r--r-- 1 named named 314 Dec  7 17:36 80.168.192.in-addr.arpa.zone
-rw-r--r-- 1 named named 337 Dec  7 17:31 testlab.localhost.zone

### Slave2 ###
[root@slave2 ~]# systemctl restart named-chroot
[root@slave1 ~]# ls -l /var/named/slaves
-rw-r--r-- 1 named named 314 Dec  7 17:36 80.168.192.in-addr.arpa.zone
-rw-r--r-- 1 named named 337 Dec  7 17:31 testlab.localhost.zone

 

반응형

+ Recent posts