-
LINUX DNS(캐싱전용)서버 구축하기System of Infra/Linux System 2022. 6. 20. 23:57반응형
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. 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 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:e7:47:fb brd ff:ff:ff:ff:ff:ff inet 192.168.111.100/24 brd 192.168.111.255 scope global noprefixroute ens160 valid_lft forever preferred_lft forever inet6 fe80::4beb:7287:7a69:cde2/64 scope link noprefixroute valid_lft forever preferred_lft forever
▶ DNS Named 서버로 사용할 서버를 준비하도록 합니다. IP: 192.168.111.100/24
[root@localhost /]# dnf -y install bind-chroot CentOS-8 - AppStream 2.5 kB/s | 4.3 kB 00:01 CentOS-8 - Base 2.4 kB/s | 3.9 kB 00:01 CentOS-8 - PowerTools 2.6 kB/s | 4.3 kB 00:01 CentOS-8 - Plus 1.8 kB/s | 3.0 kB 00:01 CentOS-8 - Extras 934 B/s | 1.5 kB 00:01 Extra Packages for Enterprise Linux 8 - x86_64 5.9 kB/s | 8.0 kB 00:01 Extra Packages for Enterprise Linux 8 - x86_64 45 kB/s | 11 MB 04:14 종속성이 해결되었습니다. ======================================================================================================== 꾸러미 아키텍처 버전 리포지토리 크기 ======================================================================================================== Installing: bind-chroot x86_64 32:9.11.4-17.P2.el8_0.1 AppStream 100 k Upgrading: bind-libs x86_64 32:9.11.4-17.P2.el8_0.1 AppStream 169 k bind-libs-lite x86_64 32:9.11.4-17.P2.el8_0.1 AppStream 1.1 M bind-license noarch 32:9.11.4-17.P2.el8_0.1 AppStream 98 k bind-utils x86_64 32:9.11.4-17.P2.el8_0.1 AppStream 433 k python3-bind noarch 32:9.11.4-17.P2.el8_0.1 AppStream 145 k 종속성 설치: bind x86_64 32:9.11.4-17.P2.el8_0.1 AppStream 2.1 M 거래 요약 ======================================================================================================== 설치 2 꾸러미 업그레이드 5 꾸러미 총 다운로드 크기 : 4.2 M 패키지 다운로드중: (1/7): bind-chroot-9.11.4-17.P2.el8_0.1.x86_64.rpm 50 kB/s | 100 kB 00:02 (2/7): bind-libs-9.11.4-17.P2.el8_0.1.x86_64.rpm 78 kB/s | 169 kB 00:02 (3/7): bind-license-9.11.4-17.P2.el8_0.1.noarch.rpm 293 kB/s | 98 kB 00:00 (4/7): bind-utils-9.11.4-17.P2.el8_0.1.x86_64.rpm 863 kB/s | 433 kB 00:00 (5/7): python3-bind-9.11.4-17.P2.el8_0.1.noarch.rpm 468 kB/s | 145 kB 00:00 (6/7): bind-libs-lite-9.11.4-17.P2.el8_0.1.x86_64.rpm 87 kB/s | 1.1 MB 00:13 (7/7): bind-9.11.4-17.P2.el8_0.1.x86_64.rpm 62 kB/s | 2.1 MB 00:35 -------------------------------------------------------------------------------------------------------- ...(생략) 업그레이드 됨: bind-libs-32:9.11.4-17.P2.el8_0.1.x86_64 bind-libs-lite-32:9.11.4-17.P2.el8_0.1.x86_64 bind-license-32:9.11.4-17.P2.el8_0.1.noarch bind-utils-32:9.11.4-17.P2.el8_0.1.x86_64 python3-bind-32:9.11.4-17.P2.el8_0.1.noarch 설치됨: bind-chroot-32:9.11.4-17.P2.el8_0.1.x86_64 bind-32:9.11.4-17.P2.el8_0.1.x86_64 완료되었습니다!
▶ 캐싱 전용 Named 서버 구성을 위해서 패키지를 설치하도록 합니다. 패키지명: bind-chroot
[root@localhost /]# vi /etc/named.conf 1 // 2 // named.conf 3 // 4 // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS 5 // server as a caching only nameserver (as a localhost DNS resolver only). 6 // 7 // See /usr/share/doc/bind*/sample/ for example named configuration files. 8 // 9 10 options { 11 listen-on port 53 { any; }; 12 listen-on-v6 port 53 { none; }; 13 directory "/var/named"; 14 dump-file "/var/named/data/cache_dump.db"; 15 statistics-file "/var/named/data/named_stats.txt"; 16 memstatistics-file "/var/named/data/named_mem_stats.txt"; 17 secroots-file "/var/named/data/named.secroots"; 18 recursing-file "/var/named/data/named.recursing"; 19 allow-query { any; }; 20 21 /* 22 - If you are building an AUTHORITATIVE DNS server, do NOT enable recursion. 23 - If you are building a RECURSIVE (caching) DNS server, you need to enable 24 recursion. 25 - If your recursive DNS server has a public IP address, you MUST enable access 26 control to limit queries to your legitimate users. Failing to do so will 27 cause your server to become part of large scale DNS amplification 28 attacks. Implementing BCP38 within your network would greatly 29 reduce such attack surface 30 */ 31 recursion yes; 32 33 dnssec-enable yes; 34 dnssec-validation no; 35 36 managed-keys-directory "/var/named/dynamic"; 37 38 pid-file "/run/named/named.pid"; 39 session-keyfile "/run/named/session.key"; 40 41 /* https://fedoraproject.org/wiki/Changes/CryptoPolicy */ 42 include "/etc/crypto-policies/back-ends/bind.config";
▶ /etc/named.conf 파일에서 해당 라인의 설정 파일을 변경해주도록 합니다.
★/etc/named.conf 수정 파일
11번행 listen-on port 53 { 127.0.0.1; }; -> any(변경)
12번행 listen-on-v6 port 53 { ::1; }; -> none(변경)
19번행 allow-query { localhost; }; -> any(변경)
34번행 dnssec-validation yes; -> no(변경)[root@localhost /]# systemctl restart named [root@localhost /]# systemctl enable named Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service. [root@localhost /]# 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 Sat 2022-05-21 19:33:19 KST; 13s ago Main PID: 49196 (named) Tasks: 4 (limit: 11376) Memory: 55.6M CGroup: /system.slice/named.service └─49196 /usr/sbin/named -u named -c /etc/named.conf ...(생략) 5월 21 19:33:19 localhost.localdomain named[49196]: network unreachable resolving './DNSKEY/IN': 2001:> 5월 21 19:33:19 localhost.localdomain named[49196]: network unreachable resolving './NS/IN': 2001:500:> 5월 21 19:33:19 localhost.localdomain named[49196]: managed-keys-zone: Key 20326 for zone . acceptance> 5월 21 19:33:19 localhost.localdomain named[49196]: resolver priming query complete
▶ /etc/named.conf 파일을 수정했으니 데몬을 재기동합니다. 추가적으로 서버 재기동 후에도 데몬이 재기동될 수 있도록 enable 설정을 하도록 합니다. 데몬을 재기동 완료하면 정상적으로 기동이 되어 있는지 확인하기 위해서 status 상태를 확인하도록 합니다.
root@localhost /]# firewall-cmd --add-service=dns success [root@localhost /]# firewall-cmd --permanent --add-service=dns success [root@localhost /]# firewall-cmd --reload success [root@localhost /]# systemctl restart firewalld
▶ DNS 설정을 완료하였다면 해당 포트를 사용하기 위해서 방화벽에서 DNS 서비스를 활성화시켜주어야 합니다. 활성화가 완료되었다면 영구적으로 적용시키기 위해서 permanent 옵션을 사용하고 reload를 통해서 저장을 해주도록 합니다.
마지막으로 방화벽의 데몬을 재기동합니다.[root@localhost /]# firewall-cmd --list-all public (active) target: default icmp-block-inversion: no interfaces: ens160 sources: services: cockpit dhcpv6-client dns ssh telnet ports: 3389/tcp protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules: [root@localhost /]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: active (running) since Sat 2022-05-21 19:38:15 KST; 25s ago Docs: man:firewalld(1) Main PID: 49783 (firewalld) Tasks: 2 (limit: 11376) Memory: 24.0M CGroup: /system.slice/firewalld.service └─49783 /usr/libexec/platform-python -s /usr/sbin/firewalld --nofork --nopid
▶ 위에서 언급한 내용들이 올바르게 설정되어 있는지 확인하기 위해서 firewall-cmd --list-all을 통해서 현재 services 리스트에 dns가 추가된 것을 확인할 수 있고 방화벽의 데몬 상태로 active 상태로 설정이 올바르게 된 것을 확인할 수 있습니다.
[root@localhost /]# dig @192.168.111.100 www.naver.com ; <<>> DiG 9.11.4-P2-RedHat-9.11.4-17.P2.el8_0.1 <<>> @192.168.111.100 www.naver.com ; (1 server found) ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 54276 ;; flags: qr rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 3, ADDITIONAL: 4 ;; OPT PSEUDOSECTION: ; EDNS: version: 0, flags:; udp: 4096 ; COOKIE: 0f42e43ce68ecae3459920c86288c18742fb6cf2dc8c6ab4 (good) ;; QUESTION SECTION: ;www.naver.com. IN A ;; ANSWER SECTION: www.naver.com. 21600 IN CNAME www.naver.com.nheos.com. www.naver.com.nheos.com. 180 IN A 223.130.195.95 www.naver.com.nheos.com. 180 IN A 223.130.195.200 ;; AUTHORITY SECTION: nheos.com. 172800 IN NS gns2.nheos.com. nheos.com. 172800 IN NS gns3.nheos.com. nheos.com. 172800 IN NS gns1.nheos.com. ;; ADDITIONAL SECTION: gns1.nheos.com. 172800 IN A 103.6.174.86 gns2.nheos.com. 172800 IN A 210.89.165.22 gns3.nheos.com. 172800 IN A 125.209.246.230 ;; Query time: 580 msec ;; SERVER: 192.168.111.100#53(192.168.111.100) ;; WHEN: 토 5월 21 19:40:07 KST 2022 ;; MSG SIZE rcvd: 241
▶ DNS 서버 구축 시 일반적으로 내부 DNS 서버와 외부 DNS 서버를 구축하게 되는데 /etc/named 파일과 방화벽 설정이 완료가 됐다면 DNS 서버가 정상적으로 도메인 주소를 외부와 통신하여 가져올 수 있는지 확인을 할 수 있습니다.
dig @[로컬 IP] [도메인 주소] = dig @192.168.111.100 www.naver.com 수행 시 위와 같이 IN 허용 정책에 대한 정보를 확인할 수 있습니다.[root@localhost /]# nslookup > server Default server: 192.168.111.2 Address: 192.168.111.2#53 > server 192.168.111.100 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.195.200 Name: www.naver.com.nheos.com Address: 223.130.195.95
▶ 현재 Named 서버로 지정되어 있는 아이피는 nslookup 수행 시 192.168.111.100으로 지정되어 있고 해당 dns서버가 www.naver.com 네이버 주소의 아이피를 확인할 수 있습니다.
[root@localhost /]#vi /etc/resolv.conf # Generated by NetworkManager nameserver 192.168.111.100
▶ /etc/resolv.conf 파일에 네임서버로 사용할 아이피를 지정합니다. 현재 서버 자기 자신이 네임서버가 되기 때문에 nameserver 192.168.111.100으로 지정합니다.
[root@localhost /]# ip a 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever 2: ens160: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:0c:29:20:71:88 brd ff:ff:ff:ff:ff:ff inet 192.168.111.130/24 brd 192.168.111.255 scope global dynamic noprefixroute ens160 valid_lft 1698sec preferred_lft 1698sec inet6 fe80::ec0a:3af4:3a46:1197/64 scope link noprefixroute valid_lft forever preferred_lft forever
▶ DNS 서버가 구축이 되었다면 DNS를 통해서 주소를 확인할 수 있는 Client서버를 구축하기 위해서 192.168.111.130 아이피의 리눅스 서버 한대를 준비합니다.
[root@localhost /]# vi /etc/resolv.conf # Generated by NetworkManager search localdomain nameserver 192.168.111.100
▶ Client서버에서 도메인의 주소를 알려줘야 할 DNS 서버를 등록하기 위해서 192.168.111.100 DNS 서버를 지정합니다.
[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.195.95 Name: www.naver.com.nheos.com Address: 223.130.195.200
▶ Client서버에서 DNS서버를 지정했다면 올바르게 192.168.111.100번을 통해서 작동하는지 확인을 합니다. nslookup을 통해서 Default로 지정되어 있는 아이피가 192.168.111.100번으로 작동되는지 확인을 하게 되면 해당 DNS 서버가 네이버 주소를 Client에게 알려주게 됩니다.
네이버주소: 223.130.195.95, 223.130.165.200 두 개의 서버 아이피를 사용하고 있음.▶ Client서버에서 네이버 주소를 통해 네이버 웹페이지가 작동되는 것을 확인할 수 있습니다.
▶ CLI기반의 Client서버를 통해서도 DNS를 참조할 수 있도록 확인합니다. 위의 설정과 동일하게 설정 테스트
▶ CLI기반의 Client 리눅스 서버에서는 GUI를 제공하지 않기 때문에 elinks라는 패키지를 통해서 텍스트 기반의 웹페이지를 확인할 수 있습니다. dnf -y install elinks 명령어를 통해서 해당 패키지를 설치해주도록 합니다.
▶ elinks의 패키지 설치가 완료되었다면 elink 명령어를 수행하게 되면 위와 같이 웹 URL를 확인할 수 있는 검색 창이 출력되게 됩니다. 간단하게 레드햇 홈페이지를 DNS 서버에 요청하여 정상적으로 불러오는지 확인합니다.
▶ 텍스트 기반의 WEB 페이지 형태라서 그런지 깔끔한 형태는 아니지만 정상적으로 레드햇 웹페이지를 가져올 수 있는 것을 확인할 수 있습니다.
PS. 포스팅의 내용은 제 기준으로 작성한 것이기 때문에 참고해서 보시면 감사하겠습니다.
포스팅 과정의 오류 및 오타 그리고 궁금한 점에 대해서는 댓글 남겨주세요.
반응형'System of Infra > Linux System' 카테고리의 다른 글
LINUX DNS(마이네임전용)서버 구축하기 (8) 2022.06.23 LINUX Too many open files 에러 해결하는 방법 (10) 2022.06.22 LINUX 디스크 쿼터(DISK Quota) 설정 사용 하는 방법 (2) 2022.05.26 LINUX XRDP 서버 구축 하는 방법 [원격지 서버 3편] (0) 2022.05.19 LINUX SSH 서버 구축 하는 방법 [원격지 서버 2편] (2) 2022.05.18