티스토리 뷰

Server/EtcServer

Make a DNS Server using webmin

jacobbaek Jacob_baek 2021. 5. 7. 23:14

kubernetes 환경 및 기타 분산환경에 기반한 소프트웨어를 테스트 하다보면 DNS 서버가 중요한 역할을 하는 것을
볼수 있었다. 이러한 중요 DNS를 구매하여 설정하여도 되지만 폐쇄망의 경우를 가정한 테스트를 수행하는 경우
이를 구현하기가 좀 귀찮은 부분이 많다보니 좀더 쉽게 구성할수 있는 방법은 무엇일가 고민하다 webmin을 통해
좀더 손쉬운 구성방법을 사용해본 내용을 정리하게 되었다.

webmin 이란

먼저 webmin을 간단히 설명하자면 시스템 관리자를 위한 웹 기반 interface 이다.
즉, web 을 이용하여 좀더 쉽게 시스템을 관리할수 있다는 돕는 도구라 보면 좋다.

"시스템 관리자를 위한" 에서 어느정도 눈치를 챘겠지만 다양한 시스템적인 서버들을 web을 이용하여 구성하고 설정할수 있다.

webmin 설치

CentOS 7 기준으로 간단한 설치를 진행하였다.
(docker 와 같은 container로 동작을 시킬수도 있지만 nameserver나 그외의 서버를 동작시마다 listening 해야
하는 port를 expose 해야해서 아예 container기반이 아닌 package로 설치하는것이 좀더 편리하다.)

아래와 같은 패키지를 설치한다.

[root@centos7-server vagrant]# yum -y install perl perl-Net-SSLeay openssl perl-IO-Tty perl-Encode-Detect 
[root@centos7-server vagrant]# yum -y unzip perl-Data-Dumper # <=== 추가로 필요했었음

설치후 제공된 최신의 webmin rpm을 rpm 명령을 이용해 설치한다.

[root@centos7-server vagrant]# rpm -ivh http://prdownloads.sourceforge.net/webadmin/webmin-1.974-1.noarch.rpm
Retrieving http://prdownloads.sourceforge.net/webadmin/webmin-1.974-1.noarch.rpm
warning: /var/tmp/rpm-tmp.0jFA3g: Header V4 DSA/SHA1 Signature, key ID 11f63c51: NOKEY
Preparing...                          ################################# [100%]
Operating system is CentOS Linux
Updating / installing...
   1:webmin-1.974-1                   ################################# [100%]
Webmin install complete. You can now login to https://centos7-server:10000/
as root with your root password.

설치후 아래와 같이 https://[서버주소]:10000으로 접속하여 webmin을 구동한 서버의 계정정보로 접근을 한다.

접근시 다음과 같은 화면이 출력되고 각종 서비스를 설치하고 손쉽게 설정하여 사용할 수 있다.

webmin DNS server

다양한 서비스를 설치 및 설정할수 있지만 여기서는 DNS의 사용에 대하여만 알아보도록 하자.

BIND Server 설치

먼저 Bind 서버를 설치해보자. webmin은 package update 및 새로운 package를 설치할수도 있다. 아래와 같이 bind package를
search 하여 bind package를 선택하여 설치를 진행하자.

아래와 같이 Bind 설치가 완료되면

Un-used Modules 메뉴상에 Bind DNS Server로 이동하면 BIND DNS Server의 설정 화면이 출력된다.

master zone 생성

이제 zone을 생성해보자.
먼저 "Create master zone" 버튼을 클릭하여 zone을 생성하자.

Domain name / Network 및 Master server, Email address를 입력하고 create 버튼을 눌러 master zone을 생성하자.
생성이 완료되면 아래와 같이 앞서 생성했던 example.com이 Existing DNS Zone으로 출력되고 이를 다시 클릭하여 A/NS
Record 추가작업을 수행하자.

이제 다음과 같은 화면이 출력되고 아래 숫자와 같이 Nameserver에 도메인 및 Address에 추가할 사용될 도메인주소에 매핑될 IP를 입력하자.

  1. A Record 추가 : NS Record의 IP 주소 / 사용할 도메인의 IP 주소 입력
  2. NS Record 추가 : NS Record의 도메인 주소

첫번째 Name Server를 선택하고 다음과 같이 ns.example.com을 name server로 생성하자.
(앞서 Master zone 생성시 "Add NS record for master server" 라는 checkbox가 선택되었었다면 해당 항목을 skip해도 무방하다.)

아래와 같이 생성된 example.com의 NS record가 ns.example.com 임을 확인할 수 있다.

