리눅스/Centos7

Centos7 bind9.11 설치(nameServer)

paletteCode 2020. 12. 6. 16:54

1. 주(master) bind 설치 및 기본 설정

[root@master ~]# yum -y install bind bind-chroot bind-utils
# mv /var/named/* /var/named/chroot/var/named/
mv: cannot move '/var/named/chroot' to a subdirectory of itself, '/var/named/chroot/var/named/chroot'
# ln -s /var/named/chroot/var/named/* /var/named/

Memo

- bind-chroot는 bind가 실행되는동안 상위경로는 /var/named/chroot가 됨. 그래서 악의적으로 상위디렉터리 접근하려해도

   /var/named/chroot로 접근됨.

# vi /etc/sysconfig/named/
	OPTIONS="-4"
    
:wq (저장 후 나가기)

Memo

- OPTIONS="-4" 설정 안하면 network unreachable resolving 에러발생 이거때문에 몇일 동안 삽질만함ㅋㅋ

2. 주(master) 네임서버 설정

# vi /etc/named.conf
	listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };	-> //listen-on-v6 port 53 { ::1; }; (주석처리)
	allow-query     { localhost; };	-> allow-query { any; };
	recursion yes;			-> recursion no;
	(밑에 추가)
	allow-transfer { localhost; 보조아이피; };
	...
	zone "." IN {
		type hint;
		file "named.ca";
	};
	(밑에 추가)
	zone "example.com"(등록하고자 하는 도메인 입력) IN {
		type master;
		file "example.com.zone";
		allow-update { none; };
	};
	include "/etc/named.rfc1912.zones"; -> //include "/etc/named.rfc1912.zones"; (주석처리)
    
:wq (저장 후 나가기)

Memo

listen-on port 53 { any; };

모든 IP로부터 리스닝 설정

//listen-on-v6 port 53 { ::1; };

ipv4프로토콜로 사용 하기위해 주석처리

allow-query{ any; };

DNS서버에 설정된 도메인에 대해서만 응답하도록 설정

recursion no;

캐싱 네임서버 역할 여부 설정

allow-update { none; };

주 네임서버이므로 업데이트 허용하지 않음

3. 주(master) 네임서버 zone 파일 설정

# cd /var/named/chroot/var/named/
[root@master named]# vi example.com.zone
$TTL 86400
	@		IN	SOA		ns1.example.com. root.example.com. (
                        		2020112911	; 시리얼 값 (년월일시간)으로 설정
                        		3H			; 보조 네임서버가 주 네임서버에 접속하는 시간
                        		15M			; 접속 실패시 다시 시도할 시간 간격
                        		1W			; 주네임서버에서 데이터가 없다면 1주후 삭제
                        		1D			; 위에서 설정한 TTL값과 같은 뜻
	);
			IN	NS		ns1.example.com.		; 도메인을 소유한 주 DNS 도메인
			IN	NS 		ns2.example.com.		; 도메인을 소유한 보조 DNS 도메인
			IN	MX		10 mail1.example.com.	; 메일 사용할 경우
			IN	MX		20 mail2.example.com.
			IN	TXT		"v=spf1 ip4:외부아이피 ~all"
			IN	SPF		"v=spf1 ip4:외부아이피 ~all"
			IN	A		외부아이피			; 도메인이 찾아갈 아이피
	www		IN 	A		외부아이피			; www.도메인이 찾아갈 IP주소 ex) www.example.com
	mail	IN	A		외부아이피			; 위와 같은 원리 ex) mail.example.com
	ns1		IN	A		외부아이피			; 주 네임서버 아이피
	ns2		IN	A		외부아이피			; 보조 네임서버 아이피

:wq (저장 후 나가기)

# chown root:named example.com.zone
 

bind(nameServer) zone파일 설명

# cd /var/named/chroot/var/named/ [root@master named]# vi example.com.zone $TTL 86400 @ IN SOA ns1.example.com. root.example.com. ( 2020112911 ; 시리얼 값 (년월일시간)으로 설정 3H ; 보조 네임서버가..

palette-code.tistory.com

