-
LINUX DNS(마이네임전용)서버 구축하기System of Infra/Linux System 2022. 6. 23. 01:22반응형
LINUX DNS(마이네임전용)서버 구축하기
[root@localhost /]# cat /etc/nsswitch.conf | grep -i hosts # hosts: files dns # hosts: files dns # from user file hosts: files dns myhostname
/etc/hosts.conf order hosts, bind(nameserver) - hosts 파일에서 우선순위
1. files
2. dns
3. bind
hostname/etc/resolv.conf(nameserver) - DNS Name 서버 주소 등록
192.168.111.100
-> DNS 서버 + 웹서버 = 마이네임전용서버
192.168.111.130
-> DNS를 테스트할 Client서버
192.168.111.200
-> DNS를 테스트할 CLI기반 Client서버[root@localhost /]# ip a | grep -i ens160 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 192.168.111.100/24 brd 192.168.111.255 scope global noprefixroute ens160
▶ 마이네임서버 전용으로 사용할 서버 한대를 준비합니다. 아이피 192.168.111.100 해당 서버는 웹서버의 기능도 같이 사용할 예정입니다.
[root@localhost /]# rpm -qa | grep httpd
▶ 웹서버로 사용을 하기 위해서 rpm 패키지를 검색 시 패키지가 패키지가 미설치되어 있다면 설치를 진행해야 합니다.
[root@localhost /]# dnf -y install httpd Extra Packages for Enterprise Linux 8 - x86_64 2.7 kB/s | 4.6 kB 00:01 Extra Packages for Enterprise Linux 8 - x86_64 487 kB/s | 11 MB 00:23 마지막 메타 데이터 만료 확인 : 0:00:04 전에 2022년 05월 24일 (화) 오후 08시 48분 17초. 종속성이 해결되었습니다. =================================================================================================================================================================================================================== 꾸러미 아키텍처 버전 리포지토리 크기 =================================================================================================================================================================================================================== Installing: httpd x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 1.7 M 종속성 설치: apr x86_64 1.6.3-9.el8 AppStream 125 k apr-util x86_64 1.6.1-6.el8 AppStream 105 k centos-logos-httpd noarch 80.5-2.el8 AppStream 24 k httpd-filesystem noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 35 k httpd-tools x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 102 k mod_http2 x86_64 1.11.3-3.module_el8.0.0+185+5908b0db AppStream 158 k 약한 의존성 설치하기: apr-util-bdb x86_64 1.6.1-6.el8 AppStream 25 k apr-util-openssl x86_64 1.6.1-6.el8 AppStream 27 k Enabling module streams: httpd 2.4 거래 요약 =================================================================================================================================================================================================================== 설치 9 꾸러미 총 다운로드 크기 : 2.3 M 설치 크기 : 6.0 M 패키지 다운로드중: (1/9): apr-util-bdb-1.6.1-6.el8.x86_64.rpm 14 kB/s | 25 kB 00:01 (2/9): apr-util-openssl-1.6.1-6.el8.x86_64.rpm 133 kB/s | 27 kB 00:00 (3/9): centos-logos-httpd-80.5-2.el8.noarch.rpm 59 kB/s | 24 kB 00:00 (4/9): apr-util-1.6.1-6.el8.x86_64.rpm 44 kB/s | 105 kB 00:02 (5/9): httpd-filesystem-2.4.37-12.module_el8.0.0+185+5908b0db.noarch.rpm 98 kB/s | 35 kB 00:00 (6/9): httpd-tools-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64.rpm 293 kB/s | 102 kB 00:00 (7/9): apr-1.6.3-9.el8.x86_64.rpm 39 kB/s | 125 kB 00:03 (8/9): mod_http2-1.11.3-3.module_el8.0.0+185+5908b0db.x86_64.rpm 394 kB/s | 158 kB 00:00 (9/9): httpd-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64.rpm 72 kB/s | 1.7 MB 00:23 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- [root@localhost /]# dnf -y install httpd Extra Packages for Enterprise Linux 8 - x86_64 2.7 kB/s | 4.6 kB 00:01 Extra Packages for Enterprise Linux 8 - x86_64 487 kB/s | 11 MB 00:23 마지막 메타 데이터 만료 확인 : 0:00:04 전에 2022년 05월 24일 (화) 오후 08시 48분 17초. 종속성이 해결되었습니다. =================================================================================================================================================================================================================== 꾸러미 아키텍처 버전 리포지토리 크기 =================================================================================================================================================================================================================== Installing: httpd x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 1.7 M 종속성 설치: apr x86_64 1.6.3-9.el8 AppStream 125 k apr-util x86_64 1.6.1-6.el8 AppStream 105 k centos-logos-httpd noarch 80.5-2.el8 AppStream 24 k httpd-filesystem noarch 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 35 k httpd-tools x86_64 2.4.37-12.module_el8.0.0+185+5908b0db AppStream 102 k mod_http2 x86_64 1.11.3-3.module_el8.0.0+185+5908b0db AppStream 158 k 약한 의존성 설치하기: apr-util-bdb x86_64 1.6.1-6.el8 AppStream 25 k apr-util-openssl x86_64 1.6.1-6.el8 AppStream 27 k Enabling module streams: httpd 2.4 거래 요약 =================================================================================================================================================================================================================== 설치 9 꾸러미 총 다운로드 크기 : 2.3 M 설치 크기 : 6.0 M 패키지 다운로드중: (1/9): apr-util-bdb-1.6.1-6.el8.x86_64.rpm 14 kB/s | 25 kB 00:01 (2/9): apr-util-openssl-1.6.1-6.el8.x86_64.rpm 133 kB/s | 27 kB 00:00 (3/9): centos-logos-httpd-80.5-2.el8.noarch.rpm 59 kB/s | 24 kB 00:00 (4/9): apr-util-1.6.1-6.el8.x86_64.rpm 44 kB/s | 105 kB 00:02 (5/9): httpd-filesystem-2.4.37-12.module_el8.0.0+185+5908b0db.noarch.rpm 98 kB/s | 35 kB 00:00 (6/9): httpd-tools-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64.rpm 293 kB/s | 102 kB 00:00 (7/9): apr-1.6.3-9.el8.x86_64.rpm 39 kB/s | 125 kB 00:03 (8/9): mod_http2-1.11.3-3.module_el8.0.0+185+5908b0db.x86_64.rpm 394 kB/s | 158 kB 00:00 (9/9): httpd-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64.rpm 72 kB/s | 1.7 MB 00:23 ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- ...(생략) 설치됨: httpd-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 apr-util-bdb-1.6.1-6.el8.x86_64 apr-util-openssl-1.6.1-6.el8.x86_64 apr-1.6.3-9.el8.x86_64 apr-util-1.6.1-6.el8.x86_64 centos-logos-httpd-80.5-2.el8.noarch httpd-filesystem-2.4.37-12.module_el8.0.0+185+5908b0db.noarch httpd-tools-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 mod_http2-1.11.3-3.module_el8.0.0+185+5908b0db.x86_64 완료되었습니다!
▶ httpd의 rpm 패키지가 설치되는 과정으로 정상적으로 완료가 되었다는 코멘트와 함께 설치가 완료된 것을 확인할 수 있습니다.
[root@localhost /]# rpm -qa | grep -i httpd httpd-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64 httpd-filesystem-2.4.37-12.module_el8.0.0+185+5908b0db.noarch centos-logos-httpd-80.5-2.el8.noarch httpd-tools-2.4.37-12.module_el8.0.0+185+5908b0db.x86_64
▶ 설치된 httpd 패키지의 버전과 패키지에 포함된 리스트를 확인합니다. 버전 2.4.37-12가 설치된 것을 확인할 수 있습니다.
[root@localhost /]# systemctl restart httpd [root@localhost /]# systemctl status httpd ● httpd.service - The Apache HTTP Server Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled) Active: active (running) since Tue 2022-05-24 20:52:26 KST; 5s ago Docs: man:httpd.service(8) Main PID: 52436 (httpd) Status: "Started, listening on: port 80" Tasks: 213 (limit: 11376) Memory: 23.7M CGroup: /system.slice/httpd.service ├─52436 /usr/sbin/httpd -DFOREGROUND ├─52437 /usr/sbin/httpd -DFOREGROUND ├─52438 /usr/sbin/httpd -DFOREGROUND ├─52439 /usr/sbin/httpd -DFOREGROUND └─52440 /usr/sbin/httpd -DFOREGROUND 5월 24 20:52:26 localhost.localdomain systemd[1]: Starting The Apache HTTP Server... 5월 24 20:52:26 localhost.localdomain httpd[52436]: AH00558: httpd: Could not reliably determine the s> 5월 24 20:52:26 localhost.localdomain httpd[52436]: Server configured, listening on: port 80 5월 24 20:52:26 localhost.localdomain systemd[1]: Started The Apache HTTP Server.
▶ httpd 데몬을 restart 또는 start를 통해 기동 해주도록 합니다.
[root@localhost /]# firewall-cmd --permanent --add-service=http success [root@localhost /]# firewall-cmd --permanent --add-service=https success [root@localhost /]# firewall-cmd --reload success
▶ httpd 데몬을 기동한 뒤 방화벽에서 해당 서비스에 대한 부분을 열어줘야 하는데 permanent 옵션을 통해서 재부팅 이후에도 영구적으로 설정되고 해당 정보를 reload 하여 저장하도록 합니다.
[root@localhost /]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client dns ftp http https ssh telnet ports: 3389/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
▶ firewall-cmd --list-all 명령어를 통해서 services 항목에 http https 서비스가 추가된 것을 확인할 수 있습니다.
[root@localhost /]# firewall-cmd --permanent --zone=public --add-port=80/tcp success [root@localhost /]# firewall-cmd --permanent --zone=public --add-port=8080/tcp success [root@localhost /]# firewall-cmd --permanent --zone=public --add-port=443/tcp success [root@localhost /]# firewall-cmd --reload success
▶ 방화벽 설정에서 서비스명이 아닌 서비스 포트 80, 8080, 443 포트 통해서도 설정을 해주도록 합니다.
root@localhost /]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client dns ftp http https ssh telnet ports: 3389/tcp 8080/tcp 80/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
▶ firewall-cmd --list-all 명령어를 통해서 ports 항목에 8080 80 서비스가 추가된 것을 확인할 수 있습니다.
[root@localhost /]# systemctl restart firewalld
▶ 방화벽 데몬을 restart 합니다.
[root@localhost /]# vi /var/www/html/index.html <h1> pinetree web homepage!! </h1>
▶ 마이네임서버에 간단한 웹페이지 서버를 구축하기 위해서 /var/www/html/index.html 파일을 생성하고 <h1> pinetree web homepage!! </h1> 헤드 문구를 출력해주도록 합니다.
[root@localhost etc]# vi /etc/named.conf -rw-r----- 1 root named 1693 5월 21 19:33 named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a localhost DNS resolver only). // // See /usr/share/doc/bind*/sample/ for example named configuration files. // options { listen-on port 53 { any; }; listen-on-v6 port 53 { none; }; 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"; secroots-file "/var/named/data/named.secroots"; recursing-file "/var/named/data/named.recursing"; allow-query { any; }; /* - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. - If you are building a RECURSIVE (caching) DNS server, you need to enable recursion. - If your recursive DNS server has a public IP address, you MUST enable access control to limit queries to your legitimate users. Failing to do so will cause your server to become part of large scale DNS amplification attacks. Implementing BCP38 within your network would greatly reduce such attack surface */ recursion yes; dnssec-enable yes; dnssec-validation no; managed-keys-directory "/var/named/dynamic"; pid-file "/run/named/named.pid"; session-keyfile "/run/named/session.key"; /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ include "/etc/crypto-policies/back-ends/bind.config"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key"; zone "pinetree.com" IN { type master; file "pinetree.com.db"; allow-update { none; }; };
▶ 마이네임서버는 DNS 도메인 서버 + 웹서버의 역할을 한다고 앞에서 설명드렸는데 /etc/named 파일에 DNS의 Zone을 생성해주도록 합니다.
[/etc/named 파일 추가 항목]
zone "pinetree.com" IN {
type master;
file "pinetree.com.db";
allow-update { none; };
pinetree.com : 도메인 주소
pinetree.com.db : named.conf 파일에서 pinetree.com.db 참조[root@localhost named]# touch pinetree.com.db
▶ /var/named 경로에 pinetree.com.db 파일을 생성합니다.
[root@localhost named]# vi pinetree.com.db $TTL 3H @ SOA @ root.( 2 1D 1H 1W 1H ) IN NS @ IN A 192.168.111.100 WWW IN A 192.168.111.100
▶ www으로 시작하는 도메인에 192.168.111.100(마이네임서버 = 도메인 서버 + 웹서버)을 허용하겠다는 규칙을 설정합니다.
[root@localhost named]# named-checkconf [root@localhost named]# named-checkzone pinetree.com pinetree.com.db zone pinetree.com/IN: loaded serial 2 OK
▶ namd-checkconf 명령어를 수행 시 /etc/namd.conf의 zone 설정 파일의 형식이 올바르게 설정되어 있으면 별도의 메시지가 호출되지 않고 정상적으로 설정했다는 의미입니다.
또한 named-checkzone pinetree.com pinetree.com.db 명령어를 수행하여 pinetree.com zone에서 pinetree.com.db를 정상적으로 참조할 수 있도록 가능하다는 것을 체크하실 수 있습니다.[root@localhost named]# systemctl restart named [root@localhost named]# systemctl status named ● named.service - Berkeley Internet Name Domain (DNS) Loaded: loaded (/usr/lib/systemd/system/named.service; enabled; vendor preset: disabled) Active: active (running) since Tue 2022-05-24 21:17:48 KST; 31s ago Process: 55770 ExecStop=/bin/sh -c /usr/sbin/rndc stop > /dev/null 2>&1 || /bin/kill -TERM $MAINPID (code=exited, status=0/SUCCESS) Process: 55786 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS) Process: 55783 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/S> Main PID: 55788 (named) Tasks: 4 (limit: 11376) Memory: 54.3M CGroup: /system.slice/named.service └─55788 /usr/sbin/named -u named -c /etc/named.conf ...(생략) 5월 24 21:17:48 localhost.localdomain named[55788]: network unreachable resolving './DNSKEY/IN': 2001:500:2f::f#53 5월 24 21:17:48 localhost.localdomain named[55788]: network unreachable resolving './NS/IN': 2001:500:2f::f#53 5월 24 21:17:48 localhost.localdomain named[55788]: resolver priming query complete 5월 24 21:17:48 localhost.localdomain named[55788]: managed-keys-zone: Key 20326 for zone . acceptance timer complete: key now trusted
▶ named 서비스를 재기동하고 데몬 상태를 확인합니다.
IP주소: 192.168.111.130 [root@localhost /]# ip a | grep -i ens160 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 inet 192.168.111.130/24 brd 192.168.111.255 scope global dynamic noprefixroute ens160
▶192.168.111.130 -> DNS를 테스트할 Client서버로 맨 앞에서 명시한 서버로 접속합니다. 웹서버 접속 테스트를 위해서 필요
IP주소: 192.168.111.130 [root@localhost /]# cat /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.111.100
▶ /etc/resolv.conf 파일에 DNS 서버가 192.168.111.100으로 설정되어 있는 것을 확인합니다. 설정이 안되어 있을 시 해당 아이피로 설정을 합니다.
[root@localhost /]# nslookup > server Default server: 192.168.111.100 Address: 192.168.111.100#53 > www.naver.com Server: 192.168.111.100 Address: 192.168.111.100#53 Non-authoritative answer: www.naver.com canonical name = www.naver.com.nheos.com. Name: www.naver.com.nheos.com Address: 223.130.200.107 Name: www.naver.com.nheos.com Address: 223.130.200.104
▶ nslookup 명령어를 통해서 현재 DNS 서버가 192.168.111.100으로 설정되어 있어 DNS 서버에 ww.naver.com의 주소를 물어봤을 때 223.130.200.107, 223.130.200.104라고 알려줍니다.
▶ DNS 서버가 다시 한번 정상적으로 작동하는지 확인을 위해 DNS 서버에서 알려준 223.130.200.104 아이피로 접속 시 네이버 웹페이지로 접속이 되는 것을 확인할 수 있습니다.
[root@localhost /]# nslookup > server Default server: 192.168.111.100 Address: 192.168.111.100#53 > www.pinetree.com Server: 192.168.111.100 Address: 192.168.111.100#53 Name: WWW.pinetree.com Address: 192.168.111.100
▶ 마지막으로 웹서버를 구축한 192.168.111.100번의 경우 DNS 서버의 역할을 하기도 하지만 웹서버의 역할도 한다고 앞에서 설명드렸습니다.
Client 입장에서는 DNS 서버에 아이피 주소에 대한 질의를 했을 때 WWW.pinetree.com 웹페이지의 도메인과 함께 아이피를 알 수 있습니다.▶ 웹페이지 도메인으로 접속 시 간단한 웹서버 구축을 통해 기입했던 헤더의 문구가 출력되면서 클라이언트의 입장에서 정상적으로 웹서버를 호출받아 확인할 수 있게 됩니다.
2022.06.20 - [System of Infra/LINUX] - LINUX DNS(캐싱전용)서버 구축하기
PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.
포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.
반응형'System of Infra > Linux System' 카테고리의 다른 글
LINUX Banner(Motd, issue.net, issue) 설정하는 방법 (10) 2022.06.27 LINUX VI 및 VIM 편집기 Set number 설정하는 방법 (4) 2022.06.27 LINUX Too many open files 에러 해결하는 방법 (10) 2022.06.22 LINUX DNS(캐싱전용)서버 구축하기 (2) 2022.06.20 LINUX 디스크 쿼터(DISK Quota) 설정 사용 하는 방법 (2) 2022.05.26