首页 > 编程笔记 > MySQL笔记 阅读:14

DNS服务安装部署教程(非常详细)

在 Linux 中,用来提供 DNS 服务的软件包叫“bind”,软件安装好之后所启动的进程叫“named”,该进程所提供的协议叫“DNS”。

DNS 服务的安装过程非常简单,只需要通过 Yum/DNF 软件包管理器执行 dnf install bind 命令,将 bind 软件包安装到 Linux 操作系统上,示例如下:
[root@clinux ~]# dnf install bind

依赖关系解决
=======================================================================
软件包          架构          版本                    仓库         大小
=======================================================================
安装:
bind           x86_64        32:9.11.26-6.el8        appstream   2.1 M

事务概要
=======================================================================
安装 1 软件包

---省略部分内容---
已安装:
bind-32:9.11.26-6.el8.x86_64

完毕!
[root@clinux ~]# systemctl start named  #启动 DNS 服务,

[root@clinux ~]# ps -ef | grep named   #查看 DNS 服务进程
named     51365      1  0 09:41 ?        00:00:00 /usr/sbin/named -u named -c /etc/named.conf
root      51373     4039  0 09:41 pts/0    00:00:00 grep --color=auto named

[root@clinux ~]# netstat -anpt | grep named  #查看 DNS 服务占用的端口
tcp        0      0 127.0.0.1:53          0.0.0.0:*               LISTEN       51365/named
tcp        0      0 127.0.0.1:953         0.0.0.0:*               LISTEN       51365/named
tcp6       0      0 :::1:53               :::*                    LISTEN       51365/named
tcp6       0      0 :::1:953             :::*                    LISTEN       51365/named
DNS 服务启动之后默认占用 53 端口来做 DNS 解析,另外的 953 端口是 RNDC(Remote Name Domain Controller)的端口,RNDC 是一个远程管理 DNS 服务工具,通过这个工具可以在本地或远程了解当前服务器的运行状况,也可以对服务器进行关闭、重载、刷新缓存、增加删除 zone 等操作。

DNS 服务安装完成后,其主要配置文件路径如下:
主配置文件中每一行配置的含义如下:
[root@clinux ~]# vim /etc/named.conf
options {
    ###监听在哪一个端口(any 表示监听所有 IP 地址的 53 端口)
    listen-on port 53 { 127.0.0.1; };
    ##监听 IPv6 的 53 端口
    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";
    secroots-file "/var/named/data/named.secroots";
    recursing-file "/var/named/data/named.recursing";

    ##定义允许查询的 IP 地址,any 代表所有 ip
    allow-query { localhost; };

    ##是否选代查询,一般只有缓存 DNS 服务器开启
    recursion yes;

    ##是否使用秘钥
    dnssec-enable yes;
    ##是否确认秘钥
    dnssec-validation yes;
    managed-keys-directory "/var/named/dynamic";

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

    include "/etc/crypto-policies/back-ends/bind.config";
};

##缓存文件的配置

logging {
    channel default_debug {
        file "data/named.run";
        severity dynamic;
    };
};

##根 zone 文件的配置
##zone 表示这是个 zone 配置,引号中间为配置的 zone,IN 为固定格式
zone "." IN {
    ##包含多种类型,常用的包括:hint 表示根 DNS 服务器,master 表示主 DNS 服务器,slave 表示从 DNS 服务器
    type hint;
    ##对应的 zone 文件的位置
    file "named.ca";
};

##读取以下两个文件
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
除了要了解主配置文件之外,还需要知道 /var/named/ 目录下的所有 zone 文件。正常在企业中配置 DNS 服务器,需要我们手动编写一个 zone 文件。

一次完整的 DNS 服务器配置的大致过程为:搭建 DNS 服务器,解析域名 baidx.com,这里的 baidx.com是我们凭空捏造的域名,通过 DNS 服务器可以将这个域名指向任何一个IP地址,当用户通过搭建的 DNS 服务器访问 baidx.com 域名时,就会访问指定的IP地址。

需要注意的是,如果这个演示过程由我们来完成,就是一次正常的 DNS 服务器维护,若这个过程由黑客来完成,就可能是一次域名劫持攻击。

域名劫持是互联网攻击的一种方式,通过攻击 DNS 服务器或伪造 DNS 服务器的方法,把目标网站域名解析到错误的 IP 地址从而使得用户无法访问目标网站,或者蓄意要求用户访问指定IP地址(网站)。

DNS 服务器配置的具体步骤如下:
1) 修改主配置文件,增加关于 baidx.com 域名的 zone 配置(正向解析):
[root@clinux ~]# vim /etc/named.conf
----省略部分内容----
##增加关于 baidx.com 域名的 zone 配置(正向解析)
zone "baidx.com" IN {
    type master;           ##类型为主 DNS 服务器
    file "baidx.com.zone";  ##对应的 zone 文件名
};

2) 在 /var/named/ 目录下创建第一步中定义的 zone 文件:
[root@clinux ~]# cd /var/named/
[root@clinux named]# ls
data  named.ca  named.localhost  slaves  dynamic  named.empty  named.loopback