4. 주(master) 네임서버 설정 파일 검증

# named-checkconf /etc/named.conf (명령어 입력 후 메시지 출력되지 않으면 정상)
# named-checkzone example.com example.com.zone
zone example.com/IN: loaded serial 2020112911
OK

5. 보조(slave) bind 설치 및 기본 설정

[root@slave ~]# yum -y install bind bind-chroot bind-utils
# mv /var/named/* /var/named/chroot/var/named/
mv: cannot move `/var/named/chroot' to a subdirectory of itself, `/var/named/chroot/var/named/chroot’
# ln -s /var/named/chroot/var/named/* /var/named/

# vi /etc/sysconfig/named/
  	OPTIONS="-4"
    
:wq (저장 후 나가기)

6. 보조(slave) 네임서버 설정

# vi /etc/named.conf
	listen-on port 53 { 127.0.0.1; }; -> listen-on port 53 { any; };
	listen-on-v6 port 53 { ::1; };	-> //listen-on-v6 port 53 { ::1; }; (주석처리)
	allow-query     { localhost; };	-> allow-query { any; };
	recursion yes;			-> recursion no;
	...
	zone "." IN {
		type hint;
		file "named.ca";
	};
	(밑에 추가)
	zone "example.com"(도메인 구매하신 것으로 입력) IN {
		type slave;
		masters { 주 서버 아이피; };
		file “example.com.zone”;
	};
	include "/etc/named.rfc1912.zones"; -> //include "/etc/named.rfc1912.zones"; (주석처리)
    
:wq (저장 후 나가기)

# chmod 770 /var/named/chroot/var/named/

Memo

- 네임서버 시작하면 주(master)서버로부터 zone파일을 전송받는데, zone파일이 저장되는 디렉터리의 권한이

named 사용자 또는 named 그룹 사용자의 권한이 있어야 전송 받을 수 있음.

7. 방화벽 설정

  * 주(master)서버와 보조(slave)서버 동일하게 설정

7-1. firewalld 사용시

# firewalld-cmd --permanent --zone=public --add-port=53/tcp
# firewalld-cmd --permanent --zone=public --add-port=53/udp
# firewalld-cmd --reload

7-2. iptables 사용시

# iptables -I INPUT -s 0.0.0.0/0 -d 서버 아이피 -p tcp --dport 53 -j ACCEPT
# iptables -I INPUT -s 0.0.0.0/0 -d 서버 아이피 -p udp --dport 53 -j ACCEPT
# service iptables save
iptables: Saving firewall rules to /etc/sysconfig/iptables:[ OK ]

8. 주(master) 네임서버 시작

# systemctl enable named-chroot
# systemctl start named-chroot

# systemctl status named-chroot

● named-chroot.service - Berkeley Internet Name Domain (DNS)
	Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
	Active: active (running) since 일 2020-11-29 15:23:58 KST; 3min 39s ago
	Process: 2915 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
	Process: 3021 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
  	Process: 3018 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo 		"Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 	Main PID: 3024 (named)
   CGroup: /system.slice/named-chroot.service
           └─3024 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot -4

	11월 29 15:23:58 localhost.localdomain named[3024]: all zones loaded
	11월 29 15:23:58 localhost.localdomain named[3024]: running
	11월 29 15:23:58 localhost.localdomain named[3024]: zone hyolab.shop/IN: sending notifies (serial 2020112911)
	11월 29 15:23:58 localhost.localdomain named[3024]: client @0x7f0d0c0cc200 192.168.1.1#31428: received notify for zone 'hyolab.shop'
	11월 29 15:23:58 localhost.localdomain systemd[1]: Started Berkeley Internet Name Domain (DNS).
	11월 29 15:23:58 localhost.localdomain named[3024]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
	11월 29 15:23:58 localhost.localdomain named[3024]: resolver priming query complete
	11월 29 15:24:13 localhost.localdomain named[3024]: client @0x7f0d0c0da830 192.168.1.31#47529 (hyolab.shop): transfer of 'hyolab.shop/IN':...112911)
	11월 29 15:24:13 localhost.localdomain named[3024]: client @0x7f0d0c0da830 192.168.1.31#47529 (hyolab.shop): transfer of 'hyolab.shop/IN':...R ended
	11월 29 15:24:13 localhost.localdomain named[3024]: client @0x7f0d0c0cc200 192.168.1.1#38091: received notify for zone 'hyolab.shop'

