프로젝트를 진행하다보면 사설IP가 아닌 원하는 도메인으로 서비스를 띄우는 것이 보다 직관적이고 유용합니다. 우선 다음과 같은 사설망을 가정해봅시다.

Virtual intranet topology

서버에서 특정 서비스(예를 들면 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를 활용할 수 있습니다.

  1. 고급 설정 > 네트워크 관리 > 인터넷 연결 설정
  2. “수동으로 공유기의 DNS서버 설정” 체크
  3. “기본 DNS 서버”에 위에서 구축한 서버 IP주소 입력 (예: 192.168.0.5)
  4. “보조 DNS 서버”에 기존에 할당된 ISP의 DNS IP주소 입력

iptime DNS 설정

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;
}