내부망에서 구매한 도메인 주소로 내부에 있는 서버 접근시
불필요하게 외부를 통하여 접근하기 때문에
보안 및 효율을 위해서 내부에서는 내부망용 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 이하로 유지되며
메모리 부족시 컨테이너임으로 변경하기 편리함