DNS manager

dns 레코드를 관리하기 위한 도구. Windows server 계열은 자체 dns UI를 제공하지만 linux의 named의 경우 zone 파일을 수동으로 추가/삭제하고 텍스트를 수정해야 하는 불편함이 있어 만든 도구.

Redhat 계열, Ubuntu 계열에서 웹 UI를 통해 작업할 수 있다.

Github 바이너리 링크

run 파일을 이용해 설치하고 바이너리를 실행하면 웹 ui가 실행된다.
특별한 준비는 없어도 되지만 “named 서비스가 설치 돼있어야 한다.”

별도 인증 없이 관리자 권한으로 실행되는 도구로써, 특별한 작업 없이 10분이 지나면 어플리케이션이 종료된다.

기본적인 작업 흐름은 ‘Windows Server 계열’의 DNS 관리 도구와 유사하다.

DNS 서버 구축

네임 서버(Name server)는 디렉터리 서비스 프로토콜을 실행하는 프로그램이나 서버를 통칭한다. 일반적으로, 인터넷에서 Domain Name Service (도메인 이름) 를 제공하는 서버를 말한다.1위키백과 에서 발췌

생각보다 단순한 서비스이다.
전제 조건은
1. 세상의 모든 네트워크에 연결된 장비는 숫자로 된 IP주소232bit: IPv4, 255.255.255.255 형식, 128bit: IPv6, FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF:FFFF 로 식별된다.
즉, www.haedongg.net 같은 주소를 가지는 장비는 없다는 얘기다.
2. 하지만 이 숫자로 된 주소는 인간이 기억하기 쉽지 않다.
3. 그래서 www.haedongg.net : 000.0000.000.000 같은 주소 연결이 필요하다.
는 것이다.

동작 원리는 다음과 같다.
– DNS 서버라는 녀석이 존재한다.
– 도메인 이름과 IP주소를 연결할 수 있는 정보를 가지고 있다.
(www.haedongg.net = 000.000.000.000 같은 정보)
– 사용자가 사용하는 PC에 DNS서버 정보를 미리 입력 해둔다.
– 웹 브라우저 등에서 www.haedongg.net을 입력한다.
– 사용자 컴퓨터는 hosts 라는 파일 안에 www.haedongg.net 이라는 정보가 있는지 확인한다.
– 없다면 미리 등록해둔 DNS 서버에 가서 www.haedongg.net 의 IP주소를 물어본다.
– DNS서버는 www.haedongg.net에 해당하는 주소 000.000.000.000를 반환한다.
– 000.000.000.000으로 이동한다.

위 역할을 하는 서버 DNS를 많은 ISP업체 등에서 제공하고 있다.
1.1.1.1 : cloudflare
8.8.8.8 : google
168.126.63.1 : KT
210.220.163.82 : SK boradband
164.124.101.2 : LG U+
등이 있다.

DNS 서비스 설치

haedong@haedong:/home/:]$ sudo yum install bind
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
 * base: mirror.kakao.com
Resolving Dependencies
--> Running transaction check
---> Package bind.x86_64 32:9.11.4-26.P2.el7_9.5 will be installed
...중략...
---> Package setools-libs.x86_64 0:3.3.8-4.el7 will be installed
--> Finished Dependency Resolution
Dependencies Resolved
=====================================================================================================================
 Package                             Arch               Version                            Repository           Size
=====================================================================================================================
Installing:
 bind                                x86_64             32:9.11.4-26.P2.el7_9.5            updates             2.3 M
Installing for dependencies:
 GeoIP                               x86_64             1.5.0-14.el7                       base                1.5 M
Transaction Summary
=====================================================================================================================
Install  1 Package (+13 Dependent packages)
Total download size: 6.9 M
Installed size: 18 M
Is this ok [y/d/N]: y
Downloading packages:
(1/14): bind-libs-lite-9.11.4-26.P2.el7_9.5.x86_64.rpm                                        | 1.1 MB  00:00:00
...중략...
(14/14): setools-libs-3.3.8-4.el7.x86_64.rpm                                                  | 620 kB  00:00:00
---------------------------------------------------------------------------------------------------------------------
Total                                                                                9.2 MB/s | 6.9 MB  00:00:00
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-license-9.11.4-26.P2.el7_9.5.noarch                                                      1/14
...중략...
  Verifying  : setools-libs-3.3.8-4.el7.x86_64                                                                 14/14

Installed:
  bind.x86_64 32:9.11.4-26.P2.el7_9.5

