Hướng dẫn cấu hình dns server linux

Domain Name System Server được viết tắt là DNS Server, DNS Server được sử dụng để phân giải tên miền sang địa chỉ IP và ngược lại. Berkeley Internet Name Domain (BIND) là máy chủ DNS được sử dụng phổ biến trên internet, đặc biệt trên các hệ thống dựa trên nền Unix/Linux.

Hệ thống tên DNS là một hệ thống phân cấp và cấu trúc logic hình cây được gọi là không gian tên DNS. Quy tắc đặt tên của hệ thống DNS theo cấu trúc phân cấp từ phải qua trái. Đứng đầu là cấp độ cao nhất (root) đại diện bằng dấu ".", tiếp theo là cấp 1 (level 1) được đặt tên phân chia theo quy tắc địa lý (như tên miền Việt Nam là .vn, tên miền Mỹ là .us) hoặc phân chia theo hình thức tổ chức doanh nghiệp (như .com là công ty, .gov chính phủ, .edu giáo dục, ...), tiếp theo là cấp 2, cấp 3, ...

Hướng dẫn cấu hình dns server linux

Chức năng của DNS

DNS cung cấp dịch vụ phân giải tên cho những máy tính client

DNS cung cấp phân giải địa chỉ IP cho hostname

Linux DNS Server có thể hoạt động trong 3 kiểu and có những kiển hoạt động là Caching Only DNS Server, Primary DNS Server and Slave DNS Server

Sao lưu lại dư liệu của DNS giữa các Server

Mục tiêu chủ đề DNS Server

Mục tiêu của chủ đề này là giúp các bạn hiểu được cách tổ chức tên trong DNS, chức năng, hoạt động, cài đặt, cấu hình dịch vụ DNS trên CentOS 7. Bây giờ chúng ta đi vào chi tiết cài đặt và cấu hình dịch vụ DNS on CentOS.

Cài đặt Bind Chroot

Để cài đặt BIND chạy trong môi trường chroot bạn phải cài đặt gói bind-chroot.

[root@master ~]# yum install -y bind-chroot

Kiểm tra lại gói cài bind chroot đã cài đặt thành công hay chưa thông qua yum:

[root@master ~]# rpm -qa| grep bind

bind-license-9.9.4-74.el7_6.1.noarch

bind-chroot-9.9.4-74.el7_6.1.x86_64

keybinder3-0.3.0-1.el7.x86_64

bind-libs-9.9.4-74.el7_6.1.x86_64

bind-utils-9.9.4-74.el7_6.1.x86_64

bind-libs-lite-9.9.4-74.el7_6.1.x86_64

bind-9.9.4-74.el7_6.1.x86_64

rpcbind-0.2.0-47.el7.x86_64

Toàn bộ thư mục và file bên dưới sẽ được tạo bởi gói cài Bind chroot trên CentOS host của bạn.

[root@master ~]# ls -l /var/named/chroot/

total 20

drwxr-x---. 2 root named 4096 Jun 21 16:11 dev

drwxr-x---. 4 root named 4096 Jun 21 16:11 etc

drwxr-x---. 3 root named 4096 Jun 21 16:11 run

drwxr-xr-x. 3 root root 4096 Jun 21 16:11 usr

drwxr-x---. 5 root named 4096 Jun 21 16:11 var

Chúng ta khởi động môi trường bind chroot, tất cả các thư mục và file liên quan tới Bind DNS Server sẽ được nằm trong thư mục /var/named/chroot

[root@master ~]# /usr/libexec/setup-named-chroot.sh /var/named/chroot on

Tiếp theo ta kiểm tra lại danh sách toàn bộ đường dẫn trên /var/named/chroot

[root@master ~]# mount | grep chroot

/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/localtime type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/named type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/named.root.key type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/named.conf type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/named.rfc1912.zones type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/rndc.key type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/named.iscdlv.key type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/protocols type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/etc/services type ext4 (rw,relatime,data=ordered)

/dev/mapper/centos-root on /var/named/chroot/usr/lib64/bind type ext4 (rw,relatime,data=ordered)

tmpfs on /var/named/chroot/run/named type tmpfs (rw,nosuid,nodev,mode=755)

