카테고리 없음

리눅스 DNS 서버

ajh 2026. 4. 29. 15:23

2차 네임서버

Primary Name Server(주 네임서버)와 같이 동작하며 백업 역할을 수행한다

 

ncpl.cpl을 사용해서 네트워크 속성 부분에 기본 설정 DNS와 보조 DNS를 설정하는 부분이 있다

보조 DNS는 라우터 2중화처럼 기본DNS에 문제가 생길시 도메인 질의를 하는것이 아니고

리졸버가 사용자가 입력한 도메인들의 해석을 이 두 DNS에서 하나를 골라서 질의한다

  

실습 네임서버2(ns2)를 위한 리눅스 서버 설치하기

nmtui로 네트워크 설정

 

네트워크 설정 후 네트워크 재부팅

# systemctl restart NetworkManager.service

# ip -br -4 addr

기존 ip 주소가 남아있다 

 

DHCP => static 변경

기존 DHCP에서 받아오던 ip 주소를 제거한다

 

네트워크를 재시작한다.

# systemctl restart NetworkManager.service

 

ip 주소 제거 장치 <장치명> <주소>

# ip a d dev ens160 192.168.100.200/24

 

도메인 등록 흐름

1차 네임서버
  . [ 1 ]: 수동 생성 

- type : master
  . [ 2 ]: 수동 생성

2차 네임서버
  . [ 1 ]: 수동 생성

-type : slave

-type : masters{address}   
  . [ 2 ]: 자동 생성

관리자가 수동으로 생성할 수 있지만 관리의 편의성을 위해 1차 네임서버에서 동기화 한다  

 

[ 1 ]
/etc/named.rfc1912.zones 파일에 도메인을 생성한다.
관리자가 수동으로 생성한다.

zone "server.com" IN {
 type master;
 file "server.com.zone";
 allow-update { none; };
};

 

[ 2 ]
/var/named/server.com.zone 존 파일을 생성한다.
관리자가 수동으로 생성한다.

# cd /var/named
# install -m 640 -g named -d /dev/null server.com.zone
# vi server.com.zone
:
:

 

[ 3 ]
/etc/named.rfc1912.zones 파일에 도메인을 생성한다.
관리자가 수동으로 생성한다

zone "server.com" IN {
 type slave;  <= 2차 네임서버
 file "server.com.zone";
 masters { 192.168.100.200; };  <= 1차 네임서버의 주소 
};

 

[ 4 ]
/var/named/server.com.zone 파일을 생성한다.
masters를 통해 1차 네임서버에 접속해서 server.com.zone 파일을 읽어
서 자동으로 생성한다.

 

DNS 기본설정 

# dnf -y install bind bind-chroot bind-utils vim net-tools
# vi /etc/named.conf

