DNS 서버 만들기 실습
* 캐시 전용 네임 서버 만들기 실습
- DNS 서버 : 자기 자신은 DNS 정보를 가지고 있지 않고 다른 DNS서버에 질의를 하는 것이다.
* 실습할 VM을 2개 준비한다.
yum -y install bind bind-chroot
DNS서버를 구성하기 위한 bind , bind-chroot를 설치한다.
-y 옵션은 install 할 때 나오는 yes/no 에 대하여 모두 yes를 한다는 의미이다.
yum -y install httpd
systemctl restart httpd
httpd를 install 한 후 restart를 통해 httpd를 active 상태로 만들어준다.
vi /etc/named.conf
12 options {
13 listen-on port 53 { 127.0.0.1; }; # { any;로 수정}
14 listen-on-v6 port 53 { ::1; }; # none; 으로 수정
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { localhost; }; # any로 수정
22
23 /*
* 네임 서버를 만드는 Daemon이다.
13 listen-on port 53 { 127.0.0.1; }; -> { any;로 수정} # 누구나 접속을 허용한다
14 listen-on-v6 port 53 { ::1; }; -> none; 으로 수정 # IPv6의 접속을 꺼놓는 것이다.
21 allow-query { localhost; }; -> any로 수정 # DNS쿼리 즉, 질의를 누구에게든 허용
# 수정본
12 options {
13 listen-on port 53 { any; };
14 listen-on-v6 port 53 { none; };
15 directory "/var/named";
16 dump-file "/var/named/data/cache_dump.db";
17 statistics-file "/var/named/data/named_stats.txt";
18 memstatistics-file "/var/named/data/named_mem_stats.txt";
19 recursing-file "/var/named/data/named.recursing";
20 secroots-file "/var/named/data/named.secroots";
21 allow-query { any; };
systemctl restart named
named 도 httpd와 같이 active 상태로 만들기 위해 restart 해준다.
systemctl status named
● named.service - Berkeley Internet Name Domain (DNS)
Loaded: loaded (/usr/lib/systemd/system/named.service; disabled; vendor preset: disabled)
Active: active (running) since Mon 2021-08-23 11:32:13 KST; 33s ago
Process: 2704 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} $OPTIONS (code=exited, status=0/SUCCESS)
Process: 2701 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/SUCCESS)
Main PID: 2706 (named)
Tasks: 5
CGroup: /system.slice/named.service
└─2706 /usr/sbin/named -u named -c /etc/named.conf
named 의 상태를 확인 하는 명령어를 입력 후 Acitve 상태가 active (running) 임을 알 수 있다.
systemctl enable named
시스템을 재부팅하더라도 named를 실행시키도록 설정한다.
방화벽 열기
firewall-cmd --permanent --add-port=53/tcp
firewall-cmd --permanent --add-port=53/udp
DNS는 90%는 UDP로 동작한다고 한다. 그러니 TCP와 UDP를 둘다 열어둔다.
firewall-cmd --reload
위의 세가지 모두 Success가 됨을 확인한다.
첫번쨰 VM 리눅스가 DNS 서버가 되었다.
cat /etc/resolv.conf
resolv.conf에 시스템의 DNS 정보가 담겨있다.
nslookup
> server
> server 192.168.56.100
아이피의 경우 본인이 설정한 DNS 서버의 ens0s8의 정보이다.
rpm -qa httpd
httpd-2. 4. 6-97.el7. centos. x86_64
rpm -qa 명령어를 통해 httpd가 설치가 되어있는지 확인
아래와같이 httpd-2. 4. 6-97.el7. centos. x86_64 문구가 나온다면 확인됨
systemctl restart httpd
httpd를 재시작한다.
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
웹서버 방화벽을 오픈하고 재실행한다.
vi /etc/named.conf
zone "linux.com" IN {
type master;
file "linux.com.db";
allow-update { none;};
};
DNS 서버로 지정한 VM1번의 named.conf 파일의 가장 하단부에 추가해준다. 리눅스 시스템이 linux.com의 마스터 서버가 된다는 것이다. 상세 정보는 linux.com.db를 통해 확인할 것이고
allow-update 는 zone transfer 허용 유무를 뜻하므로 slave 서버를 따로 만들지 않을것이므로 none 하였다.
* 마스터 네임 서버 : 도메인에 대한 모든 권한을 가지고 있는 주 네임 서버
* 슬레이브 네임 서버 : 마스터 네임 서버가 다운되었을 때 대용
named-checkconf
오타를 확인해 주는 명령어를 이용하여 오타를 확인한다.
cd /var/named
cp named.localhost linux.com.db
vi linux.com.db
오타가 없다면 위의 명령어를 통해 named 로 이동후 파일을 복사 하고 편집한다.
$TTL 1D
@ IN SOA @ rname.invalid. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS @
A 127.0.0.1
AAAA ::1
$TTL 3H # time to live , 3Hours 정도 DNS정보가 유지된다.
@ SOA @ root. ( # @는 리눅스 닷컴을 의미 SOA는 권한이 있다. 즉 리눅스 닷컴에 리눅스 닷컴이가 권한이 있다
0 ; serial # 버전
1D ; refresh # 갱신 주기
1H ; retry # 접속이 안될 때 재접속 시도
1W ; expire # 1주일 이내 접속이 안되면 만료
3H ) ; minimum # 업데이트 주기 유효기간
IN NS @ # IN : 인터넷 ns: 도메인네임서버. linux.com 의 네임서버는 @다
IN A 192.168.56.100 # A는 HOST의 IP주소를 의미한다. 여긴까진 기본세팅
www IN A 192.168.56.100 # 본격적 시스템 IP 세팅. www.linux.com 으로 호스트 이름세팅
# 메일서버를 추가하고싶다
# mail IN MX 192.168.56.100
# 교재 108 참조
위의 내용을 아래와 같이 수정한다. linux.com에 대한 설정을 변경해준다.
named-checkzone linux.com linux.com.db
zone linux.com/IN: loaded serial 0
OK
named파일 역시 오타를 확인해주고 아래와 같은 응답이 나온다면 문제가 없는 것이다.
chmod -R 754 /var/named #퍼미션 권한 부여
systemctl restart named
이후 named를 재시작해준다
정상적인 연결확인
dig @192.168.56.100 www.linux.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.5 <<>> @192.168.56.100 www.linux.com
; (1 server found)
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 33506
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.linux.com. IN A
;; ANSWER SECTION:
www.linux.com. 10800 IN A 192.168.56.100
;; AUTHORITY SECTION:
linux.com. 10800 IN NS linux.com.
;; ADDITIONAL SECTION:
linux.com. 10800 IN A 192.168.56.100
;; Query time: 0 msec
;; SERVER: 192.168.56.100#53(192.168.56.100)
;; WHEN: Mon Aug 23 14:27:41 KST 2021
;; MSG SIZE rcvd: 88
nslookup
> server 192.168.56.100
-bash-4.2# nslookup
> server 192.168.56.100
Default server: 192.168.56.100
Address: 192.168.56.100#53
> server
Default server: 192.168.56.100
Address: 192.168.56.100#53
> www.linux.com
Server: 192.168.56.100
Address: 192.168.56.100#53
Name: www.linux.com
Address: 192.168.56.100
curl www.linux.com
<html>
<head><title>301 Moved Permanently</title></head>
<body>
<center><h1>301 Moved Permanently</h1></center>
<hr><center>nginx</center>
</body>
</html>
브라우저에 www.linux.com 을 입력하면 실제 www.linux.com 이 접속이 된다. 그래서 게스트 서버로 지정한 두번째 VM인 VM2로 접속하여 DNS nameserver를 수정한다.
vi /etc/resolv.conf
# Generated by NetworkManager
search example.com
nameserver 192.168.56.100
~
'DevOps > Linux' 카테고리의 다른 글
[Linux] Linux 데이터베이스 기초 (0) | 2021.08.24 |
---|---|
[Linux] DNS 레코드 (0) | 2021.08.23 |
[Linux] DNS (0) | 2021.08.23 |
[Linux] Linux 명령어 grep (0) | 2021.08.10 |
[Linux] Linux 명령어 ls Commnad (0) | 2021.08.10 |