bind9으로 사설망 DNS 구축하기
프로젝트를 진행하다보면 사설IP가 아닌 원하는 도메인으로 서비스를 띄우는 것이 보다 직관적이고 유용합니다. 우선 다음과 같은 사설망을 가정해봅시다.
서버에서 특정 서비스(예를 들면 80포트의 nginx)를 각 PC에서 http://192.168.0.5
처럼 IP기반이 아닌 http://www.itanoss.home
식의 도메인으로 접근하고자 하는 것이 목표입니다.
bind9 설치
리눅스 진영에서 DNS로서 bind9
가 가장 널리 사용되고 있습니다.
sudo apt-get install bind9
우선 새로 구축한 DNS가 ISP의 DNS를 포워딩할 수 있게 /etc/bind/named.conf.options
를 다음과 같이 수정합니다.
forwarders {
// KT DNS
168.126.63.1;
168.126.63.2;
// Google DNS
8.8.8.8;
8.8.4.4;
};
Zone File 생성
하나의 domain name이 해당하는 단위를 zone이라고 칭합니다. zone 단위로 설정이 가능하며 해당 zone에 대한 상세 설정을 명시하기 위해 다음과 같이 /etc/bind/named.conf.local
에 추가합니다.
zone "0.168.192.in-addr.arpa" {
type master;
notify no;
file "/etc/bind/db.0.168.192";
};
위에서 명시한대로 상세한 설정을 /etc/bind/db.0.168.192
을 작성해야 합니다. 앞서 예시한대로 템플릿을 활용할 수 있습니다.
sudo cp /etc/bind/db.local /etc/bind/db.itanoss.home
$TTL 604800
@ IN SOA ns.itanoss.home. root.itanoss.home. (
1 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.itanoss.home.
ns IN A 192.168.0.5
www IN A 192.168.0.5
;also list other computers
dev IN A 192.168.0.6
Reverse zone file 생성
DNS가 domain name을 IP주소로 변경하는 것 뿐만 아니라 IP주소를 domain name으로 변경하는 역할 또한 중요합니다. 위와 비슷하게 다음과 같이 설정을 구성할 수 있습니다. 다음과 같이 /etc/bind/named.conf.local
에 추가합니다.
zone "itanoss.home" {
type master;
file "/etc/bind/db.itanoss.home";
};
위에서 명시한대로 상세한 설정을 /etc/bind/db.itanoss.home
을 작성해야 합니다. 작성하기에 앞서 다음과 같이 템플릿을 활용할 수 있습니다.
sudo cp /etc/bind/db.local /etc/bind/db.0.168.192
$TTL 604800
@ IN SOA ns.itanoss.home. root.itanoss.home. (
2 ; Serial
604800 ; Refresh
86400 ; Retry
2419200 ; Expire
604800 ) ; Negative Cache TTL
;
@ IN NS ns.
5 IN PTR ns.itanoss.home.
5 IN PTR www.itanoss.home.
; also list other computers
6 IN PTR dev.itanoss.home.
테스트
sudo service bind9 restart
DNS 서비스를 재시작하고 PC(클라이언트)에서 DNS를 위에서 명시한 서버 (예시 기준: 192.168.0.5
)로 설정 후 웹 브라우저에서 http://www.itanoss.home/
와 같이 접근하거나 다음과 같이 네임서버를 통해 IP주소를 잘 받아오는 지 체크해볼 수 있습니다.
nslookup
> www.itanoss.home
Server: 192.168.0.5
Address: 192.168.0.5#53
Name: www.itanoss.home
Address: 192.168.0.5
공유기 내 DNS 설정
기본적으로 DNS는 위와 같이 설정을 완료하였지만 클라이언트에서 해당 DNS를 사용하려면 수동으로 명시해야만 합니다. 대다수의 PC환경은 DHCP를 통해 동적 IP주소를 할당받는 형태이고 DHCP를 통해 DNS도 자동으로 받아오게 됩니다. iptime 기준으로 다음과 같은 설정으로 클라이언트에서 위에서 구축한 DNS를 활용할 수 있습니다.
- 고급 설정 > 네트워크 관리 > 인터넷 연결 설정
- “수동으로 공유기의 DNS서버 설정” 체크
- “기본 DNS 서버”에 위에서 구축한 서버 IP주소 입력 (예:
192.168.0.5
) - “보조 DNS 서버”에 기존에 할당된 ISP의 DNS IP주소 입력
DHCP 서버 구축
때로는 공유기 내의 DHCP 서버를 사용하지 않고 DHCP 서버를 별도로 구축할 수도 있습니다. subnet mask등의 정책 등에 따라 동적 IP주소를 할당한 클라이언트 대상을 정하고 그 대상들이 어떤 IP주소를 받을 지를 사전에 정할 수 있습니다. 이와 함꼐 DNS 자동 할당에 대해서도 설정이 가능합니다.
우분투 진영에서 자주 사용되는 isc-dhcp-server
를 설치하겠습니다.
sudo apt-get install isc-dhcp-server
다음과 같이 /etc/dhcp/dhcpd.conf
를 수정하여 의도한대로 DNS 자동 할당되게 설정합니다.
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.0.255;
option routers 192.168.0.1;
option domain-name "itanoss.home";
option domain-name-servers 192.168.0.5 168.126.63.1 8.8.8.8;
subnet 192.168.0.0 netmask 255.255.255.0 {
range 192.168.0.100 192.168.0.199;
}