Dependency Installed:
  GeoIP.x86_64 0:1.5.0-14.el7                       audit-libs-python.x86_64 0:2.8.5-4.el7                  
  bind-libs-lite.x86_64 32:9.11.4-26.P2.el7_9.5     bind-license.noarch 32:9.11.4-26.P2.el7_9.5            
  bind-libs.x86_64 32:9.11.4-26.P2.el7_9.5          libcgroup.x86_64 0:0.41-21.el7                         
  policycoreutils-python.x86_64 0:2.5-34.el7        python-IPy.noarch 0:0.75-6.el7                         
  setools-libs.x86_64 0:3.3.8-4.el7

Complete!

서비스 설정

haedong@haedong:/home:]$ sudo  vi /etc/named.conf
// named.conf
options {
//서비스 요청을 받을 IP를 지정한다. IPv4 any로 변경한다.
        listen-on port 53 {any; };
//서비스 요청을 받을 IP를 지정한다. IPv6. any로 변경한다.
        listen-on-v6 port 53 { any; };
        directory       "/var/named";
        dump-file       "/var/named/data/cache_dump.db";
        statistics-file "/var/named/data/named_stats.txt";
        memstatistics-file "/var/named/data/named_mem_stats.txt";
        recursing-file  "/var/named/data/named.recursing";
        secroots-file   "/var/named/data/named.secroots";
// 서비스 요청을 허용해야 한다. 
        allow-query     { any; };
        recursion yes;
        dnssec-enable yes;
        dnssec-validation yes;
        bindkeys-file "/etc/named.root.key";
        managed-keys-directory "/var/named/dynamic";
        pid-file "/run/named/named.pid";
        session-keyfile "/run/named/session.key";
};

logging {
        channel default_debug {
                file "data/named.run";
                severity dynamic;
        };
};

zone "." IN {
        type hint;
        file "named.ca";
};

// 서비스 할 도메인 정보를 기재하는 파일이다. 
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";

도메인 추가

haedong@haedong:/home:]$ sudo vi /etc/named.rfc1912.zones
// named.rfc1912.zones:
zone "localhost.localdomain" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};
zone "localhost" IN {
        type master;
        file "named.localhost";
        allow-update { none; };
};
zone "1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.ip6.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "1.0.0.127.in-addr.arpa" IN {
        type master;
        file "named.loopback";
        allow-update { none; };
};
zone "0.in-addr.arpa" IN {
        type master;
        file "named.empty";
        allow-update { none; };
};

// 변환 해 줄 주소. 
// xxx.haedong.skk의 주소 정보. 즉, a.haedongg.skk haedong.haedongg.skk 등의 주소를 사용가능케 한다.
zone "haedong.skk" IN{
        type master;
// zone 파일 지정
        file "haedong.skk.zone";
        allow-update {none;};
        allow-transfer {none;};
};

zone 파일 설정

haedong@haedong:/home:]$ sudo vi /var/named/haedong.skk.zone
$TTL 1D
@       IN SOA  @ haedong.skk. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      @
        A       127.0.0.1
        AAAA    ::1
// haedong.haedong.skk 를 질의하면 172.17.0.11 을 반환한다.
haedong  IN      A       172.17.0.11
// hello.haedong.skk 를 질의하면 192.168.0.1을 반환한다.
hello    IN      A       192.168.0.1
// bye.haedong.skk 를 질의하면 www.haedongg.net을 반환한다. 
bye      IN      CNAME   www.haedongg.net

※ 위의 // 주석은 적용되지 않는다. //로 시작하는 줄은 모두 삭제한다.

vi /etc/named.rfc1912.zones 파일에 zone 정보를 기재하고 기재된 주소에 해당하는 zone 파일을 생성하고 정보를 위 양식대로 넣어주면 된다.
(호스팅 서비스 업체에서 제공하는 DNS나 등은 GUI등을 통해 설정 할 수 있다.)
생성한 zone 파일은 named 그룹이 소유권을 가지도록 설정해야 한다.

haedong@haedong:/home:]$ sudo chown -R :named /var/named/haedong.skk.zone

서비스 구동 및 확인

haedong@haedong:/home:]$ sudo service named restart
Redirecting to /bin/systemctl restart named.service
haedong@haedong:/home:]$ ps -ef | grep named
named    158850      1  0 15:17 ?        00:00:00 /usr/sbin/named -u named -c /etc/named.conf
root     158901 150715  0 15:18 pts/3    00:00:00 grep --color=auto named
haedong@haedong:/home:]$   nslookup haedong.haedong.skk
Server:         10.240.29.37
Address:        10.240.29.37#53

Name:   haedong.haedong.skk
Address: 172.17.0.11

named 는 UDP 53 포트로 서비스한다.
방화벽(firewalld / iptables)등에서 UDP53번 포트를 허용하지 않으면 서비스 되지 않는다.