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 (저장 후 나가기)
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 |
Memo