[OS] Linux DNS 구축하기

hugingstar·2025년 12월 18일

Operating system

목록 보기
15/34
post-thumbnail

이 글에서는 Rocky Linux 상에서 DNS를 만드는 방법에 대해서 정리한다.

1. DNS용 환경 설정

이 부분에서는 리눅스까지

  • VMWare에서 새로운 로키를 하나 만든다.
  • Network 설정에서 IP 주소, 넷마스크, 게이트웨이를 설정한다.

주소 : 10.17.0.53 (임의로 설정)
넷마스크 : 255.0.0.0
게이트웨이 : 10.0.0.1

  • firewalld의 상태를 확인해보면 active이고, DNS 환경을 구축하기 위해서 방화벽을 내린다.

systemctl disable --now firewalld
systemctl status firewalld

  • sestatus를 사용하면 seliux의 상태를 먼저 확인할 수 있고, 별도의 보안 정책이 없는 상태로 만들어서 DNS를 만들어야 하므로 disabled로 변경한다.
  • sestatus에서 seliux가 enabled도 되어 있는 것을 볼 수 있다.

sestatus

  • /etc/selinux/config 파일을 vi 편집기로 들어가보면 22번째 줄에 SELINUX 를 설정할 수 있는 부분이 있다.
  • SELINUX를 disabled로 설정한다.

  • 방화벽의 상태도 disabled 된 것 확인하였고, 잘 설정되었다.

  • init 명령어를 사용하면 재부팅할 수 있다. 한번 수행한다.

init 6

  • 모바를 사용하면 SSH로 접속할 수 있는데, SSH를 사용했을 때 새로운 세션을 만들 때 IP 번호와 22번 포트를 사용하면 접속할 수 있다.

2. DNS 서버 구축

DNS 서버를 구축할려면 먼저 bind와 named 패키지를 설치해야 한다. 그리고 이 패키지 들에 configure 파일들을 섬세하게 조작해주면 리눅스로도 DNS 서버를 만들 수 있다.

(1) bind 패키지 설치

dnf install bind bind-chroot –y

(2) named 패키지 설치

dnf install named

DNS 서버 설치할 때 중요한 Configuring 과정이 몇가지 있다. 그 첫번째로 named.conf 파일에 있는 어떤 IP들을 허락해줄지를 결정해야한다.

(3) Vi로 /etc/named.conf 수정

vi /etc/named.conf

named.conf 파일은 그림이 나와 있는 것처럼 수정한다.

Listen on port 53 부분 : 중괄호 안에 any; 으로 설정한다. 이 부분은 DNS port 53번이 어떤 IP가 접속할 수 있는지를 설정하는 부분인데, 불특정한 다수에게 서비스를 할 때에는 any;를 설정해야 한다.(사설로 운영할 때에는 사설IP 대역만을 제한해준다.)

Linsten on v6 부분 : none; 으로 설정한다. (IPv6를 사용하지 않는 경우에는 제거해도 되지만, none 옵션을 주변 v6는 사용하지 않는 다는 것으로 설정된다.)

allow query 부분 : 중괄호 안에 any; 로 설정한다. 이 부분을 재귀 질의가 올때 응답을 할지말지를 설정하는 것이다.

dnssec-validation 부분 : no 로 변경 (연습용이므로 no로 설정)

여기까지 하고 종료 :wq!
Active 확인

  • netstat으로 네트워크 접속, 라우팅 테이블, 네트워크 인터페이스 정보를 한번에 조회할 수 있는 명령어이다.

netstat -antup

  • cat 명령어를 사용해 named.conf 변경이 올바르게 되었는지 다시한번 확인한다.

(4) Zone file 수정

vi 편집기에서 zone 파일에 들어가서 Zone을 추가해줘야 한다. Zone file은 특정 도메인에 대한 IP 주소 정보나 서버 정보를 담고있는 전화번호부와 같은 것이다.

vi /etc/named.rfc1912.zones

  • bulgogikebab.ke라는 도메인을 zone 파일에 추가해줬다. 전화번호부에 등록한 것이다.

zone "bulgogikebab.ke" IN {
type master;
file "named..localhost";
allow-update {none;};
}

아래 /var 밑에 named 폴더에는 named.localhost 파일이 있다. zone 파일에 등록한 dns에 발맞춰서 dns 파일로 하나 만들어줘야 한다.

Cd /var/named

cp로 named.localhost를 bulgogikebab.ke.dns으로 복사한다.

cp named.localhost bulgogikebab.ke.dns

vi 편집기를 사용해서 bulgogikebab.ke.dns 파일로 들어간다. 이 부분을 수정해주어야 한다.

