구성하기 전에 우리가 사용할 배포판은 Debian Linux 12.5 이다. Linux 설정과 관련된 자료들을 보면 대부분 CentOS나 Ubuntu가 대다수이다. 이러한 점을 생각해보면, "Debian Linux에 대한 자료들은 얼마 없는거 같은데?" 라는 생각에 이 배포판을 사용하게 되었다.
(사실 이건 둘째치고 내가 사용하는 배포판이 Debian 이기 때문에 이거 사용함 ㅋㅋ)

간단하게 왼쪽 서버는 PUBROOT, 오른쪽 서버는 PUBSRV 라고 가정하자
apt install vim bind9 -y
이 패키지는 둘 다 동일하게 설치하면 된다.
여기서 주의할 점!! -> 여기서 하는 실습은 root, 즉 관리자로 로그인했을 때를 가정하고 하는 실습이므로 그냥 사용자로 하고 있다면 앞에 sudo를 꼭 붙여야함!!
PUBROOT -> 1.1.1.100/24
PUBSRV -> 1.1.1.1/24
PUBROOT
-> /etc/bind/named.conf
zone "." {
type master;
file "root-zone";
};
zone "net" {
type master;
file "net-zone";
};
이 zone 설정은 다르게 해도 된다. (예를 들어 net을 com으로 바꾸는 것)
-> /etc/bind/named.conf.options
dnssec-validation no; # 이건 21번 줄에서 변경
allow-query { any; }; # 이건 22번 줄에 추가
-> /var/cache/bind/root-zone
...
@ IN NOA root.
root. IN A 1.1.1.100
net. IN A 1.1.1.100
-> /var/cache/bind/net-zone
...
@ IN NOA net.
net. IN A 1.1.1.100
public.net. IN A 1.1.1.1
PUBSRV
-> /etc/bind/named.conf
zone "public.net" {
type master;
file "pub-zone";
};
zone "." {
type hint;
file "/usr/share/dns/root.hints";
};
-> /etc/bind/named.conf.options
dnssec-validation no;
allow-query { any; };
-> /usr/share/dns/root.hints
A.ROOT-SERVERS.NET IN A 1.1.1.100 # 수정해서 사용
-> /var/cache/bind/pub-zone
...
@ IN NOA public.net.
public.net. IN A 1.1.1.1
모든 설정 후에는 패키지 재시작을 해줘야 저장된 내용들이 적용된다.
systemctl restart bind9
PUBSRV
DNSSEC을 사용하려면 우선 KSK, ZSK 키 파일을 생성해야한다. 그래서 이 키 들을 저장할 디렉토리를 하나 만들어야한다.
mkdir /var/cache/bind/keys
cd /var/cache/bind/keys
dnssec-keygen -a ECDSAP256SHA256 -f KSK public.net
dnssec-keygen -a ECDSAP256SHA256 public.net
DNSSEC을 구성하기 전에 했던 bind9 설정을 수정해야 한다.
-> /etc/bind/named.conf.options
dnssec-validation yes;
-> /etc/bind/named.conf
zone "public.net" {
type master;
file "pub-zone";
inline-signing yes;
dnssec-policy default;
key-directory "/var/cache/bind/keys";
};
DNSSEC 키를 다른 서버의 폴더에 전송하기 위해서는 권한이 필요하다.
chown bind:bind -R /var/cache/bind
systemctl restart bind9
PUBROOT
DNSSEC 키를 받기 위해 scp 명령어를 사용하는 데, 이를 위해 root로 ssh 접속이 가능하도록 한다.
apt install ssh -y
-> /etc/ssh/sshd_config
PermitRootLogin yes; # 33번 줄 수정
systemctl restart ssh
다시 DNSSEC으로 돌아가서
dig @127.0.0.1 dnskey public.net | dnssec-dsfromkey -f - public.net > /root/ds-pub
scp /root/ds-pub root@1.1.1.100:/root
PUBROOT
key를 복사해서 보내는 과정을 제외한 나머지 PUBSRV의 과정을 똑같이 따라한다.
mkdir /var/cache/bind/keys
cd /var/cache/bind/keys
dnssec-keygen -a ECDSAP256SHA256 -f KSK .
dnssec-keygen -a ECDSAP256SHA256 .
dnssec-keygen -a ECDSAP256SHA256 -f KSK net
dnssec-keygen -a ECDSAP256SHA256 net
-> /etc/bind/named.conf.options
dnssec-validation yes;
recursion no;
-> /etc/bind/named.conf
zone "." {
type master;
file "root-zone";
inline-signing yes;
dnssec-policy default;
key-directory "/var/cache/bind/keys";
};
zone "net" {
type master;
file "net-zone";
inline-signing yes;
dnssec-policy default;
key-directory "/var/cache/bind/keys";
};
chown bind:bind -R /var/cache/bind
systemctl restart bind9
root-zone과 net-zone 에 DS 레코드를 추가한다.
dig @127.0.0.1 dnskey net | dnssec-dsfromkey -f - net >> /var/cache/bind/root-zone
cat /root/ds-pub >> /var/cache/bind/net-zone
systemctl restart bind9
PUBSRV
이제 bind9 options file에 DNSKEY를 추가해준다.
dig @1.1.1.100 . dnskey +multi +norec >> /etc/bind/named.conf.options
이렇게 추가하면 DNSKEY 이외에 나머지 것들이 나오기 때문에, 올바르게 수정하고 bind9 재시작한다.
-> /etc/bind/named.conf.options
(수정하면 이렇게 나옴)
systemctl restart bind9
dig +dnssec +multiline public.net | more
내용 중에 flags에는 ad, 아래 부분에 RRSIG 가 있으면 정상적으로 DNSSEC이 된 것이다.
위에 나와있진 않지만 zone 파일의 ttl 값을 86400으로 수정해야함
너무 크면 dnssec에서 키의 유효성 검증에 문제가 생겨 dnskey를 생성할 수 없음