欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

搭建DNS服务器

程序员文章站 2022-07-10 09:43:30
...

简介

这里通过bind搭建DNS服务,BIND,Berkeley Internet Name Domain,是dns协议的一种实现。运行的进程名称为named,端口默认53。
相关的程序包

  • bind-libs:被bind和bind-utils包中的程序共同用到的库文件;
  • bind-utils:bind客户端程序集,例如dig, host, nslookup等;
  • bind:提供的dns server程序、以及几个常用的测试程序;
  • bind-chroot:选装,让named运行于jail模式

配置解析一个正向区域

实验环境
IP:192.168.253.128
系统:CentOS7

实验开始之前先把防火墙和selinux关了

[root@localhost ~]# systemctl  stop firewalld 
[root@localhost ~]# setenforce  0

配置解析一个正向区域,将www.ice.cube.com域名解析到192.168.253.129上

第一步,安装bind以及测试的工具

yum install bind -y
yum install bind-utils -y

第二步,修改配置文件
在主配置文件/etc/named.conf

listen-on port 53 { 192.168.253.128; };  监听192.168.253.128
...
//allow-query     { localhost; }; ##只允许本机的请求,注释掉此行
...
dnssec-enable no; ##DNS的额外安全设置,这里因为做实验 关闭
dnssec-validation no;##DNS的额外安全设置,这里因为做实验 关闭

在辅助配置文件/etc/named.rfc1912.zones添加区域信息

zone  "ice.cube.com"  IN  {   ##设置ice.cube.com区域
       type  master;        ##设置为主DNS服务器
       file  "ice.cube.com.zone"; ##区域配置文件为ice.cube.com.zone
};

修改/etc/resolv.conf这个文件是设置DNS服务器的

nameserver 192.168.253.128 ##这里IP设置为192.168.253.128(自建DNS服务器的IP,这里是本机IP地址)

第三步,创建/var/named/ice.cube.com.zone