options {
        listen-on port 53 { 192.168.100.201; };
        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";
        secroots-file   "/var/named/data/named.secroots";
        recursing-file  "/var/named/data/named.recursing";
        allow-query     { any; };

        recursion yes;

        dnssec-validation no;


# systemctl enable --now named.service
# systemctl status named.service
# netstat -nltup

 

# firewall-cmd --permanent --add-service=dns
# firewall-cmd --permanent --remove-service={cockpit,dhcpv6-client}
# firewall-cmd --reload
# firewall-cmd --list-services

 

2차 네임 서버 설정 
# vi /etc/named.rfc1912.zones

zone "server.com" IN {
    type slave;
    file "server.com.zone";
    masters {192.168.100.200;};
};

 

# systemctl restart named.service

# ll /var/named/

# file /var/named/server.com.zone

** 1차 네임서버도 켜져있는 상태여야 zone 파일을 받아올 수 있음 


named-compilezone 명령어
 . 존(zone) 파일을 검증하고 이를 직렬화된 형식으로 컴파일하여 저장하는 데 사용한다.
 DNS 존 파일의 형식을 확인하고 최적화된 출력 파일을 생성하여 서버 성능을 향상시키는 데 도움을 준다.
 . -f raw: 바이너리 형식의 입력 파일(raw format).
 . -F text: 출력 파일을 텍스트 형식으로 변환
 . -o output.txt: 변환된 텍스트 파일의 출력 경로

# named-compilezone -f raw -F text -o server.com.txt server.com /var/named/server.com.zone

 

포워드 zone파일을 TEXT 형태로 가져오기 위해서 설정파일을 수정한다. 여기서는 분석을 위한 것이므로 실제 운영
할 때는 TEXT로 변경할 필요는 없다.
[root@ns2 ~]# vi /etc/named.conf
 recursion yes;
 // 존 파일을 text 형태로 가져온다.
 masterfile-format text;
 dnssec-validatio

 

TEXT로 새롭게 받아오기 위해서 기존 파일인 zone 파일들을 삭제한다.
# rm -fv /var/named/*.zone


네임서버를 재시작한다.
# systemctl restart named.service


동기화한 파일을 확인한다.
# ls /var/named/
# cat /var/named/server.com.zone


실습 도메인 추가

1. 1차 네임서버에서 도메인 등록 

/etc/named.rfc1912.zones 파일에 server.com 밑에 client.com에 대한 도메인 정보를 추가한다.
# vi /etc/named.rfc1912.zones

zone "client.com" IN {
 type master;
 file "client.com.zone"; // /var/named/client.com.zone

 

2. 포워드 존파일 생성
/var/named 디렉터리에 이동해서 이전에 생성한 server.com.zone 파일을 client.com.zone 파일로 복사한다.

# cd /var/named/
# cp -a server.com.zone client.com.zone

 

3. 네임서버 재시작
네임서버의 설정 파일과 포워드 존 파일의 문법을 검사하고 문제가 있는지 확인한다.
# named-checkconf
# named-checkzone client.com client.com.zone

 

4. 2차 네임서버에서 도메인 등록

# vi /etc/named.rfc1912.zones

zone "client.com" IN {
    type slave;
    file "client.com.zone";
    masters {192.168.100.200;};
};

# systemctl restart named.service
# ll /var/named/


실습 네임서버 도메인 추가 스크립트

추가한 도메인 이름

- server.com, client.com, myserver.com, myclient.com, serversbs.com, serverkbs.com, servermbc.com
  

1차 네임서버

vi ns1DomainSetting.sh
#!/bin/sh
# 파일명: ns1DomainSetting.sh
# 프로그램 설명: 도메인을 자동으로 등록하는 스크립트
# 실행방법:ns1DomainSetting.sh 도메인명

# 1. 명령행 인수 체크
# $#: 인수의 개수
# $0: 명령어, $1: 첫 번째 인수 $2: 두 번째 인수
if [ $# -eq 0 ]
then
    echo ">>> 도메인 추가 <<<"
    echo "Usage: $0 DOMAIN"
    echo
    exit 1
fi

# 변수 설정
domainConf="/etc/named.rfc1912.zones"
domainName=$1
domainZoneFile="/var/named/${domainName}.zone"
#serialNumber=`date +%Y%m%d01`
serialNumber=$(date +%Y%m%d01)
nameServer="@192.168.100.200"
refresh="6H"
retry="30M"
expire="1W"
minimunm="3H"
defaultIPaddress="192.168.100.23"
ns1IPaddress="192.168.100.200"
ns2IPaddress="192.168.100.201"

# 2. 도메인 검색
# /etc/named.rfc1912.zones 파일에서 도메인을 검색한다.
#  -q, --quiet, --silent     suppress all normal output
#grep -q $domainName $domainConf <= 문자열에 있으면 무조건 참으로 반환 
grep -q \"$domainName\" $domainConf
retValue=$?

# 도메인이 존재하면
if [ $retValue -eq 0 ]; then
    echo "$domainName 도메인이 이미 등록되어 있습니다."
    exit 1
fi

# 도메인이 존재하지 않으면

# 3. 도메인 등록
# /etc/named.rfc1912.zones 파일에 도메인을 등록한다.
cat << EOF >> $domainConf
zone "$domainName" IN { type master; file "${domainName}.zone"; allow-update { none; }; };
EOF

# 4. 포워드 존파일 생성
# 포워드 존파일의 허가권(-m 640)과 소유권(-g named)의 권한을 설정하고 존파일을 생성하고
# 도메인의 정보를 파일에 넣는다.
install -m 640 -g named /dev/null $domainZoneFile
cat << EOF >> $domainZoneFile
\$TTL 300
@            IN  SOA ns1 root ( $serialNumber $refresh $retry $expire $minimunm )
             IN  NS  ns1
             IN  NS  ns2
             IN  MX 10 mail
             IN  A   $defaultIPaddress
ns1          IN  A   $ns1IPaddress
ns2          IN  A   $ns2IPaddress
www          IN  A   $defaultIPaddress
mail         IN  A   $defaultIPaddress
EOF

# 5. 네임서버 재시작
named-checkconf
retValue=$?

# 설정파일에 에러가 발생되었다면 프로세스를 종료한다.
if [ $retValue -eq 1 ]; then
    echo "설정파일에 에러가 발생되어 설정파일을 수정해야 합니다."
    exit 1
fi

systemctl restart named.service

# 6. 도메인 확인
for rr in soa ns a
do
    printf "dig $nameServer $domainName $rr +short: "
    dig $nameServer $domainName $rr +short
done
printf "dig $nameServer www.$domainName a +short: "
dig $nameServer www.$domainName a   +short

echo "$domainName 도메인 세팅이 완료되었습니다."

chmod 755 ns1DomainSetting.sh

 

2차 네임서버 

vi ns2DomainSetting.sh
#!/bin/sh
# 파일명: ns2DomainSetting.sh
# 프로그램 설명: 도메인을 자동으로 등록하는 스크립트
# 실행방법:ns2DomainSetting.sh 도메인명

# 1. 명령행 인수 체크
# $#: 인수의 개수
# $0: 명령어, $1: 첫 번째 인수 $2: 두 번째 인수
if [ $# -eq 0 ]
then
    echo ">>> 도메인 추가 <<<"
    echo "Usage: $0 DOMAIN"
    echo
    exit 1
fi

# 변수 설정
domainConf="/etc/named.rfc1912.zones"
domainName=$1
nameServer="@192.168.100.201"
masterServer="192.168.100.200"

# 2. 도메인 검색
# /etc/named.rfc1912.zones 파일에서 도메인을 검색한다.
#  -q, --quiet, --silent     suppress all normal output
grep -q \"$domainName\" $domainConf
retValue=$?

# 도메인이 존재하면
if [ $retValue -eq 0 ]; then
    echo "$domainName 도메인이 이미 등록되어 있습니다."
    exit 1
fi

# 도메인이 존재하지 않으면

# 3. 도메인 등록
# /etc/named.rfc1912.zones 파일에 도메인을 등록한다.
cat << EOF >> $domainConf
zone "$domainName" IN { 
    type slave; 
    file "${domainName}.zone"; 
    masters { $masterServer; }; };
EOF

# 4. 포워드 존파일 생성
# 2차 네임서버에서는 1차 네임서버에서 도메인 존파일을 가져오기 때문에 필요없다.

# 5. 네임서버 재시작
named-checkconf
retValue=$?

# 설정파일에 에러가 발생되었다면 프로세스를 종료한다.
if [ $retValue -eq 1 ]; then
    echo "설정파일에 에러가 발생되어 설정파일을 수정해야 합니다."
    exit 1
fi

systemctl restart named.service

# 6. 도메인 확인
for rr in soa ns a
do
    printf "dig $nameServer $domainName $rr +short: "
    dig $nameServer $domainName $rr +short
done
printf "dig $nameServer www.$domainName a +short: "
dig $nameServer www.$domainName a   +short

echo "$domainName 도메인 세팅이 완료되었습니다."

chmod 755 ns2DomainSetting.sh

 

for i in server.com client.com myserver.com myclient.com serversbs.com serverkbs.com servermbc.com
do 
./ns2DomainSetting.sh $i
done

실습 GNU Board 설치하기

그누보드는 APM 환경에서 사용할 수 있는 PHP 기반의 오픈소스 CMS이다.

웹서버에 구축한다

# yum -y install git

# cd /var/www/html
# rm -f index.html
# git clone https://github.com/gnuboard/gnuboard5.git gnuboard5

# cd gnuboard5/

# chmod 777 data
# chcon -t httpd_sys_rw_content_t data

# vi /etc/httpd/conf.d/vhost_alias.conf
<VirtualHost *:80>
    DocumentRoot  "/var/www/html/"
    ServerName    "192.168.100.23"
</VirtualHost>

# systemctl restart httpd.service

 

접속

http://192.168.100.23/gnuboard5/

MySQL 정보입력
Host: localhost
User: root
Password: 111111
DB: gnuboard
TABLE명 접두사: g5_

고관리자 정보입력
회원 ID: admin
비밀번호: 111111
이름: 최고관리자
E-mail: admin@domain.com

입력 후 설치 

 

# systemctl restart httpd.service
# mysqladmin -p  password 111111
Enter password: <-- 엔터
# mysql -e "create database gnuboard" -p111111