연구실 기존 DNS 서버는 111.111.111.1(가상)을 사용하며 상위 DNS는 111.111.1.1(가상)을 사용한다.
상위 DNS는 연구실 외부에서 관리되기 때문에 어떤 설정을 통해 연구실 DNS 서버와 연결되는 지 알 수 없다.
예상하기로는 상위 DNS(ns.abc.com)에서 연구실 DNS인 ns.lab.abc.com로 recursive DNS 구성을 한 게 아닌가 싶다.
기존 DNS를 바로 포맷하기에는 자신이 없어서 서버를 새로 만들어 기존 DNS 서버를 대치할 수 있는지 확인하고 기존 서버를 포맷하기로 한다.
DNS 구축에는 CentOS Stream9와 bind9를 사용하였다.
CentOS Stream9가 설치된 상태에서 시작한다.
1. bind9 설치
bind9는 Berkeley Internet Name Domain version.9의 줄임말로 버클리 대학에서 만든 오픈소스 DNS 패키지를 말한다.
bind9를 설치한 후에는 내부적으로 named라는 DNS 데몬을 사용하게 된다.
우선 bind9를 설치하고 service를 시작한다.
$ dnf install bind -y $ sudo systemctl enable named $ sudo systemctl start named
bind9를 설치하고 실행하면 CentOS9 기준으로 다음 파일들이 생성된다.
- /etc/named.conf: named 설정파일
- /etc/named.rfc1918.conf: named에서 사용하는 zone 정보
- /etc/named.options
- /etc/named: named 전용 디렉터리
- /var/named/…: named 설정/실행 전용 디렉터리
기존 DNS는 ubuntu 14를 썼었는데 ubuntu에서의 bind9는 /etc/bind/ 디렉터리에서 모든 DNS 서비스 설정을 관리했다.
CentOS9에서는 이를 /etc와 /etc/named, /var/named 세 군데로 나누어 관리한다.
심지어 CentOS9에서 /etc/named는 default 설정에서 사용하지도 않는다.
2. bind9 설정
설정해줄 부분은 크게 네 곳이다.
복잡해보이나 별로 많은 걸 하진 않는다.
2-1. /etc/named.conf
options { listen-on port 53 { any; }; listen-on-v6 port 53 { any; }; ... allow-query { any; }; ... }
2-2. /etc/named.rfc1912.zones
zone을 작성하는 곳이다.
원하는 domain을 등록하고 zone 파일과 rev 파일의 위치를 설정한다.
경로 없이 파일명만 입력하는 경우 자동으로 /var/named 경로에서 파일을 탐색한다.
ubuntu에서처럼 /etc/named/zones/… 경로를 사용하도록 할 수도 있다.
//Reverse file info zone "111.111.111.in-addr.arpa" { type master; file "lab.abc.com.rev"; allow-update { none; }; notify no; }; //Zone file info zone "lab.abc.com" { type master; file "lab.abc.com.zone"; allow-update { none; }; notify no; };
2-3. zone 파일 생성
아래와 같이 zone 파일과 rev 파일을 생성한다. (/var/named/lab.abc.com.zone, /var/named/lab.abc.com.rev)
작성 방법은 공식 문서를 참고하자.
; lab.abc.com.zone 파일 $TTL 5M @ IN SOA ns.lab.abc.com. root ( 202311070 ; serial (YYYYMMDDX) 5M ; refresh 1M ; retry 1D ; expire 1H ) ; minimum @ IN NS ns.lab.abc.com. ns IN A 111.111.111.1 ; nameserver a IN A 111.111.111.1 ; server b IN A 111.111.111.2 ; server
; lab.abc.com.rev 파일 $TTL 5M @ IN SOA ns.lab.abc.com. root ( 202311071 ; serial 3H ; refresh 15M ; retry 1W ; expire 1D ) ; minimum @ IN NS ns.lab.abc.com. 1 IN PTR ns.lab.abc.com. 1 IN PTR a.lab.abc.com. 2 IN PTR b.lab.abc.com.
2-4. /etc/resolv.conf
CentOS9는 NetworkManager를 통해 resolv.conf 파일을 관리하기 때문에 이 파일은 직접 수정하지 않는다.
nmtui을 사용하거나 /etc/NetworkManager/system-connections/<NIC이름>.nmconnection 파일을 직접 수정한다.
필자는 GUI를 지원하는 nmtui를 통해 수정하였으나 CLI나 에디터로 nmmconnection 파일을 직접 수정해도 상관없다.
파일에서 다음 두 줄을 [ipv4] 섹션에 추가하면 된다.
dns에는 primary DNS의 ip 주소와 localhost를, dns-search에는 현재 네임서버에서 사용하는 도메인 주소를 기재하면 된다.
... [ipv4] ... dns=111.111.1.1;127.0.0.1; dns-search=lab.abc.com; ...
3. 방화벽 및 SELinux 설정
방화벽 해제는 쉽게 떠올릴 수 있는데 SELinux도 설정해야한다는 건 자주 잊는다.
다만 SELinux에는 dns port(53)가 기본적으로 등록되어있으니 잘 등록되어있는지 확인만 해주자.
$ sudo firewall-cmd --permanent --zone=public --add-service=dns # DNS 서비스 방화벽 개방 $ sudo firewall-cmd --reload # 방화벽 룰 적용 $ sudo semanage port -l | grep dns # DNS 포트 개방 확인 $ sudo semanage port -a -t dns_pot_t -p tcp 53 # DNS 포트 미개방 시 이 커맨드로 포트 개방 $ sudo semanage port -a -t dns_pot_t -p udp 53 # DNS 포트 미개방 시 이 커맨드로 포트 개방