/dev/mapper/centos-root on /var/named/chroot/var/named type ext4 (rw,relatime,data=ordered)

Chúng ta sẽ ghi lại địa chỉ ip, địa chỉ mà chúng ta sẽ sử dụng cấu hình BIND DNS của chúng ta trong môi trường chroot.

[root@master ~]# ip a

1: lo: 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: eth0: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 08:00:27:df:87:41 brd ff:ff:ff:ff:ff:ff

inet 192.168.100.254/24 brd 10.255.255.255 scope global noprefixroute eth0

valid_lft forever preferred_lft forever

inet6 fe80::a00:27ff:fedf:8741/64 scope link

valid_lft forever preferred_lft forever

3: eth1: mtu 1500 qdisc pfifo_fast state UP group default qlen 1000

link/ether 08:00:27:95:c3:cd brd ff:ff:ff:ff:ff:ff

4: virbr0: mtu 1500 qdisc noqueue state DOWN group default qlen 1000

link/ether 52:54:00:b0:af:fb brd ff:ff:ff:ff:ff:ff

inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0

valid_lft forever preferred_lft forever

5: virbr0-nic: mtu 1500 qdisc pfifo_fast master virbr0 state DOWN group default qlen 1000

link/ether 52:54:00:b0:af:fb brd ff:ff:ff:ff:ff:ff

Cấu hình dịch vụ DNS Server

Cấu hình dịch vụ DNS Server đầu tiên chúng ta update file /etc/named.conf Chúng ta sẽ chỉnh sửa những chỗ tô màu trong file named.conf.

[root@master ~]# cat /etc/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 unixlinuxvn named configuration files.

//

// See the BIND Administrator's Reference Manual (ARM) for details about the

// configuration located in /usr/share/doc/bind-{version}/Bv9ARM.html