$TTL 1D
@   IN SOA  ns1.ice.cube.com. admin.ice.cube.com. (
                    12  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
   IN   NS      ns1 
ns1   IN A  192.168.253.128
www   IN A  192.168.253.129
web   IN CNAME  www

创建完成之后修改一下权限

chown .named /var/named/ice.cube.com.zone
chmod 640 /var/named/ice.cube.com.zone

第四步,检查配置文件

检查主配置文件
named-checkconf

检查区域文件
格式为
named-checkzone 区域名称 区域文件
这里的区域为ice.cube.com 区域文件为 /var/named/ice.cube.com.zone
命令为

named-checkzone  ice.cube.com /var/named/ice.cube.com.zone 

第五步,启动并测试

systemctl  start named ##如果是重载配置文件可以使用rndc  reload

搭建DNS服务器

接下来看看能否正常将www.ice.cube.com解析到192.168.253.129上
搭建DNS服务器

配置解析一个反向区域

与配置正向区域类似,只是编写的区域文件不同

这里将192.168.253.129反向解析为www.ice.cube.com

第一步,首先定义区域,在/etc/named.rfc1912.zones文件中添加

zone  "253.168.192.in-addr.arpa"  IN  { ##这里的反向解析需要吧ip段反写,比如这里要解析的ip段是192.168.253 则需要写成253.168.192
       type  master; ##设置为主服务器
       file  "253.168.192.in-addr.arpa.zone";##区域文件为为/var/named/253.168.192.in-addr.arpa.zone
};

第二步,然后编写区域文件/var/named/253.168.192.in-addr.arpa.zone

$TTL 3600
@       IN      SOA     ns1.ice.cube.com.  nsadmin.ice.cube.com. (
                   20180812
                         1H
                        10M
                         3D
                        12H )
         IN      NS      ns1.ice.cube.com.
128      IN      PTR     ns1.ice.cube.com. ##PTR表示反向解析记录
129      IN      PTR     www.ice.cube.com.

创建完成之后修改一下配置文件权限

chown .named  /var/named/253.168.192.in-addr.arpa.zone 
chmod 640  /var/named/253.168.192.in-addr.arpa.zone

第三步,检查配置文件

检查主配置文件
named-checkconf

检查区域文件
命令为

named-checkzone 253.168.192.in-addr.arpa.zone /var/named/253.168.192.in-addr.arpa.zone 

第四步,重新载入一下配置文件

rndc reload

第五步,测试一下
dig -x 192.168.253.129
搭建DNS服务器

搭建主从服务器

实验环境

  • 主服务器 192.168.253.128 系统CentOS7(在之前的基础上进行的)
  • 从服务器 192.168.253.129 系统CentOS6(centos6和centos7都差不多,不影响实验)

实验之前关闭防火墙和selinux

/etc/init.d/iptables stop
setenforce  0

第一步,在从服务器安装bind和测试工具

yum install bind bind-utils -y

第二步,再从服务器上修改配置文件
修改主配置文件/etc/named.conf

listen-on port 53 { 127.0.0.1;192.168.253.129 ; };##多增加一个监听192.168.253.129地址
        //allow-query     { localhost; };##这一项是仅允许本机请求,注释掉
        dnssec-enable no;##dns的安全相关配置,这里先关掉 no
        dnssec-validation no;dns的安全相关配置,这里先关掉 no

第三步,在从服务器。定义一个从区域,修改辅助配置文件/etc/named.rfc1912.zones
增加下面一段

zone  "ice.cube.com"  IN  { ##定义负责解析的从区域为ice.cube.com
       type  slave;    ##表示是从服务器
       file  "slave/ice.cube.com.zone";##这里的区域文件不需要自己再去编写是从主服务器同步过来的。设置同步的路径为slave/ice.cube.com.zone
       masters  { 192.168.253.128; }; ##设置主服务器为192.168.253.128
};

第四步,在主服务器上添加从服务器的记录
在/var/named/ice.cube.com.zone文件中修改,在之前的基础上添加两条记录就可以了

$TTL 1D
@       IN SOA  ns1.ice.cube.com. admin.ice.cube.com. (
                                        15      ; serial ##每次更改这个区域文件这个***需要手动加1  没修改之前是14 因为这次修改了于是改成15
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
   IN   NS      ns1
   IN   NS      ns2         ##添加一条NS记录
ns1   IN A  192.168.253.128
ns2   IN A  192.168.253.129 ###指向从服务器
www   IN A  192.168.253.129
web   IN CNAME  www

将主服务器重启一下

systemctl  restart named

第六步,启动从服务器,并测试

dig -t a www.ice.cube.com @192.168.253.129
这里@192.168.253.129 表示向192.168.253.129这台DNS服务器发起请求。
搭建DNS服务器

可以看到从服务器能解析www.ice.cube.com这个请求说明设置成功了

创建子域

实验环境

  • 192.168.253.128 主服务器(试验环境基于之前做的操作之上)
  • 192.168.253.158 负责解析子域的DNS服务器

先说一个整体思想和过程。到了这一步。我们有一个ice.cube.com的区域。我们现在要在ice.cube.com下创建一个子域,假设我们创建一个ops.ice.cube.com的子域。这个子域有个主机名假设叫www.ops.ice.cube.com。
创建的过程也很简单
第一步:在主服务器上,授权子域
修改区域文件/var/named/ice.cube.com.zone

$TTL 1D
@   IN SOA  ns1.ice.cube.com. admin.ice.cube.com. (
                    19  ; serial ##注意这里每次修改要增加1 否则从服务器无法同步
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
   IN   NS      ns1 
   IN   NS      ns2 
ops   IN    NS      ns1.ops  ##添加一条ops的NS记录
ns1      IN A  192.168.253.128
ns2      IN A  192.168.253.129
ns1.ops  IN A  192.168.253.158##并说明负责ops解析的NS地址
www      IN A  192.168.253.129
web      IN CNAME  www

然后重载服务

rndc reload

第二步:在负责解析子域的服务器安装bind相关程序包

yum install bind bind-utils -y

第三步,在192.168.253.158上修改主配置文件/etc/named.con。

listen-on port 53 { 127.0.0.1;192.168.253.158; };##监听192.168.253.158这个IP收到的请求
//allow-query     { localhost; };##注释这一行
dnssec-enable no;  ##关闭dns的安全相关设置
dnssec-validation no;##关闭dns的安全相关设置

第四步,192.168.253.158上修改辅助配置文件/etc/named.rfc1912.zones,定义区域文件
添加下面几行

zone  "ops.ice.cube.com"  IN  {
       type  master;
       file  "ops.ice.cube.com.zone";
};

第五步,192.168.253.158上创建区域文件/var/named/ops.ice.cube.com.zone
将www.ops.ice.cube.com解析到192.168.253.158上

$TTL 1D
@   IN SOA  ns1.ops.ice.cube.com. admin.ops.ice.cube.com. (
                  20180812  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
   IN   NS      ns1 
ns1      IN A  192.168.253.158
www      IN A  192.168.253.158
web      IN CNAME  www

创建完成之后修改一下配置文件权限

chown .named  /var/named/ops.ice.cube.com.zone
chmod 640  /var/named/ops.ice.cube.com.zone

第六步,子域服务器上启动并测试

systemctl start named

搭建DNS服务器
说明192.168.253.158是可以解析子域的

现在看192.168.253.128能否正常解析其子域
搭建DNS服务器
说明成功了

转发

(1) 区域转发:仅转发对某特定区域的解析请求;

                zone  "ZONE_NAME"  IN {
                    type  forward;
                    forward  {first|only};
                    forwarders  { SERVER_IP; };
                };

                first:首先转发;转发器不响应时,自行去迭代查询;
                only:只转发;

(2) 全局转发:针对凡本地没有通过zone定义的区域查询请求,通通转给某转发器;

                options {
                    ... ...
                    forward  {only|first};
                    forwarders  { SERVER_IP; };
                    .. ...
                };

bind中的安全相关的配置

acl:访问控制列表;把一个或多个地址归并一个命名的集合,随后通过此名称即可对此集全内的所有主机实现统一调用;

            acl  acl_name  {
                ip;
                net/prelen;
            };

示例:
                acl  mynet {
                    192.168.253.0/24;
                    127.0.0.0/8;
                };

bind有四个内置的acl

  • none:没有一个主机;
  • any:任意主机;
  • local:本机;
  • localnet:本机所在的IP所属的网络;

访问控制指令

  • allow-query {}; 允许查询的主机;白名单;
  • allow-transfer {}; 允许向哪些主机做区域传送;默认为向所有主机;应该配置仅允许从服务器;
  • allow-recursion {}; 允许哪此主机向当前DNS服务器发起递归查询请求;
  • allow-update {}; DDNS,允许动态更新区域数据库文件中内容;

智能DNS

能自动判断访问者的IP地址并解析出对应的IP地址,使网通用户会访问到网通服务器,电信用户会访问到电信服务器。

实验内容;
来源为192.168.253.128的ip,访问www.ice.com域的时候,解析为192.168.253.130
其他的ip,访问www.ice.com域的时候,解析为192.168.253.129

实验环境:
IP:192.168.253.128
系统:centos7

实验开始之前先把防火墙和selinux关了

systemctl  stop firewalld 
setenforce  0

第一步,安装bind以及测试的工具

yum install bind -y
yum install bind-utils -y

第二步,修改主配置文件
在主配置文件/etc/named.conf


listen-on port 53 { 192.168.253.128; }; ##这里修改为智能DNS服务器地址
//allow-query     { localhost; };##注释这行不然会只接受本机的请求
dnssec-enable no;  ##dns安全的额外配置。这里直接先关了
dnssec-validation no;##dns安全的额外配置。这里直接先关了
//include "/etc/named.rfc1912.zones"; ##注释这行,不然会报错。因为使用了视图所有的zone必须在视图里面
include "/etc/view.conf"; ##这里是自定义的视图配置文件。等等我们会创建

第三步,创建视图的配置文件/etc/view.conf(这个是自定义的方便管理)

view internal  {          
    match-clients { 192.168.253.128; };
    zone "ice.com"  IN {
        type master;
        file  "ice.com/internal";
};
    zone "." IN {
        type hint;
        file "named.ca";
};
};

view external {
    match-clients { any; };
    zone "ice.com" IN {
        type master;
        file "ice.com/external";
};
    zone "." IN {
        type hint;
        file "named.ca";
};
};

第四步,编写/var/named/ice.com/external与/var/named/ice.com/internal这两个区域文件
创建目录先
mkdir /var/named/ice.com

下面是/var/named/ice.com/external文件

$TTL 1D
@   IN SOA  ns1.ice.com. admin.ice.com. (
                    12  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
      IN    NS      ns1 
ns1   IN A  192.168.253.128
www   IN A  192.168.253.129
web   IN CNAME  www

下面是/var/named/ice.com/internal文件

$TTL 1D
@   IN SOA  ns1.ice.com. admin.ice.com. (
                    12  ; serial
                    1D  ; refresh
                    1H  ; retry
                    1W  ; expire
                    3H )    ; minimum
      IN    NS      ns1 
ns1   IN A  192.168.253.128
www   IN A  192.168.253.130
web   IN CNAME  www

第五步检查配置文件和区域

[aaa@qq.com named]# named-checkconf 
[aaa@qq.com named]# named-checkzone  ice.com /var/named/ice.com/internal 
zone ice.com/IN: loaded serial 12
OK
[aaa@qq.com named]# named-checkzone  ice.com /var/named/ice.com/external 
zone ice.com/IN: loaded serial 12
OK

第六步,启动并测试

systemctl start named

在192.168.253.128服务器上执行
dig -t a www.ice.com @192.168.253.128
搭建DNS服务器

在192.168.283.129服务器上运行dig -t a www.ice.com @192.168.253.128
搭建DNS服务器

从两幅图结果可以看到了192.168.253.128解析www.ice.com的时候解析到了192.168.253.130
而192.168.253.129请求解析的时候解析到了192.168.253.129从而实现了智能DNS