인터넷이 널리 보급되지 않던 시기에는 전화번호부처럼 기억하기 쉬운 이름을 ip 와 연결해놓은 hosts 파일을 사용했었다.
# /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
하지만 현재에는 호스트 수가 너무 많아져 직접 기록할 수 없기 때문에 DNS 서버로부터 호스트의 ip 주소를 확인한다.ex) google-public-dns-a : 8.8.8.8
클라이언트가 DNS server에 DNS 요청을 보내면 DNS server가 알고있는 내용으로 응답한다.
하나의 서버로는 모든 정보를 저장하고 갱신하는것이 불가능하여 계층적 구조를 가진다.
| 레코드 | 의미 |
|---|---|
| A, AAAA | IPv4, IPv6 주소 레코드로 특정 호스트의 주소. |
| CNAME | 호스트의 별칭 정보 |
| MX | 메일 교환기 정보 |
| NS | 도메인을 관리하는 DNS 서버를 지정. |
| PTR | 도메인 이름에 대한 포인터(역방향 조회용). |
| SOA | 영역의 시작 권한 정보. |
| TXT | 임의의 텍스트 정보를 저장. |
주어진 도메인 이름에 대한 IP 주소 응답
주어진 도메인 이름에 대한 DNS 정보를 조회
DNS 정보를 더 자세하게 조회
리눅스 시스템을 DNS 서버로 사용하기 위해 가장 많이 사용하는 도구
yum install bind
/etc/named.conf
options {
listen-on port 53 { 127.0.0.1; }; # dns 요청에 응답할 인터페이스와 포트(IPv4)
listen-on-v6 port 53 { ::1; }; # DNS요청에 응답할 인터페이스와 포트(IPv6)
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 { localhost; }; # DNS query 요청을 허가할 대상
직접 도메인을 호스팅하거나, 디렉토리 서비스 사용 시 DNS 서버를 자체적으로 구성해야 한다.
package# /etc/named.conf 수정
options {
listen-on port 53 { any; };
listen-on-v6 port 53 { none; };
allow-query { any; };
.
.
}
# 아래에서 생성할 zone 파일들을 추가
zone "sckwon.com." IN {
type master;
file "data/sckwon.zone";
};
zone "10.168.192.in-addr.arpa" IN {
type master;
file "data/db.192.168.10";
/var/named/data/sckwon.zone
$TTL 86400
@ IN SOA ns.sckwon.com root (
20240603 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.sckwon.com.
IN MX 10 mail.sckwon.com.
ns IN A 192.168.10.10
www IN A 192.168.10.20
blog IN A 192.168.10.30
news IN A 192.168.10.40
mail IN A 192.168.10.50
/var/named/data/db.192.168.10
$TTL 3H
@ IN SOA ns.sckwon.com. root (
20240603 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.sckwon.com.
10 IN PTR ns.sckwon.com.
20 IN PTR www.sckwon.com.
30 IN PTR blog.sckwon.com.
40 IN PTR news.sckwon.com.
50 IN PTR mail.sckwon.com.
# 영역 파일에 대한 유효성 검증
$ named-checkconf /etc/named.conf
# 기존에 있는 형식 복제하여 사용 가능
cp /var/named/named.empty /var/named/sckwon.zone
# named를 그룹으로 변경
chown :named /var/named/sckwon.zone
# 원하는 형식으로 zone 파일 수정
$TTL 86400
@ IN SOA ns.sckwon.com root (
20240603 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.sckwon.com.
ns IN A 192.168.10.10
www IN A 192.168.10.20
blog IN A 192.168.10.30
news IN A 192.168.10.40
$ named-checkzone sckwon.com /var/named/data/sckwon.zone
zone sckwon.com/IN: loaded serial 20240603
OK
# start named.service
$ systemctl enable --now named.service
Created symlink /etc/systemd/system/multi-user.target.wants/named.service → /usr/lib/systemd/system/named.service.
# firewall dns service add
$ firewall-cmd --add-service=dns --permanent
success
# 다양한 방법으로 dns 질의
$ host -t A ns.sckwon.com
ns.sckwon.com has address 192.168.10.10
---
$ host sckwon.com ns.sckwon.com
Address: 192.168.10.10#53
---
$ host -t NS sckwon.com ns.sckwon.com
sckwon.com name server ns.sckwon.com.
---
$ host -t mx sckwon.com ns.sckwon.com
sckwon.com mail is handled by 10 mail.sckwon.com.
---
$ host -t A www.sckwon.com ns.sckwon.com
www.sckwon.com has address 192.168.10.20
---
$ host 192.168.10.10 ns.sckwon.com
10.10.168.192.in-addr.arpa domain name pointer ns.sckwon.com.
---
$ host 192.168.10.10 ns.sckwon.com
10.10.168.192.in-addr.arpa domain name pointer ns.sckwon.com.
---
$ host 192.168.10.40 ns.sckwon.com
40.10.168.192.in-addr.arpa domain name pointer news.sckwon.com.
/etc/NetworkManager/conf.d/90-dns-none.conf 파일 생성 후 다음과 같이 입력한다.
[main]
dns=none

초기화 되지 않고 수정한 내용이 남아있는 것을 확인.