본문 바로가기

리눅스

[draft] BIND에서 nsupdate 명령을 사용하여 동적으로 존을 변경하는 방법

728x90

BIND에서 nsupdate 명령을 사용하여 동적으로 존을 변경하는 방법

BIND 설치

yum install -y bind bind-utils

BIND 버전 정보

named -v
$ named -v
BIND 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.15 (Extended Support Version) <id:7107deb>

sangchul.kr 도메인 설정

sangchul.kr zonefile 편집

vim /var/named/sangchul.kr.zone
$TTL 60
@                       IN      SOA     ns.sangchul.kr. manager.sangchul.kr. (
                                2013070203 ; serial
                                21600      ; refresh (6 hours)
                                1800       ; retry (30 minutes)
                                1209600    ; expire (2 weeks)
                                86400      ; minimum (1 day)
                                )

                        IN      NS      ns.sangchul.kr.
ns                      IN      A       127.0.0.1

named.conf 편집

vim /etc/named.conf
zone "sangchul.kr" IN {
        type master;
        file "sangchul.kr.zone";
        allow-update { none; };
};

구성 파일 검사

named-checkconf -z
$ named-checkconf -z
zone localhost/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone sangchul.kr/IN: loaded serial 2013070204

존 파일 검사

named-checkzone sangchul.kr sangchul.kr.zone
$ named-checkzone sangchul.kr sangchul.kr.zone 
zone sangchul.kr/IN: loaded serial 2013070204
OK

BIND 서비스 재시작

systemctl restart named

DNS 레코드 동적 업데이트를 위한 설정

1. 키 파일 생성

DNS 업데이트에 사용할 키 파일을 생성합니다.

dnssec-keygen -a HMAC-SHA256 -b 128 -n HOST sangchul.kr
$ dnssec-keygen -a HMAC-SHA256 -b 128 -n HOST sangchul.kr
Ksangchul.kr.+163+51068

명령을 실행하면 두 개( Ksangchul.kr.+157+.key 및 Ksangchul.kr.+157+.private )의 파일이 생성됩니다.

$ ls -l | grep Ksangchul.kr
-rw------- 1 root  root    55 May 29 06:57 Ksangchul.kr.+163+51068.key
-rw------- 1 root  root   168 May 29 06:57 Ksangchul.kr.+163+51068.private

존 파일의 소유자를 변경합니다.

chown named.named /var/named/*

2. BIND 설정 파일 수정

BIND 설정 파일 (named.conf)을 편집하여 동적 업데이트를 허용하도록 구성합니다.

 

.private 파일의 내용을 확인합니다.

  • Key 부분의 값을 secret에 복사하여 넣습니다.
cat Ksangchul.kr.+163+51068.private
$ cat Ksangchul.kr.+163+51068.private
Private-key-format: v1.3
Algorithm: 163 (HMAC_SHA256)
Key: F/SRqfNYru/qVp6ENT+32A==
Bits: AAA=
Created: 20240529065715
Publish: 20240529065715
Activate: 20240529065715

zone 블록을 수정합니다.

  • allow-update 디렉티브를 사용하여 키 파일을 지정합니다.
vim /etc/named.conf
zone "sangchul.kr" {
    type master;
    file "/var/named/sangchul.kr.zone";
    allow-update { key "sangchul.kr."; };
};

key "sangchul.kr." {
    algorithm hmac-sha256;
    secret "F/SRqfNYru/qVp6ENT+32A==";
};

구성 파일 검사

$ named-checkconf -z
zone localhost/IN: loaded serial 0
zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0
zone sangchul.kr/IN: loaded serial 2013070204

존 파일 검사

$ named-checkzone sangchul.kr sangchul.kr.zone 
zone sangchul.kr/IN: loaded serial 2013070204
OK

3. BIND 서비스 재시작

설정 파일을 수정한 후 BIND 서비스를 재시작하여 변경 사항을 적용합니다.

systemctl restart named

4. nsupdate 명령 실행

이제 nsupdate 명령을 사용하여 동적으로 DNS 레코드를 업데이트할 수 있습니다.

Ksangchul.kr.+157+<random>.key 파일을 사용하여 업데이트를 수행합니다.

nsupdate -k Ksangchul.kr.+163+51068.key

이 명령을 실행하면 nsupdate 프롬프트가 나타납니다.

 

A 레코드 추가

server 127.0.0.1
update add example.sangchul.kr. 7200 IN A 192.0.2.1
send
quit
$ nsupdate -k Ksangchul.kr.+163+51068.key
> server 127.0.0.1
> update add example.sangchul.kr. 7200 IN A 192.0.2.1
> send
> quit

A 레코드 삭제

$ nsupdate -k Ksangchul.kr.+163+51068.key
> server 127.0.0.1
> update delete example.sangchul.kr. IN A
> send
> quit

질의 테스트

dig @127.0.0.1 example.sangchul.kr

dig_query

TXT 레코드 추가

$ nsupdate -k Ksangchul.kr.+163+51068.key
> server 127.0.0.1
> update add example.sangchul.kr. 7200 IN TXT "v=spf1 include:_spf.sangchul.kr ~all"
> send
> quit

질의 테스트

dig_query

 

BIND DNS 서버에서 nsupdate를 사용하여 DNS 레코드를 동적으로 추가, 삭제, 또는 수정할 수 있습니다.

 

참고URL

- Read the Docs BIND9 : 5.2. Dynamic Update

 

728x90