King of Stock
[DNS] ubuntu server 18.04 DNS 서버 구성해보기 본문
DNS 서버 환경설정
본 문서에서는 같은 네트워크(subnet)에서 특정 dns 서버를 지정한 호스트들이 사용할 우분투 DNS 서버 설정을 가이드 한다. 현재 설정된 DNS 서버의 정보는 아래와 같다. 참고로 이 서버는 윈도우 워크스테이션 하위에 VMware workstation(VMware Workstation Pro 다운로드) 가상화를 통해서 설치된 서버이다
- 서버 IP 주소: 192.168.100.3
- DNS 서버 호스트 이름: ns1.kuk.lab
- 호스트 OS: Ubuntu 18.04 server(Download Ubuntu Server)
- 호스트 관리자 계정: dns
- DNS 구성에 사용한 패키지: bind9
DNS 서버 호스트 변경
DNS 서버의 호스트 이름을 다음의 명령어를 통해서 의미 있는 이름으로 변경한다.
$ hostnamectl set-hostname ns1.kuk.lab
==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ===
Authentication is required to set the statically configured local host name, as well as the pretty host name.
Authenticating as: dns
Password:
==== AUTHENTICATION COMPLETE ===
$ hostnamectl status
Static hostname: ns1.kuk.lab
Icon name: computer-vm
Chassis: vm
Machine ID: u433e252ada44a248b064092916ac8e0
Boot ID: a1b314eb70f8102b9241b7ue901ce7cd
Virtualization: vmware
Operating System: Ubuntu 18.04.3 LTS
Kernel: Linux 4.15.0-72-generic
Architecture: x86-64
DNS 서버 고정 IP 설정
DNS 서버는 고정 IP로 지정을 해야 하니 다음과 같이 작업을 한다. 네트워크 인터페이스 목록을 확인하고 해당 인터페이스에 대한 IP를 설정하였다.
# 네트워크 인터페이스 확인
$ ls /sys/class/net
ens33 lo
# 설정하기 전에 백업
$ sudo cp /etc/netplan/50-cloud-init.yaml /etc/netplan/50-cloud-init.yaml.20191221
$ sudo vi /etc/netplan/50-cloud-init.yaml
# 다음과 같이 추가 및 수정
network:
ethernets:
ens33:
addresses: [192.168.100.3/24]
gateway4: 192.168.100.1
nameservers:
addresses: [192.168.100.3,8.8.8.8]
dhcp4: false
version: 2
# 아래와 같이 실행하면 IP 변경이 처리가 되고 ssh 연결이 끊긴다. 재접속을 하여 검증이 된 것으로 봐도 무방함
$ sudo netplan apply
DNS 동작을 처리하는 패키지 설치
본 서버는 간단하게 설정 할 수 있는 bind9(CentOS에서는 bind) 패키지를 설치하여 사용하였다. 다음과 같이 설치했다.
$ sudo apt-get install -y bind9
bind9 설정
로그 설정
문제가 발생했을때 확인을 위해서 로그 설정을 다음과 같이 하였으며 그 내용은 다음과 같다. 이 설정은 bind9 로그설정 참고하여 설정하였다.
$ sudo vi /etc/bind/named.conf
# 다음과 같이 추가
logging {
channel default_debug {
file "/var/lib/bind/bind.log" versions 10 size 20m;
print-time yes;
print-severity yes;
print-category yes;
severity info;
};
category queries { "default_debug"; };
category default { "default_debug"; };
category config { "default_debug"; };
};
bind9 설정
bind9 패키지에 기본적인 설정을 위해서 다음과 같은 설정을 하였다. 이 DNS 서버는 동일한 네트워크(subnet) 혹은 로컬에서만 53포트를 통해 listen 한다.
$ sudo vi /etc/bind/named.conf.options
# 다음과 같이 추가
listen-on port 53 { localhost; 192.168.100.0/24; }; # 로컬호스트 혹은 동일한 서브넷의 요청에 대해서 listen
allow-query { any; }; # 허용하는 쿼리는 종류에 상관 없음
forwarders { 192.168.100.1; }; # 인터넷을 위한 게이트웨이 주소를 forwarders 로 설정
bind9 zone 설정
여기서 설정하여 사용하는 메인 도메인은 kuk.lab
으로 지정하고 다음과 같이 정방향, 역방향 zone 설정을 하였다. 역방향의 경우에는 설정을 하지 않아도 되지만 나의 경우에는 vsphere, esxi, bosh 관련 테스트를 해보기 위해서 정방향 및 역방향을 모두 설정해줘야 정상 동작하기 때문에 모두 설정을 하였다. 집에서 간단하게 dns 서버를 만들고 내 PC 환경에서만 이용하는 것이라면 설정하지 않아도 될것으로 보인다.
정방향 설정
아래에
file "kuk.lab.zone";
와file "kuk.lab.zone.rev";
설정을 통해서 zone 설정파일을 분리하였다.$ sudo vi /etc/bind/named.conf.local // forward zone config zone "kuk.lab" IN { type master; file "kuk.lab.zone"; };
역방향 설정
$ sudo vi /etc/bind/named.conf.local // backward zone config zone "100.168.192.in-addr.arpa" IN { type master; file "kuk.lab.zone.rev"; };
정방향 상세 설정
위에서 설정한 정방향 설정에 대한 실제 설정 파일을 다음과 같이 만들고 내용을 추가한다. 상세 설정 내용에
; serial
,; dns server
등의 구문은 주석이다.$ sudo touch /var/cache/bind/kuk.lab.zone
$ sudo vi /var/cache/bind/kuk.lab.zone # 다음과 같이 추가 $TTL 30 @ IN SOA kuk.lab. root.kuk.lab. ( 2019122114 ; serial 3600 ; refresh 900 ; retry 604800 ; expire 86400 ; minimum ttl ) ; dns server @ IN NS ns1.kuk.lab. ; ip address of dns server ns1 IN A 192.168.100.3 ; A Record list of vsphere in kuk home lab ; vCenter vcsa IN A 192.168.100.100 ; esxi host in window workstation esxi1 IN A 192.168.100.101 ; esxi host in window notebook esxi2 IN A 192.168.100.102
역방향 상세 설정
위에서 설정한 역방향 설정에 대한 실제 설정 파일을 다음과 같이 만들고 내용을 추가한다.
$ sudo touch /var/cache/bind/kuk.lab.zone.rev
$ sudo vi /var/cache/bind/kuk.lab.zone.rev # 다음과 같이 추가 $TTL 30 @ IN SOA kuk.lab. root.kuk.lab. ( 2019122114 ; serial 3600 ; refresh 900 ; retry 604800 ; expire 86400 ; minimum ttl ) ; dns server @ IN NS ns1.kuk.lab. ; ip address of dns server 3 IN PTR ns1.kuk.lab. ; A Record list of vsphere in kuk home lab ; vCenter 100 IN PTR vcsa.kuk.lab. ; esxi host in window workstation 101 IN PTR esxi1.kuk.lab. ; esxi host in window notebook 102 IN PTR esxi2.kuk.lab.
bind9 설정 검증
bind9에서 설정 파일의 검사를 할 수 있는 유틸리티를 제공하기 때문에 다음과 같이 설정을 검사해본다.
$ named-checkconf
# 아무 결과가 없는 것이 정상
$ /usr/sbin/named-checkzone kuk.lab /var/cache/bind/kuk.lab.zone
zone kuk.lab/IN: loaded serial 2019122114
OK
$ /usr/sbin/named-checkzone 192.168.100.3 /var/cache/bind/kuk.lab.zone.rev
zone 192.168.100.3/IN: loaded serial 2019122114
OK
bind9 자동 활성화, 재시작 그리고 상태 확인
OS 부팅시 자동으로 bind9 구동
$ sudo systemctl enable bind9
위에서 설정했던 내용을 적용하기 위해 재시작
$ sudo systemctl restart bind9
부팅이후 정상적으로 구동 되었는지 상태 검사
$ sudo systemctl status bind9 [sudo] password for dns: ● bind9.service - BIND Domain Name Server Loaded: loaded (/lib/systemd/system/bind9.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2019-12-18 07:12:58 UTC; 17min ago Docs: man:named(8) Process: 1601 ExecStop=/usr/sbin/rndc stop (code=exited, status=0/SUCCESS) Main PID: 1604 (named) Tasks: 4 (limit: 2290) CGroup: /system.slice/bind9.service └─1604 /usr/sbin/named -f -u bind Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: 9.E.F.IP6.ARPA Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: A.E.F.IP6.ARPA Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: B.E.F.IP6.ARPA Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: 8.B.D.0.1.0.0.2.IP6.ARPA Dec 18 07:12:58 ns1.kuk.lab named[1604]: automatic empty zone: EMPTY.AS112.ARPA Dec 18 07:12:58 ns1.kuk.lab named[1604]: none:103: 'max-cache-size 90%' - setting to 1773MB (out of 1970MB) Dec 18 07:12:58 ns1.kuk.lab named[1604]: configuring command channel from '/etc/bind/rndc.key' Dec 18 07:12:58 ns1.kuk.lab named[1604]: command channel listening on 127.0.0.1#953 Dec 18 07:12:58 ns1.kuk.lab named[1604]: configuring command channel from '/etc/bind/rndc.key' Dec 18 07:12:58 ns1.kuk.lab named[1604]: command channel listening on ::1#953
nslookup 커맨드를 통한 실제 동작을 확인
DNS 서버를 이용하는 다른 클라이언트들은 자체 캐시도 가지는 경우가 많으니 필요하면 자신의 환경에서 DNS 캐시를 클리어 하거나 재시작 통해서 테스트 전에 미리 준비한다.
DNS 서버 내부에서 확인
dns 서버 찾기
dns 서버를 지정하여 ns1.kuk.lab 도메인을 찾아본다.
$ nslookup ns1.kuk.lab localhost.localdomain Server: localhost.localdomain Address: ::1#53 Name: dns.kuk.lab Address: 192.168.100.3
A 레코드 도메인 찾기
$ nslookup vcsa.kuk.lab localhost.localdomain Server: localhost.localdomain Address: ::1#53 Name: vcsa.kuk.lab Address: 192.168.100.100
DNS 외부의 클라이언트에서 확인
DNS 서버를 지정한 클라이언트에서 다음 커맨드를 사용해서
nslookup
커맨드를 실행할 것을 유의한다.$ nslookup vcsa.kuk.lab Server: 192.168.100.3 Address: 192.168.100.3#53 Name: vcsa.kuk.lab Address: 192.168.100.100
참고 레퍼런스(감사합니다. 블로거님들)
'IT 기술' 카테고리의 다른 글
C# EntityFramework 설정 (0) | 2021.02.28 |
---|---|
VSCode diff 툴 (0) | 2020.08.25 |
[shell] if문에서 문자열 비교가 안될때 (0) | 2019.12.05 |
[Kubernetes] StatefulSet podAntiAffinity (0) | 2019.08.03 |
[test] TestRestTemplate (0) | 2019.07.07 |