DNS 域名系统服务

1. DNS简介

1.1 什么是域名

域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位。具有独一无二,不可重复的特性。

1.2 什么是DNS

域名系统(Domain Name System,缩写DNS)是互联网的一项服务。域名解析是把域名指向网站空间IP,让人们通过注册的域名可以方便地访问到网站的一种服务。IP地址是网络上标识站点的数字地址,为了方便记忆,采用域名来代替IP地址标识站点地址。域名解析就是域名到IP 地址的转换过程。域名的解析工作由DNS 服务器完成。可以理解为DNS 就是翻译官。

正向解析:域名        --->    IP 地址

反向解析:IP 地址    --->      域名

1.3 域名的组成和分类

常见格式:www.baidu.com

完整格式:www.baidu.com.

.:    根域,可省略不写
com:    顶级域,有ICANN 组织指定和管理
分类:
    国家地区域名:cn(中国)、hk(香港)、sg(新加坡)等
    通用顶级域名:com(商业机构)、org(非盈利组织)、edu(教育机构)等
    新通用顶级域名:red(红色、热情)、top(顶级、高端)等
baidu:二级域(注册域),可由个人或组织申请注册
www:三级域(子域),服务器网站名代表
主机名:s1.www.baidu.com. 中的s1 就是主机名,一般用来表示具体某一台主机

扩展:com.cn 属于“二级域名”,是cn 顶级域的子域

2. 域名解析过程

1. 客户机首先查看查找本地 hosts 文件,如果有则返回,否则进行下一步

2. 客户机查看本机缓存,是否存在本条目的缓存,如果有则直接返回,否则进行下一步

3. 将请求转发给指向的DNS 服务器

4. 查看域名是否本地解析,是则本地解析返回,否则进行下一步

5. 本地DNS 服务器首先在缓存中查找,有则返回,无则进行下一步

6. 向全球13个根域服务器发起DNS 请求,根域返回org 域的地址列表

7. 使用某一个org 域的IP地址,发起DNS 请求,org域返回kernel 域服务器地址列表

8. 使用某一个kernel 域IP地址,发起DNS 请求,kernel 域返回www.kernel.org 主机的IP 地址,本地DNS 服务收到后,返回给客户机,并在本地DNS 服务器保存一份

3. DNS 软件信息

软件名称:

  bind

服务名称:

  named

软件端口:

  UDP  53  数据通信(域名解析)

  TCP  53  数据同步(主从同步)

配置文件:/etc/named.conf(服务器运行参数)