이제 사용할 도메인 및 앞서 생성한 NS record 에 매핑되는 IP 주소를 입력하도록 해보자.
먼저 앞서 생성했던 ns.example.com에 대한 A record를 입력하자.

NS record에 대한 A record 입력이 완료되면 다음으로 서비스될 도메인의 IP 주소를 아래와 같이 입력하자.

모두 생성이 완료된후 다음과 같이 NS Record를 사용하는 Name server의 주소와 서비스될 도메인의 IP가
A record로 확인되는것을 볼수 있다.

사용할 도메인에 대한 IP 정보까지 추가를 하였으면 마지막으로 named 서버의 설정을 변경해주자.
(기본적으로 localhost에 53번만 접근이 가능하기에 any로 접근이 될수 있도록 변경하고 이와 함께 외부 질의가 가능하게
forwarder 설정도 추가하자.)
먼저 아래와 같이 Edit Config File을 선택하자.

또한 앞서 named.conf의 설정이 기본설정만 되어 있는 상황이기에 기본적이 DNS 설정을 추가 및 변경하자.
(여기서는 필히 바꾸어 주어야 할 설정을 추가했으니 기존 conf 파일내에 존재하는 정보를 삭제하지는 않고 필요한 내용만 변경 및 추가한다.)

options {
    listen-on port 53 { any; };
    ...
    recursion yes;
    ...
    allow-query     { any; };
    ...
    forwarders {
        8.8.8.8;
        8.8.4.4;
    };

아래와 같이 named.conf를 수정하고 Save를 눌러 저장하자.

이제 설정은 마무리되었고 변경한 정보를 기반으로 bind 서버를 시작해야 한다.
이유는 앞서 bind 설치는 진행했지만 서비스 시작은 안했고 추가한 도메인 및 Record 정보를 load 해야 하기 때문이다.
다음과 같이 named service를 시작시켜준다.

[root@centos7-server vagrant]# systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
   Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@centos7-server vagrant]# systemctl enable named --now
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.

이제 DNS 서버 구성이 완료되었다.

확인작업

먼저 앞서 추가한 web.example.com이 정상적으로 lookup이 이루어지는 확인해보자.
(참고로 @는 DNS 서버를 지정한것이라 보면 된다.)

jacob@jacob-laptop:~/workspaces/vagrants$ dig @192.168.56.10 web.example.com

; <<>> DiG 9.16.1-Ubuntu <<>> @192.168.56.10 web.example.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 45360
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
; COOKIE: fdf838f3d0693fb2ec6beff86095482f0574fa9760cfb2d4 (good)
;; QUESTION SECTION:
;web.example.com.        IN    A

;; ANSWER SECTION:
web.example.com.    3600    IN    A    192.168.56.30

;; AUTHORITY SECTION:
example.com.        3600    IN    NS    ns.example.com.

;; ADDITIONAL SECTION:
ns.example.com.        3600    IN    A    192.168.56.10

;; Query time: 0 msec
;; SERVER: 192.168.56.10#53(192.168.56.10)
;; WHEN: 금  5월 07 23:01:19 KST 2021
;; MSG SIZE  rcvd: 121

forwarder가 정상동작하는지 확인을 위해 아래와 같이 naver.com을 질의해 보았다.

jacob@jacob-laptop:~/workspaces/vagrants$ dig +noall +answer @192.168.56.10 naver.com
naver.com.        62    IN    A    223.130.195.200
naver.com.        62    IN    A    125.209.222.142
naver.com.        62    IN    A    223.130.195.95
naver.com.        62    IN    A    125.209.222.141
jacob@jacob-laptop:~/workspaces/vagrants$ dig +noall +answer @1.1.1.1 naver.com
naver.com.        66    IN    A    223.130.195.95
naver.com.        66    IN    A    125.209.222.141
naver.com.        66    IN    A    223.130.195.200
naver.com.        66    IN    A    125.209.222.142

위와 같이 추가한 domain에 대한 질의 및 외부 DNS 서버에 질의를 전달하는 방식까지 모두 동작함을 확인하였다.
이제 위 서버를 통해 조금이나마 쉽게 DNS 테스트 환경을 구성하고 테스트 해볼수 있을거라 생각된다.

참고사이트

'Server > EtcServer' 카테고리의 다른 글

Make a DNS Server using webmin  (0) 2021.05.07
IPMI admin setting by ipmitool  (0) 2020.10.14
memory doesn't recognize if memory is added at the slot  (0) 2020.07.01
Graylog  (0) 2017.10.12
HAProxy  (0) 2015.11.17
jenkins with scp plugin  (0) 2013.01.30
댓글
댓글쓰기 폼