vi bulgogikebab.ke.dns

아래 그림을 보면서 설명하면, 가장 윗 줄에 ns1.bulgogikebab.ke. 와 rocky.bulgogikebab.ke. 부분을 수정한다.
그런 다음에 아래에서 3번째에 ns1.gulgogikebab.ke.를 추가했다.
위에 도메인과 연결되어 있는 웹서버 IP를 등록한다.
ns1 IN A 10.17.0.53
www IN A 10.17.0.81

Validation check : Named.conf와 Zone file이 올바르게 되었는지 검증한다. named.conf, zone file에 이상이 없으면 메세지가 안뜨고, zone 파일에 이상이 없으면 OK가 출력된다.

named-checkconf /etc/named.conf
named-checkconf /etc/named.rfc1912.zones
named-checkzone bulgogikebab.ke /var/named/bulgogikebab.ke.dns

systemctl restart named

3. 도메인 접속 테스트

Win10 클라이언트 PC로 가서, DNS 서버를 10.17.0.53으로 설정한다. 클라이언트 PC의 IP는 10.17.0.0이고 어떤 웹사이트에 접속할 때 도메인에 관한 정보를 10.17.0.53이라는 DNS 서버에 물어본다는 것을 의미한다.

하지만, 지금 상태에서는 Ping이 안되는 것을 확인할 수 있다.

다시 IP를 10.17.0.53로 설정해둔 DNS 서버로 들어가서 named 폴더에 있는 파일들에 권한을 살펴보면 bulgogikebab.ke.dns에는 권한이 소유자(rw-:읽기 쓰기 권한)/그룹(r--:읽기 권한) 주어져있다. 그리고 root root 권한이 있는 것이 보인다. 이 부분을 변경해줘야 한다.

-rw-/r--/--- root root ~~ bulgogikebab.ke.dns

아래 그림 참고하여 chown으로 zone file의 권한을 변경한다. named.localhostf라는 파일의 권한이 root named 이지만, bulgogikebab.ke.dns은 root root로 설정되어 있어서 ping이 안되는 것이었다. 변경 이후에는 bulgogikebab.ke.dns가 root named로 변경되었다.

chown root:named bulgogikebab.ke.dns

다른 방법 chown으로 권한을 부여할 수 도 있는데 파일을 복사할 때부터 -p 옵션을 주면 권한을 바로 부여할 수도 있다.

cp -p named.localhost bulgogikebab.ke.dns

(참고) etc 내에 passwd를 들어가면 user들의 password 정보를 알 수 있다.

cat /etc/passwd

(참고) etc 내에 group을 들어가면 그룹정보를 조회할 수 있다.

cay /etc/group

모두 설정이 완료되었으면 retart해서 마무리한다.

위에서 연결이 안됐었던 것이 다시 Win 10 클라이언트로 돌아가서 ping 테스트를 해보니까 핑이 올바르게 가는 것이 보인다.
(조건 : 리눅스 웹서버, DNS 서버가 올바르게 작동하고 있다.)

ping www.bulgogikebab.ke

www.bulgogikebab.ke는 10.17.0.81이라는 IP를 가지고 있다.

4. rndc : Cache 정보 관리

여기서 끝나면 안된다. 캐시정보도 한번 봐본다.

rndc 명령어를 사용해서 캐시 정보를 볼 수도 있다. 먼저 덤프를 하고 파일이 생성된 폴더로 들어가서 조회하는 방식이다.

rndc dumpdb

named 안에 data로 들어가면 cache_dump.db에 캐시 정보가 있다. vi 편집기 사용해서 캐시 정보도 확인할 수 있다.

cd /etc/named/data
vi cache_dump.db

이 부분에서 보면 구글, 깃허브 등의 도메인 정보도 캐시에 등록되어 있기 때문에 접속할 수 있다.
vi 편집기 안에서 도메인 찾기는 방법
?github 를 입력하고, n 누른다. : 위로 올라간다.
/github 를 입력하고, n 누른다. : 아래로 내려간다.

flush는 캐시정보를 삭제하는 옵션이다. 그냥 막 삭제하면 안된다. 작업중에 갱신이 있거나 막혔을 때 수정하는게 좋다.

rndc flush

캐시 테이블 내에 구글, 깃허브 등이 올려져 있기 때문에 도메인 ping 테스트를 했던 Window10 Client에서도 잘 접속되는 것을 볼 수 있다.

참고) WIN2022 DNS
윈도우 DNS를 구축할 때도 xxx.ke.dns가 필요하고, 그 위치는 C드라이브에 System32\dns에 있다.

C:\Windows\System32\dns

0개의 댓글