본문 바로가기
서버/Home

[홈서버]내부 DNS 구성

by APH 2024. 12. 25.

내부망에서 구매한 도메인 주소로 내부에 있는 서버 접근시

불필요하게 외부를 통하여 접근하기 때문에

보안 및 효율을 위해서 내부에서는 내부망용 DNS서버를 사용하도록 구성함

 

홈서버 사양

더보기

CPU 5700G ( 8Cors 16Thread)

RAM 64GB

OS : Proxmox

Storage : NVMe 1TB


Proxmox 컨테이너 설정

더보기

debian 12 템플릿을 사용하여 설치

 

CPU

  • 1 Core

RAM

  • 256MB (DNS 설정 완료 후 64MB로 축소)
  • Swap 0MB

Parition

  • / 128MB (디스크 설정단계에서 0.127 입력)
  • /usr 1GB
  • /var 1GB

1. DNS 설치

더보기

# proxmox에서 컨테이너 생성하고 접속하였음으로 root 사용자 기준으로 작성함

# 업데이트

apt-get update
apt-get upgrade


# DNS 서버 및 관련 유틸(nslookup, dig 명령어) 설치

apt-get install -y bind9 bind9utils

 

# 아래 내용은 개인적인 설정 기록....

# 수행여부는 본인 판단하에 진행

# SSH 서버 삭제 (Proxmox 콘솔로만 접근)

apt-get remove -y --purge openssh-server

# SMTP 삭제

apt-get remove -y --purge postfix


2. 서버 재부팅시 DNS서버 자동실행 설정

더보기

systemctl enable named


3. DNS 서버 주소를 자기 자신으로 설정

더보기

vi /etc/resolv.conf

# 아래 내용만 남기고 다른 내용은 전부 삭제

nameserver 127.0.0.1


4. DNS 서버 미등록된 도메인 조회 가능하도록 설정

더보기

# bind9의 설정은 /etc/named.conf가 아닌 /etc/bind/named.conf에 위치함

cd /etc/bind

vi named.conf.options

 

# 아래 내용에서 파란색 부분은 본인 환경에 맞게 설정

options {
        directory "/var/cache/bind"; # DNS파일 저장하는 기본 경로
        forwarders { # 외부 DNS서버
                168.126.63.1; # KT 메인 DNS
                8.8.8.8; # Google DNS
                1.1.1.1; # Cloudflare DNS
                168.126.63.2; # KT 보조 DNS
        };
        dnssec-validation auto; # DNSSEC 검증 자동수행
        listen-on-v6 { any; }; # IPv6 주소에서 요청시 허용여부

        # 등록되지 않는 도메인의 질의 여부

        # 내부망에서 외부 DNS를 질의함으로 yes

        # 외부망용 DNS 서버에서 해당 옵션 사용시

        # 질의를 허용하는 ip대역을 설정해야 안전함
        recursion yes;
};


5. 내부망 DNS 파일 작성

더보기

# named.conf.options에서 directory설정 기본값이 /var/cache/bind 임으로 해당 경로 DNS파일을 작성함

cd /var/cache/bind

touch db.도메인명

chown bind:bind db.도메인명

chmod 640 db.도메인명

 

vi db.도메인명

---------------------------- 아래 내용 참조하여 작성 ----------------------------

$TTL    86400 ;  (초) 도메인 질의 후 캐시 유지 기간
@       IN      SOA     DNS서버호스트명. (
            1    ; Serial 번호로 슬레이브 DNS서버에서 알고 있는 번호 보다 크면 갱신하는 용도로 사용
  604800    ; (초) 슬레이브 DNS서버에서 변동사항 확인 주기
    86400    ; (초) 슬레이브 DNS서버에서 연결 끊겼을 경우 재시도 주기
2419200    ; (초) 슬레이브 DNS서버에서 해당 주기안에 질의 실패시 만료된 DNS로 감지함
    86400 )  ; (초) 유효하지 않는 질의 응답 캐시 유지 기간
@       IN      NS      DNS서버호스트명.

@       IN      A         웹서버IP

www   IN      A         웹서버IP

-------------------------------------------------------------------------------------------

예시) 서버 호스트명이 example이며 웹서버 IP주소가 192.168.0.3 인 경우

$TTL 86400;

@ IN SOA example. (

            1 ; Serial

  604800 ; Refresh

    86400 ; Retry

2419200 ; Expire

    86400 ; Negative Cache TTL

);

@       IN NS         example.

@       IN A            192.168.0.3

www   IN A            192.168.0.3

blog    IN A            192.168.0.3


6. 작성한 DNS 파일과 도메인 주소 zone 설정

더보기

cd /etc/bind

vi named.conf.local

아래와 같이 작성

zone "도메인명" {
        type master;
        file "작성한DNS파일명";
};

DNS파일의 경로가 다른 경우 풀패스로 입력

 

예시1) 도메인 명이 sy.pe.kr 이며 /var/cache/bind에 파일명이 db.sy.pe.kr 인 경우

zone "sy.pe.kr" {

        type master;

        file "db.sy.pe.kr";

};

 

예시2) 도메인 명이 sy.pe.kr 이며 /etc/bind에 파일명이 db.sy.pe.kr 인 경우

zone "sy.pe.kr" {

        type master;

        file "/etc/bind/db.sy.pe.kr";

};


7. DNS 재기동

더보기

systemctl restart named


8. 기능테스트

더보기

DNS서버에서 수행시

nslookup 등록한도메인주소

예시) nslookup sy.pe.kr

 

사용자 PC에서 수행시

DNS 서버 IP 설정 후

nslookup 도메인명

또는

nslookup 도메인명 DNS서버IP

 

수행 결과 설정한 IP가 출력되는지를 확인한다.

 

참고) 만약 이 게시물을 참조하여 외부DNS서버 구축시 (DNS파일에 ip를 외부 ip로 입력하는 등...)

         도메인을 구매한 곳에서 구성한 DNS서버 외부IP를 최초 등록 후 조회시 최소 1일이 소모됨

         또한 집에서 외부 DNS서버 구축시 사용하는 통신사가 KT가 아닌 경우

         통신사에서 고객의 DNS포트를 차단하여 불가능한 경우가 있음


그 외 설정 정보 기록 (named.conf.options파일 options 내용 중 일부)

더보기

# DNS 리스너 포트 53이 올라갈 IP 지정

listen-on port 53 { 127.0.0.1; 서버IP; };

 

# recursion yes; 설정에 의하여 외부 DNS 조회 (재귀쿼리) 허용 IP 대역 설정시

# 허용 IP대역이 아래와 같은 경우 예시

# 192.168.0.0~192.168.0.254

# 172.16.0.0~172.16.1.255

allow-recursion { 192.168.0.0/24; 172.16.0.0/23; };

 


초기에 OS로 Rocky Linux를 사용하였으나

장기간 사용하는 과정에서 특정 시간대에

CPU와 메모리 사용량이 폭증하는 현상을 식별

원인을 찾지 못 하여 데비안에 bind9으로 설치 후 동일증상이 재발하지 않았음

 

최종적으로 컨테이너 OS를 데비안으로 정한 이유는

Proxmox의 OS가 데비안으로 안전성 및 호환성 좋다라는 카더라의 글들을 보고 결정

 

홈서버로 내부망에서 호출되는 쿼리의 양이 많지않기에

메모리는 평상시 40MB 이하로 유지되며

메모리 부족시 컨테이너임으로 변경하기 편리함