[Micro Service 추천] dnsmasq - hosts 파일로 DNS 구축하기
안녕하세요. SAP 운영자 ST03 입니다.
DNS 운용을 하려다가 찾게 된 Micro Service 인 dnsmasq 를 소개 해 드리려고 합니다.
#1 사용 시 얻는 장점
DNS 세팅을 하면서 느낀 점은 너무 전문화 된 서비스 라는 점 입니다. 대형의 대외 IT 서비스를 하는 경우라면 DNS 를 구축해서 운용 할 필요가 있겠지만 운영서버 100여대 이하의 소~중형 규모의 내부 서비스 대상으로는 너무 귀찮은 설정이 많다는 느낌 입니다. (솔직히 대외서비스 라고 해도 국내 서비스는 보통 100여대로 커버 할 것이기 때문에...)
그에 비해 dnsmasq 는 hosts 파일에 있는 정보를 그대로 DNS 설정 파일로 사용 할 수 있다는 점이 큰 매력으로 다가왔습니다. 소형 서비스이기 때문에 docker 등으로 microservice 화 시킴으로써 서비스를 더 안정적으로 운용 할 수 있는 점도 좋게 다가왔습니다.
저 같은 경우는 Mac 에 VM 들을 많이 운용하는데 SAP 시스템 특성 상 FQDN 이 없으면 불편 한 경우가 많습니다. 하지만 DNS 설정은 너무 귀찮았던 차에 이를 발견해서 사용하고 있는데 너무 편하고 좋더군요. 저와 같이 컴퓨터 내에 테스트/개발 환경을 다량으로 VM 으로 운용하는 경우에도 추천 드리고 microservice 를 운영하는 사내망을 운용하는 경우에도 추천 드립니다.
#2 설치 방법
Mac 에서 설치 (homebrew 설치 필요. homebrew 설치는 다른 포스트 참조)
[MacforST03:~] st03% brew install dnsmasq
Ubuntu 및 데비안 계열에서 설치
# apt-get install dnsmasq
Redhat 계열에서 설치
[root@saptest ~]# yum install dnsmasq
#3 초기 설정하기
먼저 설정 할 본인의 domain 을 정해 놓습니다.
예를 들어서 제가 운영할 서버 목록이 test01.st03.com test02.st03.com test03.st03.com 이라고 하면 test01, test02, test03 들은 hostname 또는 서버 이름이고 st03.com 이 도메인 입니다.
즉 서버 묶음 단위라고 생각하면 되겠습니다.
dnsmasq.conf 파일을 찾아서 필요한 부분을 설정 합니다.
Mac 에서는 아래 커맨드로 설정 파일을 엽니다.
[MacforST03:~] st03% sudo vim /usr/local/etc/dnsmasq.conf
그 외 Linux 에서는 커맨드로 설정 파일을 엽니다.
[root@saptest ~]# vi /etc/dnsmasq.conf
79번째 라인에 있는 # 을 없애고 아래 rule 대로 변경 합니다. (79번째는 IPv4 이고 IPv6 의 경우에는 82번째를 변경하면 됩니다)
address=/[도메인 명]/[DNS resolver]
** 유용한 vi/vim 명령어 1 | /[검색어] | 특정 단어or문장 검색하기 (n 을 누르면 다음으로 넘어갈 수 있음)
** 유용한 vi/vim 명령어 2 | /set number | 각 라인 앞에 번호 표시
** 유용한 vi/vim 명령어 3 | i | edit 모드로 변경 (나가려면 esc)
** 유용한 vi/vim 명령어 4 | :wq | w 는 변경 건에 대한 저장, q 는 나가기. 두개를 같이 쓰면 저장하고 나가기.
원본
76 # Add domains which you want to force to an IP address here.
77 # The example below send any host in double-click.net to a local
78 # web-server.
79 #address=/double-click.net/127.0.0.1
80
81 # --address (and --server) work with IPv6 addresses too.
82 #address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83
변경 후 (예시)
76 # Add domains which you want to force to an IP address here.
77 # The example below send any host in double-click.net to a local
78 # web-server.
79 address=/st03.com/127.0.0.1
80
81 # --address (and --server) work with IPv6 addresses too.
82 #address=/www.thekelleys.org.uk/fe80::20d:60ff:fe36:f83
변경을 완료 하였다면 아래 커맨드로 dnsmasq 를 재시작 합니다.
Mac
[MacforST03:~] st03% sudo launchctl stop homebrew.mxcl.dnsmasq
[MacforST03:~] st03% sudo launchctl start homebrew.mxcl.dnsmasq
Linux
[root@saptest ~]# service restart dnsmasq
DNS 에서 서비스 할 서버 내역은 dnsmasq 가 설치 된 서버의 /etc/hosts 파일에 넣어 놓습니다.
[MacforST03:~] st03% cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting. Do not change this entry.
##
127.0.0.1 localhost
255.255.255.255 broadcasthost
::1 localhost
192.168.174.200 saptest.st03.com saptest
192.168.174.201 sapjava1.st03.com sapjava1
192.168.174.202 sapjava2.st03.com sapjava2
#4 DNS 설정하기
일단 dnsmasq 를 설치한 서버의 IP 를 확인 해 놓습니다. 저희 경우에는 192.168.174.1 입니다.
그리고 DNS 를 사용할 각 서버들에 DNS 설정을 넣어 줍니다.
Mac 및 Linux 의 경우에는 아래 순서대로 진행 합니다.
마지막 줄은 기존에 있던 값 입니다.
[root@saptest ~]# vi /etc/resolv.conf
# Generated by NetworkManager
search st03.com
nameserver 192.168.174.1
nameserver 192.168.1.1
이후 내부 서버에 접속이 되는지 테스트 해 봅니다.
[root@saptest ~]# ping -c 3 sapjava1
PING sapjava1.st03.com (192.168.174.201) 56(84) bytes of data.
64 bytes from sapjava1.st03.com (192.168.174.201): icmp_seg=1 ttl=64 time=0.442 ms
64 bytes from sapjava1.st03.com (192.168.174.201): icmp_seg=2 ttl=64 time=0.299 ms
64 bytes from sapjava1.st03.com (192.168.174.201): icmp_seg=3 ttl=64 time=0.296 ms
--- sapjava1.st03.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 0.296/0.345/0.442/0.071 ms
[root@saptest ~]#