9. 보조(slave) 네임서버 시작

# systemctl enable named-chroot
# systemctl start named-chroot

# systemctl status named-chroot

● named-chroot.service - Berkeley Internet Name Domain (DNS)
	Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; enabled; vendor preset: disabled)
	Active: active (running) since 일 2020-11-29 15:24:13 KST; 1s ago
	Process: 9101 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS)
	Process: 9208 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)
	Process: 9205 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)
 	Main PID: 9210 (named)
   	CGroup: /system.slice/named-chroot.service
           └─9210 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot -4

	11월 29 15:24:13 localhost.localdomain named[9210]: running
	11월 29 15:24:13 localhost.localdomain named[9210]: zone hyolab.shop/IN: Transfer started.
	11월 29 15:24:13 localhost.localdomain named[9210]: transfer of 'hyolab.shop/IN' from 192.168.1.30#53: connected using 192.168.1.31#47529
	11월 29 15:24:13 localhost.localdomain systemd[1]: Started Berkeley Internet Name Domain (DNS).
	11월 29 15:24:13 localhost.localdomain named[9210]: zone hyolab.shop/IN: transferred serial 2020112911
	11월 29 15:24:13 localhost.localdomain named[9210]: transfer of 'hyolab.shop/IN' from 192.168.1.30#53: Transfer status: success
	11월 29 15:24:13 localhost.localdomain named[9210]: transfer of 'hyolab.shop/IN' from 192.168.1.30#53: Transfer completed: 1 messages, 12 ...es/sec)
	11월 29 15:24:13 localhost.localdomain named[9210]: zone hyolab.shop/IN: sending notifies (serial 2020112911)
	11월 29 15:24:13 localhost.localdomain named[9210]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
	11월 29 15:24:13 localhost.localdomain named[9210]: resolver priming query complete

10. 보조(slave) 네임서버 zone 파일 설정

# cat /var/named/chroot/var/named/example.com.zone
hyolabshopnshyolabshopns1hyolabshop,Qmailhyolabshops5P*Qnshyolabshops5P+Qns1hyolabshops5P+Qwwwhyolabshops5P

Memo

- bind9.9부터는 주 서버에서 zone파일을 보조 서버로 보내고 보조 서버에서 raw바이너리 형태로 저장한다.

(속도향상과 보조 네임서버에서 수정하는 것을 막기위해 raw바이너리 형태로 변경하였다고함.)

# named-compilezone -f raw -F text -o example.txt example.com /var/named/chroot/var/named/example.com.zone
zone example.com/IN: loaded serial 2020112911
dump zone to example.txt...done
OK

Memo

-f : 변환할 zone파일 지정

-F : 현재 zone파일 확장자를 다른 확장자로 변환할 확장자 지정

-o : example.text 변환 후 exmaple.com에 zone데이터를 포함시키고 example.com.zone으로 파일 생성

# vi /etc/named.conf
	...
	recursion no;
	(밑에 추가)
	masterfile-format text;
:wq (저장 후 나가기)

# systemctl restart named-chroot

Memo

- 전송 받을때 마다 변환을 해야되서 번거로우니 다음부터 저장할 때 text포맷으로 저장하도록 설정

11. 결과


# host hyolab.shop
hyolab.shop has address 102.111.44.83
hyolab.shop mail is handled by 10 mail.hyolab.shop.

'리눅스 > Centos7' 카테고리의 다른 글

Centos7 vsftpd 설치  (0) 2021.02.01
bind(nameServer) zone파일 설명  (0) 2021.01.17
Centos7 libzip 설치  (0) 2021.01.09
Centos7 oniguruma 설치  (0) 2021.01.09
Centos7 openssl 설치  (0) 2020.12.27