DNS - bind
이전 게시글에서 windwos server에서 DNS 서버를 구축해 보았습니다.
2024.04.25 - [OS/Windows] - DNS 서버 구성
DNS 서버 구성
windows server 2022에서 dns 서버를 구성해보겠습니다.dns에 대한 설명은 이전 게시글을 참고해주세요!2024.04.25 - [Network] - DNS DNSDNS란?DNS(Domain Name System)는 인터넷에서 도메인 이름을 IP 주소로 변환하고
engineer1.tistory.com
이번 게시글은 bind를 사용하여 Linux에 DNS 서버를 구축해 보겠습니다.
BIND(Berkeley Internet Name Domain)는 DNS 서버를 구성하기 위해 사용하는 상용화된 소프트웨어입니다.
BIND의 주요 기능과 특징으로는 DSN의 쿼리 처리, 캐싱, 도메인 관리, 보안 등 여러 가지 기능이 있고, Linux에서 주로 사용하지만, 다양한 플랫폼에서도 동작할 수 있습니다.
BIND를 사용하여 windows server에서 했던 것처럼 정방향 조회 영역과 역방향 조회영역, 레코드 등록 방법에 대해 알아보겠습니다.
DNS서버 구성환경은 centos7에서 진행하겠습니다. 구성 환경에 따라 dns의 udp와 tcp의 53번 포트를 열어주시면 됩니다.
일반적으로 udp를 사용하지만 로드가 많은 경우(메시지의 크기가 크거나 마스터와 슬레이브 간의 동기화 작용(zone-transfer) 시) tcp를 사용합니다.
1. BIND 설치
bind를 패키지로 설치합니다.
yum install -y bind*
bind의 dns서비스는 named로 동작합니다. -v옵션으로 버전을 확인하겠습니다.
# named -v
BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 (Extended Support Version) <id:>
2. DNS 설정
2-1) named.conf 설정
vi /etc/named.conf
named.conf파일은 네임서버의 접근 IP와 포트를 지정할 수 있고, DNS의 zone파일 위치, 캐시정보, 통계파일 등의 경로를 지정하거나 DNS의 구성을 지정하는 파일입니다.
DNS의 동작 방식을 이해하기 위해 테스트를 진행하는 단계이므로 바꿀 설정을 최소화하여 진행하겠습니다.
options {
listen-on port 53 { 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;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
ipv4와 ipv6의 접근가능 ip를 모든 ip라고 지정하고, 테스트를 위해 dns에 쿼리를 허용하도록 합니다.
recursion 옵션은 AUTHORITATIVE DNS 서버에서 다른 DNS 서버들에게 요청된 도메인에 대한 정확한 정보를 제공하기 위한 옵션입니다.
DNS서버를 구현하고자 하는 목적에 따라 해당 옵션을 yes 또는 no로 지정해 주시면 되고, 테스트를 하기 위해서는 정확한 정보를 받아야 하기 때문에 yes로 지정하여 진행하겠습니다.
DNSSEC은 본적인 DNS 프로토콜은 데이터 전송 시 보안을 제공하지 않기 때문에 DNS 쿼리 및 응답이 조작될 가능성이 있어 보안적인 측면을 강화하기 위해 사용됩니다.
DNSSEC을 사용하기 위해서는 도메인 등록 서비스 제공업체(Registrar)가 DNSSEC을 지원해야 하고, 도메인 소유자 또한 DNSSEC 서명을 생성하고 관리할 수 있어야 합니다.
이제 zone파일을 설정하겠습니다.
2-2) named.rfc1912.zones 설정
vi /etc/named.rfc1912.zones
기본적으로 로컬 호스트 도메인, ipv6에 대한 루프백, 로컬 호스트의 루프백 인버스 도메인, 제로 호스트에 대한 루프백 설정등이 있습니다.
DNS서버에 추가할 zone을 해당 설정 아랫줄에 추가해 줍니다.
zone "domain.com" IN {
type master;
file "domain.com.zone";
allow-update { none; };
};
zone "249.xx.115.in-addr.arpa" IN {
type master;
file "domain.com.rev";
allow-update { none; };
};
file의 기본 디렉터리는 /var/named입니다. 지정된 위치에 file의 이름으로 zone의 설정을 불러오도록 설정합니다.
type의 설정으로 하나의 네임 서버에 단일(master 1개) 또는 master, slave DNS를 지정할 수 있습니다.
slave와 master dns는 아래와 같이 설정합니다.
zone "domain.com" IN {
type master;
file "domain.com.zone";
allow-transfer { 10.0.0.0/8; } # DNS의 존 파일을 전송(동기화) 할 때
allow-update { 10.0.0.0/8; }; # slave 서버 ip, DNS의 존 파일을 업데이트 할 때
};
zone "domain.com" IN {
type slave;
file "domain.com.zone";
masters { 115.x.249.x; } # master 서버의 ip
};
transfer과 update는 DNS의 보안을 위해 사용에 주의하셔야 합니다.
2-3) .zone, .rev 파일 생성
BIND의 named는 .zone파일과 .rev파일의 group 권한이 named가 되어야 합니다.
그렇기 때문에 기본적인 설정 틀과 권한 이슈를 최소화하기 위해 cp명령어로 다른 파일들을 복사하는 것이 좋습니다.
cd /var/named
cp -ar named.localhost domain.store.zone
cp -ar named.loopback domain.store.rev
2-4) record 생성
zone은 정방향, rev는 역방향을 지정하는 파일입니다.
먼저 정방향 조회 영역을 설정하겠습니다.
vi /var/named/domain.com.zone
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::2
필드 | 설명 |
$TTL 1D |
|
@ |
|
IN |
|
SOA |
|
@ |
|
rname.unvalid. |
|
0;serial |
|
1D;refresh |
|
1H;retry |
|
1W;expire |
|
3H;minimum |
|
이후 DNS 레코드에 대한 설정으로 이어집니다.
[FQDN] tab [IN] tab [record] tab [priority] tab [domain or ip]
# 서브도메인이 www인 A레코드를 지정된 주소로 설정하는 예시입니다.
www IN A 115.x.249.x
FQDN(Fully Qualified Domain Name) : subdomain을 의미합니다. (호스트명 www + 도메인명 domain.com)
레코드 | 설명 |
NS | Name Server를 지정합니다. |
A | FQDN에 작성한 도메인의 IP를 지정합니다. |
AAAA | FQDN에 작성한 도메인의 IPv6를 지정합니다. |
CNAME | 좌측에 작성한 도메인의 별칭을 지정합니다. 만약 좌측에 *을 적고 www.domain.com.을 작성하면 모든 서브도메인을 www.domain.com으로 이동 됩니다. |
MX | 메일 서버를 지정합니다. |
TXT | 도메인에 대한 텍스트 정보를 지정합니다. |
PTR | 역방향 영역 존에 사용되는 레코드입니다. IP주소로 도메인을 찾습니다. |
아래는 예시 zone 파일입니다.
$TTL 10M
@ IN SOA ns.fu-bao.store. admin.fu-bao.store. (
0 ; serial
10M ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.fu-bao.store.
ns IN A 115.x.249.y
www IN A 115.x.249.y
eee IN A 115.x.249.y
fff IN A 115.x.249.y
다음은 rev 파일입니다.
$TTL 1D
@ IN SOA ns.domain.com. admin.domain.com. (
0 ; serial
10M ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
IN NS ns.domain.com.
y IN PTR ns.domain.com.
y IN PTR www.domain.com.
y IN PTR eee.domain.com.
y IN PTR fff.domain.com.
저는 vhost를 사용하여 직관적으로 알아보기 위해 위와 같이 설정하였습니다. vhost를 하는 방법은
2024.04.15 - [OS/Linux] - apache vhost 설정하기
apache vhost 설정하기
vhost는 virtual host로 웹 서버의 다른 디렉터리로 요청을 라우팅 하여하나의 IP 주소에서 여러 개의 도메인을 처리하는 데 사용합니다. 사용할 수 있는 도메인이 하나이므로 서브도메인을 www, eee로
engineer1.tistory.com
에서 확인 가능합니다.
2-5) 서비스 재시작
변경 설정을 저장하고 적용합니다.
systemctl restart named
설정파일을 테스트하는 방법은
# 출력되는것이 없어야 합니다.
named-checkconf /etc/named.rfc1912.zones
named-checkconf /etc/named.conf
# OK가 출력됩니다.
named-checkzone domain.com /var/named/domain.com.zone
이후 nslookup명령어로 DNS 적용을 확인합니다.
nslookup www.domain.com 115.x.249.x
도메인 뒤의 ip는 해당 ip의 dns 서버에서 바로 찾겠다는 의미입니다.
이런 없애고 싶으시면 resolv.conf파일에 nameserver 115.x.249.x를 제일 아랫줄에 추가하면 됩니다.
vi /etc/resolv.conf
# 아랫줄 추가
nameserver 115.x.249.x
nslookup www.domain.com
이상 BIND의 named를 이용하여 DNS서버를 구현하는 방법을 알아봤습니다.
감사합니다.