##直接拷贝一个模板,改成对应的 zone 文件名称
[root@clinux named]# cp named.localhost  baidx.com.zone

[root@clinux named]# vim baidx.com.zone
$TTL 1D      ##生存周期
##定义 SOA 记录    主 DNS 服务器    管理员邮箱地址
@   IN SOA     baidx.com.    root.baidx.com. (
        0         ; serial   ##序列号
        1D        ; refresh  ##刷新间隔
        1H        ; retry    ##重试间隔
        1W        ; expire   ##过期间隔
        3H )       ; minimum  ##无效记录缓存时间
##从这里开始就可以写针对此域名的各种类型的记录
##可以写 A 记录、NS 记录等,记录格式在上文已经介绍过,可以按照对应的语法格式填写
    IN NS  www
    IN NS  mail
www         IN A   192.168.1.130
mail        IN A   192.168.1.130

##检查配置文件中的语法错误
[root@clinux named]# named-checkconf
[root@clinux named]# named-checkzone baidx.com /var/named/baidx.com.zone
zone baidx.com/IN: loaded serial 0
OK
[root@clinux named]#
笔者这里将 www.baidx.com 和 mail.baidx.com 对应到 192.168.1.130 服务器上,在这个服务器上搭建一个网站页面。如果用户通过该 DNS 服务器访问这两个域名,将直接转到 192.168.1.130 服务器上的网页。

可以想象一下,假设这两个域名本来指向的是某个导航网站,而用户通过 DNS 服务器访问这两个域名,访问成功的并不是导航网站,而是另一个网站。其实黑客的 DNS 劫持就是通过修改 DNS 服务器上域名与 IP 地址的对应关系,来达到让用户访问指定网站的目的。

3) 修改新创建的 zone 文件的权限和属组:
[root@clinux named]# ll
------省略部分内容------
-rw-r-----. 1 root root 211 3月 13 16:09 baidx.com.zone

[root@clinux named]# chown :named baidx.com.zone
[root@clinux named]# chmod o= baidx.com.zone
[root@clinux named]# ll
------省略部分内容------
-rw-r-----. 1 root named 211 3月 13 16:09 baidx.com.zone

4) 让 DNS 服务重新加载配置文件:
[root@clinux named]# systemctl reload named

5) 使用 dig 命令验证刚才设置的域名:
[root@clinux named]# dig -t A www.baidx.com

; <<>> DiG 9.11.26-RedHat-9.11.26-6.el8 <<>> -t A www.baidx.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 41728
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 2, ADDITIONAL: 2

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags; udp: 1232
; COOKIE: d50108287999f372eabbc530f622da75bf66db932eec3440f (good)

;; QUESTION SECTION:
;www.baidx.com.            IN  A

;; ANSWER SECTION:
www.baidx.com.     86400   IN  A   192.168.1.130

;; AUTHORITY SECTION:
baidx.com.        86400   IN  NS  mail.baidx.com.
baidx.com.        86400   IN  NS  www.baidx.com.

;; ADDITIONAL SECTION:
mail.baidx.com.   86400   IN  A   192.168.1.130

;; Query time: 0 msec
;; SERVER: 127.0.0.1#53(127.0.0.1)
;; WHEN: 日 3 月 13 16:12:11 CST 2022
;; MSG SIZE  rcvd: 135

[root@clinux named]#
通过 dig 命令可以查询到域名对应关系是否配置成功。

6) 找一台主机,让主机的 DNS 服务地址指向这台 DNS 服务器,这样就达到了用户通过 DNS 服务器查找域名对应关系的目的。直接在 Linux 操作系统上修改 DNS 服务的指向。
[root@clinux named]# vim /etc/resolv.conf  ##修改本系统的 DNS 服务指向
# Generated by NetworkManager
search localdomain
##指向到本机所搭建的 DNS 服务,这样这台机器所访问的域名都会经过这台 DNS 服务器来解析
nameserver 127.0.0.1

[root@clinux named]# nmcli c reload ens33  ##重新加载网卡,让配置生效

[root@clinux named]# ping www.baidx.com  ##测试一下此域名对应的 IP 地址,已生效
PING www.baidx.com (192.168.1.130) 56(84) bytes of data.
64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=1 ttl=64 time=0.722 ms
64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=2 ttl=64 time=0.721 ms
64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=3 ttl=64 time=0.572 ms
64 bytes from 192.168.1.130 (192.168.1.130): icmp_seq=4 ttl=64 time=0.596 ms

^C
--- www.baidx.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3102ms
rtt min/avg/max/mdev = 0.572/0.652/0.722/0.076 ms
[root@clinux named]#

7) 在 Linux 操作系统的桌面上用浏览器直接访问域名,效果如下图所示:


图 1 用浏览器直接访问域名

至此,一台 DNS 服务器已经搭建完成了,剩下的步骤就是完善 DNS 服务内部的域名对应记录。综上所述,任何一台网络设备只要将 DNS 服务指向指定的 DNS 服务器,则所有的域名请求都会在该服务器进行解析。

国内有很多公共的 DNS 服务器,这里给大家推荐几个:

相关文章