options {

listen-on port 53 { 127.0.0.1; any; };

listen-on-v6 port 53 { ::1; };

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";

recursing-file "/var/named/data/named.recursing";

secroots-file "/var/named/data/named.secroots";

allow-query { localhost; any; };

allow-query-cache { localhost; 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 yes;

/* Path to ISC DLV key */

bindkeys-file "/etc/named.iscdlv.key";

managed-keys-directory "/var/named/dynamic";

pid-file "/run/named/named.pid";

session-keyfile "/run/named/session.key";

};

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";

Thêm bản Zone records

Tiếp đến chúng ta cần thêm bản zone record cho file forward zone và file reverve zone. Ở đây tên miền unixlinuxvn.com trong file forward zone của chúng ta và 100.168.192.in-addr.arpa bao gồm thông tin về file reverve zone.

zone "unixlinuvn.com" IN {

type master;

file "unixlinuxvn.com.zone";

allow-update { none; };

};

zone "100.168.192.in-addr.arpa" IN {

type master;

file "unixlinuxvn.com.zone";

allow-update { none; };

};

Chúng ta sẽ tao file forward và reverse zone trong những bước tiếp theo.

Tạo file forward zone

Vào thư mục /var/named nơi mà chúng ta sẽ có một số file mẫu mặc định những file mà chúng ta có thể sử dụng được để cấu hình file forward zone.

[root@master ~]# cd /var/named/

Liệt kê nội dung của /var/named

[root@master named]# ls -l

total 32

drwxr-x---. 2 root named 4096 Jun 21 16:12 chroot

drwxrwx---. 2 named named 4096 Jun 5 00:56 data

drwxrwx---. 2 named named 4096 Jun 5 00:56 dynamic

-rw-r-. 1 root named 2281 May 22 2017 named.ca

-rw-r-. 1 root named 152 Dec 15 2009 named.empty

-rw-r-. 1 root named 152 Jun 21 2007 named.localhost

-rw-r-. 1 root named 168 Dec 15 2009 named.loopback

drwxrwx---. 2 named named 4096 Jun 5 00:56 slaves

Tạo file forward zone bằng cách copy nội dung trong file named.localhost

[root@master named]# cat named.loopback > unixlinuxvn.com.zone

Thay đổi quyền của file forward zone (unixlinuxvn.com.zone) như bên dưới:

[root@master named]# chmod 644 unixlinuxvn.com.zone

[root@master named]# chown root:named unixlinuxvn.com.zone

[root@master named]# ls -l unixlinuxvn.com.zone

-rw-r--r--. 1 root named 260 Jun 21 16:28 unixlinuxvn.com.zone

Cập nhập lại file forward zone theo môi trường hệ thống mạng của bản. Bên dưới là file forward zone mẫu của tôi:

[root@master named]# cat unixlinuxvn.com.zone

$TTL 1D

@ IN SOA unixlinuxvn.com. root. unixlinuxvn.com. (

1 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

IN NS localhost.

IN NS unixlinuxvn.com.

IN NS master.unixlinuxvn.com.

localhost IN A 127.0.0.1

master IN A 192.168.100.254

Tạo file Reverse Zone

Giống như tạo forward zone để tạo một file reverse zone chúng ta sử dụng named.localhost bằng cách copy nó.

[root@master named]# cat named.localhost > unixlinuxvn.com.zone

Thay đổi quyền truy cập file và quyền chỉnh sửa file reverse zone (unixlinuxvn.com.zone) như bên dưới:

[root@master named]# chmod 644 unixlinuxvn.com.rzone

[root@master named]# chown root:named unixlinuxvn.com.zone

[root@master named]# ls -l unixlinuxvn.com.zone

-rw-r--r--. 1 root named 260 Jun 21 16:28 unixlinuxvn.com.zone

Tiếp đến ta thêm thông tin cho file reverse zone. Bên dưới là file reverse zone cấu hình hệ thống của tôi:

[root@master named]# cat unixlinuxvn.com.zone

$TTL 1D

@ IN SOA unixlinuxvn.com. root.unixlinuxvn.com. (

1 ; serial

1D ; refresh

1H ; retry

1W ; expire

3H ) ; minimum

IN NS localhost.

IN NS unixlinuxvn.com.

IN NS master.unixlinuxvn.com.

254 IN PTR master.unixlinuxvn.com.

Kiểm tra lại cấu hình Bind chroot

Trước khi bạn khởi động dịch vụ named-chroot lên, Cái quan trọng là bạn phải kiểm tra lại cấu hình của bind chroot của bạn bằng cầu lệnh:

[root@master named]# named-checkconf -t /var/named/ /etc/named.conf

Ở đây nghĩa là chroot liệt kê bao gồm những thư mục trong file cấu hình được sử lý nếu chạy giống như chrooted named.

Khởi động dịch vụ named-chroot

Để cấu hình DNS Server trên CentOS 7 cài đặt trong bind-chroot không thay đổi dịch vụ named chạy. Trái ngược lại với nó là dịch vụ named-chroot cần được bật lên bằng cách sử dụng cấu lệnh systemctl , Nếu bạn muốn chạy dịch vụ named trong môi trường chroot.

Nhưng trước hết, Phải chắc chắn stop and disable bất cứ dịch vụ named cái nào sẵn sàng và chạy trên CentOS 7 host:

[root@master named]# systemctl stop named

[root@master named]# systemctl disable named

Tiếp đến chúng ta start named-chroot service bằng cách sử dụng câu lệnh systemctl:

[root@master named]# systemctl start named-chroot

[root@master ~]# systemctl status named-chroot

● named-chroot.service - Berkeley Internet Name Domain (DNS)

Loaded: loaded (/usr/lib/systemd/system/named-chroot.service; disabled; vendor preset: disabled)

Active: active (running) since Fri 2019-06-21 17:00:25 IST; 1min 1s ago

Process: 5321 ExecStart=/usr/sbin/named -u named -c ${NAMEDCONF} -t /var/named/chroot $OPTIONS (code=exited, status=0/SUCCESS)

Process: 5319 ExecStartPre=/bin/bash -c if [ ! "$DISABLE_ZONE_CHECKING" == "yes" ]; then /usr/sbin/named-checkconf -t /var/named/chroot -z "$NAMEDCONF"; else echo "Checking of zone files is disabled"; fi (code=exited, status=0/SUCCESS)

Main PID: 5323 (named)

Tasks: 4

CGroup: /system.slice/named-chroot.service

└─5323 /usr/sbin/named -u named -c /etc/named.conf -t /var/named/chroot

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone 100.168.192.in-addr.arpa/IN: loaded serial 1

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone 1.0.0.127.in-addr.arpa/IN: loaded serial 0

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone localhost.localdomain/IN: loaded serial 0

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone unixlinuxvn.com/IN: loaded serial 1

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone 1.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0.0....ial 0

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone localhost/IN: loaded serial 0

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: all zones loaded

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: running

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone unixlinuxvn.com/IN: sending notifies (serial 1)

Jun 21 17:00:25 master.unixlinuxvn.com named[5323]: zone 100.168.192.in-addr.arpa/IN: sending notifies (serial 1)

Hint: Some lines were ellipsized, use -l to show in full.

Bây giờ những bước cấu hình dịch vụ DNS của chúng ta hầu như đã xong, enable dịch vụ named-chroot để khi chúng ta khởi động lại Server dịch vụ tự động khởi động lên:

[root@master ~]# systemctl enable named-chroot

Created symlink from /etc/systemd/system/multi-user.target.wants/named-chroot.service to /usr/lib/systemd/system/named-chroot.service.

Cấu hình DNS server sử dụng resolv.conf

Bây giờ là bước cấu hình DNS Server cuối cùng để cập nhập /etc/resolv.conf chúng ta với DNS server IP của chúng ta i.e. 192.168.100.254.

[root@master ~]# cat /etc/resolv.conf

# Generated by NetworkManager

search unixlinuxvn.com

nameserver 192.168.100.254

nameserver 8.8.8.8

Kiểm tra lại Bind Chroot DNS Server

Bây giờ chúng ta có thể dùng công cụ khác để kiểm tra lại cấu hình bind chroot DNS server của chúng ta. Trong ví dụ này tôi đang sử dụng nslookup và dig để kiểm tra lại cấu hình file forward and reverse zone của tôi.

[root@master ~]# nslookup client.unixlinuxvn.com

Server: 192.168.100.253

Address: 192.168.100.253

53

Name: client.unixlinuxvn.com

Address: 192.168.100.254

Vì nslookup có khả năng trả lời cho client.unixlinuxvn.com sử dụng bind chroot DNS server 192.168.100.254. Giống như ANSWER SECTION sử dụng câu lệnh dig cho nội dung file reverse zone.

[root@master ~]# dig -x 192.168.100.254

; <<>> DiG 9.9.4-RedHat-9.9.4-74.el7_6.1 <<>> -x

;; global options: +cmd

;; Got answer:

;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 55495

;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 3

;; OPT PSEUDOSECTION:

; EDNS: version: 0, flags:; udp: 4096

;; QUESTION SECTION:

;30.100.168.192.in-addr.arpa. IN PTR

;; ANSWER SECTION:

254.100.168.192.in-addr.arpa. 86400 IN PTR client.unixlinuxvn.com.

;; AUTHORITY SECTION:

100.168.192.in-addr.arpa. 86400 IN NS localhost.

;; ADDITIONAL SECTION:

localhost. 86400 IN A 127.0.0.1

localhost. 86400 IN AAAA ::1

;; Query time: 0 msec

;; SERVER: 192.168.100.253

53(192.168.100.253)

;; WHEN: Fri Jun 21 17:02:28 IST 2019

;; MSG SIZE rcvd: 149

Cấu hình DNS Server trên Client

Để cấu hình DNS server trên một client bạn không cần cài đạt bất cứ gói bind chroot rpms liên quan nào, bạn chỉ cần cập nhật file /etc/resolv.conf trên tất cả các clients để sử dụng nameserver IP của DNS server.

Cho unixlinuxvn trên client của tôi:

[root@client ~]# cat /etc/resolv.conf

# Generated by NetworkManager

search unixlinuxvn.com

nameserver 192.168.100.253

Chúng ta đi kiểm tra cấu hình DNS server bằng cách sử dụng nslookup:

[root@client ~]# nslookup master.unixlinuxvn.com

Server: 192.168.100.253

Address: 192.168.100.253

53

Name: master.unixlinuxvn.com

Address: 192.168.100.253

Như bạn nhìn thấy client là thật sự có khả năng trả lời từ DNS server đang chạy trên 192.168.100.253 host.