DNS 서버 만들기

✒️ 2025-05-22 15:17 내용 수정


CentOS 7

1. 마스터서버

  1. DNS 패키지를 먼저 설치한다.
패키지 설명
bind DNS 서버
bind-utils DNS 명령어
bind-libs DNS 서버가 동작하게 해주는 보조 프로그램
bind-chroot DNS 방화벽

bind 1.png

  1. rpm -aq | grep bind로 패키지가 설치 되었는지 확인한다.

bind 2.png

  1. systemctl start named-chroot방화벽을 먼져 켜 준다.
    • systemctl status named-chroot로 상태를 확인한다.
  2. systemctl enable named-chroot로 재부팅 옵션을 설정한다.

bind 3.png

  1. cd /var/named/chroot/var/named로 디렉터리를 이동한다.
    • 각 하위 디렉터리로 이동할 때 ls -l 또는 ll을 입력해서 이동할 디렉터리가 존재하는지 확인한다.
    • 방화벽 역할의 chroot에서는 본인의 상위 디렉터리인 /var/named/와 root에 접근하지 못하도록 한다.
    • chroot의 하위 디렉터리 var/named는 chroot의 상위 디렉터리의 복사본이다.

bind 4.png

bind 5.png

  1. 확인이 완료되었다면 vi /etc/named.conf에서 /etc/named.conf의 메인 설정을 변경한다.
라인 구문 설명
13 localhost
14 localhost, version 6 표기
21 localhost localhost

bind 6.png

  1. cp /etc/named.rfc1912.zones backupFile로 먼저 원본 파일을 백업한 후, /etc/named.rfc1912.zones로 도메인 설정을 변경 후 저장한다.
    • 실습용으로 도메인 이름을 linuxdnsexam.com으로 설정했다.
    • 정방향 선언 : 도메인을 ip 주소로 변환
    • 역방향 선언 : ip 주소를 도메인으로 변환, 내부에서만 동작하므로 실전에서는 사용되지 않는다.
구문 설명
zone "도메인주소" IN 도메인 주소 지정
type master/slave/hint; 마스터, 슬레이브, 힌트 서버 타입 지정
file "도메인주소.zone" 도메인을 관리하기 위한 파일 설정
zone은 정방향, rev는 역방향 선언
allow-update { 옵션; }; 업데이트 여부 지정. 로컬에서 사용한다면 none으로 지정

bind 7.png

  1. cd /var/named/chroot/var/named/로 이동한다.
  2. cp named.localhost 도메인주소.zone으로 파일을 복사하고, chown named.named 도메인주소.zone로 사용자와 그룹 소유 권한을 named로 설정해준다.
    • 도메인 선언이 완료되면 반드시 /var/named/chroot/var/named/도메인.zone 파일을 생성해야 한다.
    • 이미 존재하는 named 파일을 복사해서 생성할 수 있다.
      • named.localhost : 정방향 설정의 예시 파일
      • named.loopback 역방향 설정의 예시 파일

bind 8.png

  1. vi 도메인주소.zone으로 도메인 관리 설정을 변경한다.

bind 9.png

DNS 레코드 설명
A IPv4의 정방향 서비스(도메인-> IP) : ARP
AAAA IPv6의 정방향 서비스(도메인-> IP). IPv6에는 역방향이 없음
PTR IPv4의 역방향 서비스(IP -> 도메인) : RARP
MX 메일 서버를 지칭
NS 네임 서버(DNS 서버를 지칭)
CNAME 별칭, 아이피 주소 대신에 도메인 사용 가능.

bind 10.png

  1. 모든 설정이 완료되었다면 네트워크 설정에서 DNS 주소를 DNS 서버의 ip 주소로 변경한다. 네트워크 설정 후에는 반드시 네트워크를 한 번 껐다가 켜는 걸 잊지 말자.
    • 네임 서버가 도메인 서비스를 원활하게 하기 위해서는 DNS 주소를 네임 서버의 ip 주소로 변경해주어야 한다.
    • 사진에선 네임 서버가 자기 자신이기 때문에 본인 ip 주소를 입력했다.

bind 11.png

bind 12.png

  1. 환경 설정 파일과 도메인 설정에 오류가 있는지 명령어로 확인한다.
    1. named-checkconf /etc/named.conf
    2. named-checkconf /etc/named.rfc1912.zones
    3. named-checkzone 도메인주소 도메인주소.zone

bind 13.png
bind 14.png

bind 13_에러체크.png

  1. systemctl restart named로 데몬을 재실행한다.
  2. nslookup 도메인주소 또는 host 도메인주소를 사용해서 도메인 주소가 설정했던 ip 주소를 가지고 있는지 확인한다.
    • www, mail, cafe 등등 설정에서 넣었던 네임 서버를 모두 테스트해볼 수 있다.

bind 17.png

  1. 동작 확인을 위해 먼저 systemctl start httpd로 http 데몬을 실행한다.
  2. cd /var/www/html로 이동하고 vi index.html로 홈페이지를 간략하게 설정한다.

bind 15.png

bind 16.png

  1. CentOS에서 FireFox에 도메인이나 설정했던 ip 주소를 입력하면 실제 설정했던 웹 페이지가 뜨는 것을 확인할 수 있다.

bind 19.png

bind 18.png


2. 슬레이브 서버

  1. 마스터서버 설정 변경 : gedit /etc/named.rfc1912.zones 을 연다.
  2. allow-transfer { slave아이피; }; 를 추가한다.
zone "마스터도메인" IN {
	type master;
	file "마스터도메인.zone";
	allow-update { none; };
	allow-transfer { 슬레이브1아이피; 슬레이브2아이피; };
};
  1. 라인을 추가한 후 저장 후 종료한다. 그 다음 systemctl restart named로 데몬을 재시작한다.

