자체 DNS 네임 서버를 구축해봅시다!
리눅스에서는 기본적으로 DNS 기능을 제공하고 있다는 사실, 알고 계셨나요?
오늘은 해당 기능을 활용해서 간단하게 자체 DNS 네임 서버를 구축해보는 방법을 소개 드리겠습니다!
서버 내부에서만 동작하는 아주 간단한 예제이지만, DNS를 이해하는 데에 조금이나마 도움이 되셨으면 좋겠습니다.
오늘의 목표
nslookup 명령어는 도메인에 대한 IP 정보를 확인하는 커맨드 라인 명령어인데요, 리눅스, 맥OS, 윈도우 등에서 사용할 수 있습니다.
오늘의 목표는, Ubuntu 서버 안에서 nslookup 명령어를 통해 내가 원하는 도메인과 IP를 매핑해 보는 것입니다.
도메인 | 대응되는 값 |
bind9.kr | 1.1.1.1 |
dns.bind9.kr | 2.2.2.2 |
kt.bind9.kr | 3.3.3.3 |
ns.bind9.kr | 4.4.4.4 |
www.bind9.kr | dns.bind9.kr |
왼쪽의 도메인 주소가 오른쪽의 값에 대응되도록 실습을 해 보도록 하겠습니다.
준비물
- Ubuntu 서버 1대
저는 KT Cloud 포탈에서 Ubuntu 18.04, 1vCore 1GB 사양의 서버를 한 대 생성했습니다.
이제 생성한 서버에 접속해서 본격적인 네임 서버 구축을 시작해봅시다!
(1) BIND9 설치하기
BIND9은 DNS 네임 서버를 구축하고 레코드를 관리할 수 있도록 도와주는 패키지입니다.
명령어 한 줄로 쉽게 설치할 수 있습니다.
sudo apt-get install bind9 |
(2) 현재 서버를 네임 서버로 인식하기
설치를 완료했다면, /etc/resolv.conf 파일을 열어봅시다.
위와 같이 나옵니다.
우리는 이 서버의 네임 서버가 자기 자신이 되도록 해야 하기 때문에, 아래와 같이 nameserver 값에 127.0.0.1 을 추가해 봅시다.
(3) DNS 설정
cd /etc/bind 명령어를 통해 bind 디렉토리로 이동한 후,
vim named.conf.default-zones 명령어를 통해 파일을 열어봅시다.
이 파일에는 추가된 zone에 대한 정보가 담겨있습니다. 여기서 zone이란 도메인의 정보를 말합니다.
우리는 지금 bind9.kr 이라는 도메인을 추가하고자 하므로, 해당 파일 맨 아래에 이와 같이 입력하였습니다.
- type: master / slave 중 어느 타입인지 설정합니다. 이번에는 master-slave 구조를 만들지 않고 단일 서버로만 테스트 해 볼 예정이기 때문에 master로 설정합니다.
- file: zone file의 위치를 설정합니다.
(4) Zone 파일 생성
이제 우리가 목표로 하고 있는 bind9.kr 이라는 도메인에 대한 zone 파일을 설정해보도록 하겠습니다.
cd /etc/bind 명령어를 통해 bind 디렉토리로 이동합니다.
이 디렉토리 안에 있는 db.local 파일이 기본적인 zone 파일인데요, 한 번 살펴볼까요?
- TTL: Time to live. 캐시에 zone 정보가 남아있는 데이터 유효 기간
- @: root 도메인
- SOA Record: zone에 대한 필수적인 정보를 가지고 있는 레코드
- NS Record: 해당 도메인의 IP 주소를 찾기 위해 가야 할 네임 서버 정보를 담고 있는 레코드
- A Record: 호스트 네임에 주어진 도메인에 매핑되는 IPv4 형식의 IP 주소를 저장하는 레코드
- AAAA Record: 호스트 네임에 주어진 도메인에 매핑되는 IPv6 형식의 IP 주소를 저장하는 레코드
우리의 목표에 맞춰서 이 파일을 기준으로 db.bind9.zone 파일을 한 번 만들어 봅시다.
cp db.local db.bind9.zone 명령을 통해 default zone 파일을 복사한 후, vim db.bind9.zone 을 통해 zone 파일을 편집합니다.
- @ IN SOA ns.bind9.kr. master.yes.kr.
- ns.bind9.kr. : 해당 zone의 마스터 네임 서버
- master.yes.kr. : zone 관리자 연락처
- 관리자 연락처의 경우에는 전자 메일 주소로, 첫 번째 .(온점)이 @로 대치됩니다. 예시의 경우에는 전자 메일 주소가 master@yes.kr 이 되는 셈입니다.
- CNAME Record: 도메인 네임(alias name)을 다른 이름(canonical name)으로 매핑시키는 레코드
(5) 테스트
이제 모든 작업을 완료했으니, 테스트를 한 번 해볼까요?
sudo systemctl restart bind9 을 통해 BIND9을 재시작해주고,
sudo systemctl status bind9을 통해 상태를 확인하여 아래와 같이 active 상태가 되었는지 확인합니다.
nslookup 명령어를 통해 DNS 설정이 잘 되었는지 확인해 봅니다.
A 레코드부터 마지막 CNAME 레코드까지 매우 잘 동작하는 것을 확인할 수 있습니다!
마무리
오늘은 간단한 자체 DNS 네임 서버 구축 방법을 알아보았습니다.
궁금하신 점이 있으시다면 댓글로 편하게 말씀해 주세요!
읽어주셔서 감사합니다!
관련글
'Tech story > Cloud' 카테고리의 다른 글
관리형 메시지 브로커 서비스 - Message Queue 신규 출시 (0) | 2021.10.12 |
---|---|
Cloud에 관한 거의 모든 지식#5 (Cloud와 레그 테크) (0) | 2021.09.24 |
5분이면 따라하는 kt cloud Open API 활용 팁 (2) | 2021.07.27 |
(워크플로우관리도구) Airflow 튜토리얼 #1 - Overview (0) | 2021.07.20 |
Cloud에 관한 거의 모든 지식#4 (Cloud와 메타버스) (0) | 2021.06.29 |