options {
        listen-on port 53 { 127.0.0.1; };设置服务器监听网卡(可以写具体某一个ip,也可写成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; }; #设置可以访问服务器的客户端ip(可用any) recursion yes;

区域配置文件:/etc/named.rfc1912.zones(服务器解析缓存的区域位置,正反向区域定义信息)

zone "localhost.localdomain" IN { #正向区域配置文件标签,修改为要解析的域
        type master; #DNS 服务器的类型(master/slave)
        file "named.localhost"; #正向数据配置文件名称(默认保存在/var/name/下)
        allow-update { none; }; #允许数据更新的列表(填写ip地址)
};

zone "1.0.0.127.in-addr.arpa" IN { #反向区域配置文件标签,仅修改ip地址,并且将ip反向
        type master;      #例如:80.168.192.in-addr.arpa
        file "named.loopback";
        allow-update { none; };
};   

数据配置文件:/var/named/xxx.xx(主机名和ip地址的对应解析关系,及主从同步信息)

$TTL 1D #域名有效解析生存周期(一般指缓存时间)
@       IN SOA  @ rname.invalid. (
@代表域名本身                    0       ; serial  #配置文件修改版本
SOA:SOA标记(起始授权机构的资源   1D      ; refresh #更新频率(从向主的查询周期)
记录,描述了域名的管理员、         1H      ; retry #更新失败的重试时间周期
邮件地址和一些时间参数            1W      ; expire #无法更新时的实效周期
                               3H )    ; minimum #缓存服务器无法更新时的失效时间
        NS      @         #设置DNS服务器的域名
        A       127.0.0.1 #ipv4 的域名ip 解析记录
        AAAA    ::1       #ipv6 的域名ip 解析记录

记录类型:

A

地址记录,用来指定域名的Ipv4地址的记录

CNAME 将域名指向另一个域名,再由另一个域名提供ip地址,就需要添加 CNAME 记录
TXT 可填写任何东西,长度限制255。绝大多数的TXT 记录是用来做SPF的(反垃圾邮件)
NS 域名服务器记录,如果需要把子域名交给其他DNS 服务商解析,就需要添加NS 记录
AAAA 地址记录,用来指定域名的ipv6 地址的记录
MX 邮件交换记录,如果需要设置邮箱,让邮箱能收到邮件,就需要添加MX 记录

 

 

 

 

 

 

 

 

 

 

 

 

 

4. DNS实验搭建

4.1 DNS服务搭建

1. 软件安装

# yum -y install bind

2. 配置主配置文件(/etc/named.conf)

options {
        listen-on port 53 { 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     { any; };
        recursion yes;

3. 配置区域配置文件(/etc/named.rfc1912.zones)

zone "learn.com" IN {
        type master;
        file "learn.localhost";
        allow-update { none; };
};

zone "80.168.192.in-addr.arpa" IN {
        type master;
        file "learn.loopback";
        allow-update { none; };
};

注:先对区域文件进行备份,删除多于模板,只留下一个正向和一个方向(反向修改时,网络位的反写格式,如192.168.80.132-->80.168.192.)

4. 配置数据文件/var/named/

[root@localhost /var/named]# vim learn.localhost 
$TTL 1D
@       IN SOA  learn.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.learn.com.
dns     A       192.168.80.133
www     A       192.168.80.134
[root@localhost /var/named]# vim learn.loopback 
$TTL 1D
@       IN SOA  learn.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.learn.com.
133     PTR     dns.learn.com.
134     PTR     www.learn.com.

a. 先复制生成正向解析文件和反向解析文件

b. 编辑正向解析文件(注意域名结尾的".")

c. 编辑反向解析文件(注意域名结尾的".")

5. 重启DNS服务

# systemctl restart named

6. 客户端测试

在网卡配置文件中添加DNS 服务器的地址

vim /etc/sysconfig/network-scripts/ifcfg-ens33 
...
DNS1=192.168.80.133
...
[root@localhost ~]# nslookup www.learn.com
Server:        192.168.80.133
Address:    192.168.80.133#53

Name:    www.learn.com
Address: 192.168.80.134
[root@localhost ~]# curl www.learn.com
134

4.2 主从DNS 服务器

目的:

  减轻主服务器的压力

准备:

一台主服务器,一台从服务器,一台测试机

搭建过程:

1. 搭建主服务器步骤(如上)

  a.  安装bind

  b.  主配置文件修改

  c.  区域配置文件修改

  d.  配置数据文件

       正向数据文件

       反向数据文件

  e.  启动 named 服务

注:主DNS 的区域配置文件中 allow-update 参数添加从服务器 IP 地址

# yum -y install bind
# vim /etc/named.conf 
options {
        listen-on port 53 { 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     { any; };

# vim /etc/named.rfc1912.zones
zone "learn.com" IN {
        type master;
        file "learn.localhost";
        allow-update { 192.168.80.134; };
};

# vim learn.localhost
$TTL 1D
@       IN SOA  learn.com. rname.invalid. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.learn.com.
dns     A       192.168.80.133
www     A       192.168.80.132
# systemctl restart named
# firewall-cmd --zone=public --add-port=53/udp
# firewall-cmd --zone=public --add-port=53/udp --permanent
# firewall-cmd --zone=public --add-port=53/tcp
# firewall-cmd --zone=public --add-port=53/tcp --permanent

2. 搭建从服务器

  a.  安装bind

  b.  修改主配置文件 /etc/named.conf

  c.  配置区域文件 /etc/named.rfc1912.zones

  注:从配置文件的类型修改文件 slave,并且填写主服务器的地址,文件的保存位置修改为slaves/learn.localhost

        type slave;
        masters { 192.168.80.133; };  #大括号两侧有空格
        file "slaves/learn.localhost";

  d. 重启服务

  e. 在测试机上填写从服务器的IP,测试

# vim /etc/sysconfig/network-scripts/ifcfg-ens33
...
DNS1=192.168.80.134
...

[root@localhost ~]# nslookup www.learn.com
Server:        192.168.80.134
Address:    192.168.80.134#53

Name:    www.learn.com
Address: 192.168.80.132

[root@localhost ~]# curl www.learn.com
132

4.3 DNS 缓存服务器

作用:

  加快解析速度,提高工作效率

使用软件:

  dnsmasq

配置文件:

/etc/dnsmasq.conf
    domain=域名          #需要解析的域名
    server=ip             #主DNS 服务器IP
    cache-size=15000      #声明缓存条数

重启服务:

# systemctl restart dnsmasq

测试:

在测试机上填写DNS 缓存服务器的 ip 地址

4.4 智能DNS(分离解析)

原理:DNS 分离解析即将相同域名解析为不同的 IP 地址。现实网络中一些网站为了让用户有更好的体验效果解析速度更快,就把来自不同运营商的用户解析到相对应的服务器这样就大大提升了访问速度

实验环境:

  一台内网测试机(单网卡)

  一台网关+DNS(双网关)

  一台外网测试机(单网卡)

  一台web服务器(双网卡)

实验步骤:

1. 安装bind 软件

# yum -y install bind

2. 内核配置文件开启路由转发,修改/etc/sysctl.conf

# vim /etc/sysctl.conf

net.ipv4.ip_forward = 1

3. 修改主配置文件 /etc/named.conf

# vim /etc/named.conf
...
options {
        listen-on port 53 { 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     { any; };
...
view lan {
        match-clients { 192.168.160.0/24; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        include "/etc/lan.zones";
};
view wan {
        match-clients { any; };
        zone "." IN {
                type hint;
                file "named.ca";
        };
        include "/etc/wan.zones";
};
#include "/etc/named.rfc1912.zones";

4. 生成自己定义的区域文件

# cd /etc
# cp -a named.rfc1912.zones lan.zones # vim /etc/lan.zones zone "learn.com" IN { type master; file "lan.localhost"; allow-update { none; }; }; # cp -a lan.zones wan.zones # vim /etc/wan.zones zone "learn.com" IN { type master; file "wan.localhost"; allow-update { none; }; };

5. 配置数据文件

# cd /var/named/
# cp -a named.localhost lan.localhost
# vim lan.localhost
$TTL 1D
@       IN SOA  learn.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.learn.com.
dns     A       192.168.160.133
www     A       192.168.160.132

# cp -a lan.localhost wan.localhost
# vim wan.localhost 
$TTL 1D
@       IN SOA  learn.com. rname.invalid. (
                                        0       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        NS      dns.learn.com.
dns     A       192.168.80.133
www     A       192.168.80.132

6. 重启服务,并开放端口

# systemctl restart named

# firewall-cmd --zone=public --add-port=53/udp
# firewall-cmd --zone=public --add-port=53/udp --permanent
# firewall-cmd --zone=public --add-port=53/tcp
# firewall-cmd --zone=public --add-port=53/tcp --permanent

7. 测试

  内网客户端网卡配置

    将dns 和网关都指为网关服务器的内网口地址

  外网客户端网卡配置

    将dns 和网关都指为网关服务器的外网口地址

网卡配置

内网测试机
# vim /etc/sysconfig/network-scripts/ifcfg-ens33
IPADDR=192.168.160.134
NETMASK=255.255.255.0
GATEWAY=192.168.160.133
DNS1=192.168.160.133

外网测试机
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
IPADDR=192.168.80.131
NETMASK=255.255.255.0
DNS1=192.168.80.133
GATEWAY=192.168.80.133

web 服务器
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
IPADDR=192.168.160.132
NETMASK=255.255.255.0

# vim /etc/sysconfig/network-scripts/ifcfg-ens37
IPADDR=192.168.80.132
NETMASK=255.255.255.0

dns服务器
# vim /etc/sysconfig/network-scripts/ifcfg-ens33 
IPADDR=192.168.160.133
NETMASK=255.255.255.0

# vim /etc/sysconfig/network-scripts/ifcfg-ens37
IPADDR=192.168.80.133
NETMASK=255.255.255.0

测试

[root@localhost ~]# curl www.learn.com
132
[root@localhost ~]# nslookup www.learn.com
Server:        192.168.80.133
Address:    192.168.80.133#53

Name:    www.learn.com
Address: 192.168.80.132

[root@localhost ~]# curl www.learn.com
132
[root@localhost ~]# nslookup www.learn.com
Server:        192.168.160.133
Address:    192.168.160.133#53

Name:    www.learn.com
Address: 192.168.160.132
posted @ 2020-01-03 17:18  一窗明月半帘风  阅读(587)  评论(0编辑  收藏  举报