DNS slave.png

  1. 이번엔 슬레이브 서버로 지정할 컴퓨터 혹은 가상머신에서 작업한다. 패키지 다운로드는 마스터 서버 설치때와 동일하다.
    • gedit /etc/named.rfc1912.zones로 파일을 연다.
  2. 아래 내용으로 변경한다.
zone "마스터도메인" IN {
	type slave;
	file "slaves/마스터도메인.zone";
	masters { 마스터아이피; };
};

DNS slave 2.png

  1. 변경이 완료되었다면 저장 후 종료하고, 마찬가지로 systemctl restart named로 데몬을 재시작한다.
  2. 마스터 서버 컴퓨터의 cd /var/named/chroot/var/named/slaves로 이동한 다음 슬레이브 서버 파일이 생성되었는지 확인한다.
    • 이 부분은 GeoIP 오류때문에 named 재시작이 안되서 더 진행하지 못해 확인하지 못했다.

Rocky 9

1. 캐싱 서버

rbind 5.png
rbind 6.png

  1. dnf -y install bind bind-chroot로 dns 관련 패키지를 다운 받고, rpm -aq | grep bind로 패키지가 설치 되었는지 확인한다.

rbind 1.png

  1. vi /etc/named.conf/etc/named.conf 파일을 변경하여 환경 설정을 한다.
11 : listen-on port 53 { any; }; // 실습용으로 모두 사용 가능하게 허용
12 : listen-on-v6 port 53 { none; }; // IPv6 사용 안함 설정
19 : allow-query     { any; };
33 : dnssec-validation no;

rbind 2.png
rbind 3.png

  1. systemctl status named로 현재 dns 데몬이 실행중인지 확인하고, systemctl enable named로 재부팅 옵션을 설정 후 systemctl start namedsystemctl restart named로 서비스를 실행/재실행 한다.

rbind 4.png

  1. 이번에는 방화벽을 끄지 않고 방화벽에 DNS를 추가하여 운영한다.
    • firewall-config를 입력하여 초기 방화벽 GUI 프로그램이 설치되지 않았다면 패키지를 y 또는 yes 명령어를 눌러 다운 받고, 다운이 완료되면 자동으로 GUI가 켜진다.
    • 방화벽에서 영역->설정의 영구적->서비스에서 DNS를 체크->메뉴바에서 Firewalld 다시 불러오기(재실행)으로 방화벽에 허용할 서비스를 선택한다.
    • 혹은 프로토콜, 포트 번호를 알고 있다면 포트 항목에서 추가한다.
      • 설정을 영구적으로 설정하면 터미널이 닫혀도 방화벽에서 해당 서비스를 허용한다.

firewall 1.png
firewall 2.png
firewall 3.png

  1. 방화벽도 재실행이 완료 되었다면 Rocky 우측 상단의 네트워크 아이콘 - 유선 네트워크 설정에서 DNS 주소를 본인 ip(현재 DNS 서버를 구동중인 컴퓨터가 본인이므로)로 변경한다.

rbind 7.png

  1. nslookup www.naver.com, dig www.naver.com, host www.naver.com으로 네이버의 도메인 주소를 잘 찾아오는지 확인한다.

rbind 10.png
rbind 11.png
rbind 12.png

  1. 테스트를 위해 찾아낸 네이버 ip 주소를 Firefox에 입력하여 네이버 주소가 맞는지 확인한다.
    • 제대로 찾아온 걸 확인할 수 있다.
      rbind 8.png rbind 9.png

2. 마스터 서버

  1. /etc/named.conf 파일을 vi /etc/named.conf으로 열어 가장 마지막 줄에 도메인을 선언한다.
    • DNS 서버 만들기#1. 마스터서버의 7번 과정과 동일한 내용이다.
    • DNS 파일을 읽을 때 /etc/named.conf -> /etc/named.rfc1912.zones -> /var/name/도메인 순서로 읽기 때문에 /etc/named.conf 파일에 도메인을 먼저 선언해주면 /etc/named.rfc1912.zones에 따로 설정하지 않아도 된다.
zone "lnxtest.com" IN {
	type master;
	file "lnxtest.com.db";
	allow-update { none; };
};

rdns 1.png

  1. cd /var/named로 /var/named 디렉터리로 이동한다.
  2. cp -a named.localhost lnxtest.com.db로 선언된 도메인의 zone 파일을 복사한다.

rdns 2.png

  1. 도메인 환경 설정을 위해 zone 파일(lnxtest.com.db 파일)을 vi lnxtest.com.db로 연 후 내용을 수정한다.
$TTL 1D
@	IN SOA	@ root. (
					0	; serial
					1D	; refresh
					1H	; retry
					1W	; expire
					3H )	; minimum
	NS	@
	A	ip주소	
	MX 10	도메인이름.

ns	    IN	A	ip주소
mail	IN	A	ip주소
www	    IN	A	ip주소

rdns 3.png

  1. 환경 설정 오류 확인을 위해 named-checkconf, named-checkzone lnxtest.com lnxtest.com.db를 입력한다.

rdns 4.png

  1. 환경 설정이 완료되었으므로 systemctl restart named로 서비스를 재실행하거나 systemctl start named로 서비스를 실행해주고, systemctl status named로 서비스의 상태를 확인한다.

rdns 5.png

  1. Rocky의 우측 상단 네트워크 아이콘 - 유선 네트워크 설정으로 DNS 주소를 자신의 ip로 변경한다.
    • 이미 설정되어 있다면 생략

rbind 7.png

  1. nslookup www.lnxtest.com, nslookup mail.lnxtest.com으로 자신의 도메인 서비스가 잘 잡히는지 확인한다.

rdns 6.png