오늘은 Linux DNS 서버 구축하기 - bind, named에 대한 포스팅을 하려고 합니다.
DNS, bind, named와 같은 용어에 대한 정의를 먼저 하고 실습을 통해 진행하도록 하겠습니다.
DNS란 네트워크에서 도메인이나 호스트 이름을 숫자로 표기된 IP 주소로 해석해주는
TCP/IP 네트워크 서비스를 의미합니다.
예를 들어 bono915.tistory.com을 웹에서 입력하면 실제 서버가 가진 IP 주소인 211.249.222.33으로
redirection하는 것을 의미합니다.
사용자들은 이해하기 쉬운 도메인 이름만 알아도 어려운 숫자로된 IP를 별도로 기억하지 않아도
서버 또는 웹사이트에 접근 할 수 있습니다.
bind는 DNS서버를 구축 및 운영하기 위한 표준 서버 데몬 프로그램이라고 보시면 됩니다.
또한 유닉스(unix) 및 리눅스(linux), 윈도우 등 거의 모든 플랫폼을 지원하는 DNS의 모든 기능을 갖춘 소프트웨어 입니다.
named는 네임서버 데이터베이스 및 root zone 파일의 위치, root 파일, key 파일, 접근제어등의
보안설정을 하는 bind 메인 설정 파일입니다.
bind패키지를 설치하면 /etc/named.conf로 설정파일이 존재합니다.
이어서 실습을 통해 리눅스 DNS서버를 구축해보도록 하겠습니다.
테스트 환경은 CentOS 7에서 진행하겠습니다.
1. bind 패키지 설치
먼저 Linux에서 bind 패키지를 설치합니다.
# yum -y install bind bind-chroot bind-utils
2. named.conf 설정
bind 패키지 설치가 완료되었다면 /etc/named.conf 설정파일이 생성됩니다.
/etc/named.conf 설정파일을 열어서 설정을 바꿔보도록 하겠습니다.
options안에서
listen-on port 53 { 127.0.0.1; }; -> //listen-on port 53 { any; };
allow-query { localhost; }; -> allow-query { any; };
로 변경하고
masterfile-format text; 를 추가하여
slave에서 zone 파일이 동기화 될때 text로 변환되어 저장되도록 합니다.
# vi /etc/named.conf
options {
//listen-on port 53 { 127.0.0.1; };
listen-on port 53 { any; }; //53번 포트 외부 접근 허용
listen-on-v6 port 53 { ::1; };
directory "/var/named";
dump-file "/var/named/data/cache_dump.db";
statistics-file "/var/named/data/named_stats.txt";
memstatistics-file "/var/named/data/named_mem_stats.txt";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
//allow-query { localhost; };
allow-query { any; }; // 외부에서 오는 query에 대한 IP 대역 모두 허용
masterfile-format text; slave 에서 zone파일이 동기화 될때 text 형태로 변환
3. named.conf validation check
/etc/named.conf 설정을 완료하고 혹시 설정에 문제가 없는지 validation check를 하도록 하겠습니다.
# named-checkconf /etc/named.conf
명령어를 통해 named.conf에 문제가 없는지 확인할 수 있습니다.
명령어를 입력했을때 아무 내용도 출력되지 않는다면 문제가 없다고 볼 수 있습니다.
# named-checkconf /etc/named.conf
4. domain zone 정보 추가
다음으로 새로운 도메인에 대한 zone을 추가하기위해
/etc/named.rfc1912.zones에 도메인 정보를 추가하도록 하겠습니다.
# vi /etc/named.rfc1912.zones
...
zone "bono915.com" IN {
type master;
file "bono915.com.zone";
allow-update { none; };
};
5. zone 파일 생성 및 권한 변경
named.rfc1912.zones에 입력한 도메인 zone 파일을 named.localhost 기본 정보를 토대로 생성하고,
해당 zone 파일의 권한을 변경합니다.
# cp /var/named/named.localhost /var/named/[domain zone file name]
# chown root:named /var/named/[domain zone file name]
# cp /var/named/named.localhost /var/named/bono915.com.zone
# chown root:named /var/named/bono915.com.zone
6. zone 파일 레코드 수정하기
생성한 zone 파일의 규칙 및 domain에 연결할 IP 레코드를 추가합니다.
# vi /var/named/bono915.com.zone
$TTL 1D
@ IN SOA bono915.com. root.(
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS bono915.com.
IN A 192.168.78.51
www IN A 192.168.78.51
7. zone 설정 파일 및 zone 파일 validation check
/etc/named.rfc1912.zones 설정과 /var/named/bono915.com.zone 생성한 파일이 문제가 없는지
validation check를 합니다.
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone [domain name] [domain.zone file name]
명령어를 입력하여 확인할 수 있습니다.named-checkconf로 얻은 결과값은 아무것도 나오지 않으면 정상인 것이고
named-checkzone 로 얻은 결과값은 OK가 나타나면 정상입니다.
# named-checkconf /etc/named.rfc1912.zones
# named-checkzone bono915.com /var/named/bono915.com.zone
zone bono915.com/IN: loaded serial 0
OK
8. /etc/resolv.conf DNS 127.0.0.1 등록
named 설정이 다 되더라도 서버는 등록된 DNS를 찾지 못하기 때문에 설정된 DNS를 찾을 수 있도록 구축을 해야합니다.
간단하게 하자면 bono915.com 이라는 도메인을 zone에 만들고 등록을 했을때 /etc/resolv.conf에
search bono915.com을 입력해야 등록된 DNS를 찾을 수 있습니다.
하지만 DNS가 새로 입력할 때마다 search domain을 입력하는것은 번거로운 일입니다.
그래서 간단한 방법으로
/etc/resolv.conf에 nameserver 127.0.0.1을 추가하면 자기 자신의 서버 zone에 등록되어있는
DNS를 찾아서 search domain과 같은 역할을 하여 DNS를 확인할 수 있습니다.
/etc/resolv.conf에 nameserver 127.0.0.1 값을 입력하고
저장한 후에 네트워크 서비스를 재기동 합니다.
# vi /etc/resolv.conf
...
nameserver 127.0.0.1 //search bono915.com와 같은 효과, 가장 상단에 적용
# service network restart
만약 network 서비스를 재기동 했는데 /etc/resolv.conf 값이 초기화가 되었다면,
vi /etc/sysconfig/network-scripts/ifcfg-eth0 값에 DNS1을 127.0.0.1로 등록하고
NM_CONTROLLED=no을 등록합니다.
다시 network 서비스를 재기동하면 자동으로 /etc/resolv.conf에 입력한 값으로 초기화 되는것을 확인할 수 있습니다.
* /etc/resolv.conf값이 초기화 되는경우는 네트워크 dhcp 또는 NetworkManager 서비스의 config 영향으로 인해
수동으로 저장한 값이 반영이 안되는 현상이 있습니다.
# vi /etc/sysconfig/network-scripts/ifcfg-eth0
...
DNS1=127.0.0.1 //DNS1에 적용(가장 상위에)
NM_CONTROLLED=no //NetworkManager에서 영향받지 않도록 함
service network restart
9. named 서비스 재기동 및 부팅시 서비스 실행 등록
설정이 완료되었다면 named 서비스를 재기동 하고
기본적으로 service가 disable로 되어있어서 재부팅시에 서비스가 꺼져있기 때문에
재부팅 하더라도 서비스가 바로 실행될 수 있도록 enable로 처리하도록 합니다.
# service named restart
# systemctl enabled named
10. DNS 등록된 domain 및 IP 확인하기
nslookup 명령어를 사용하여 zone에 도메인을 등록한 값을 입력하면
정방향(domain -> IP) 값을 도출할 수 있습니다.
nslookup
> bono915.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Name: bono915.com
Address: 192.168.78.51
11. ETC
추가적으로 다른 서비스 실행 여부에 따라 추가적으로 진행해야 하는 부분입니다.
(1) firewalld를 사용하는 경우
// dns service 방화벽 등록
# firewall-cmd --permanent --add-service=dns
# firewall-cmd --reload
(2) SELinux를 사용하는 경우
// SELinux의 named 폴더 재명명 등록
# restorecon -R -v /var/named
리눅스 DNS 서버를 구축하기 위해서 다양한 블로그 글들과 정보들을 찾아봤지만
생각보다 오류가 나는것들이 많고 이슈에 대한 해결책들이 없어서
제 블로그에서 다시 조금더 구체적이고 성공률이 높은 방법들로 정의해 보았습니다.
글을 읽으시고 도움이 되시는분들이 있으셨으면 좋겠습니다! :)
혹시 내용중에 수정할 부분 또는 보완하면 좋겠다 하는 부분들이 있다면, 댓글로 달아주시면 감사하겠습니다.
지금까지 Linux DNS 서버 구축하기 - bind, named에 대한 포스팅이였습니다.
'Develope > Linux' 카테고리의 다른 글
[Linux] /bin/bash^M: bad interpreter 오류 해결방법 (0) | 2022.03.11 |
---|---|
[Linux] server can't find [domain]: NXDOMAIN 이슈 해결 방법 (0) | 2022.03.10 |
[Linux] 리눅스 shell 명령어로 파일 내 문자 입력 또는 텍스트 치환 방법 (0) | 2022.03.08 |
[Linux] Jenkins jobs 백업/복사/이관/서버이전 방법 (0) | 2021.06.18 |
[Linux] CentOS7 Selinux 설정 오타시 부팅 이슈 해결 방법 (0) | 2021.04.12 |