Linux基础之DNS服务器第一篇

简介

  • DNS服务器牵扯到家庭,企业,公司,国家等等领域,只要是互联网不必须就要用到他
  • DNS(Domain Name Server,域名服务器)是进行域名(domain name)和与之相对应的IP地址 (IP address)转换的服务器
  • DNS中保存了一张域名(domain name)和与之相对应的IP地址 (IP address)的表,以解析消息的域名
  • 这一篇我讲演示DNF服务器搭建
  • 第二篇主要讲的是根服务器和COM服务器的搭建,并和其他DNS服务器通信的演示
  • 那我们开始

DNS域名和DNS域名结构

Linux基础之DNS服务器第一篇_第1张图片
名称 代表意义
com 公司、行号、企业
org 组织、机构
edu 教育单位
gov 政府单位
net 网络、通信
mil 军事单位
  • 根域
    • 服务器主要用来管理互联网的主目录,全世界只有13台(这13台根域名服务器名字分别为“A”至“M”),1个为主根服务器在美国
    • 其余12个均为辅根服务器,其中9个在美国,欧洲2个,位于英国和瑞典,亚洲1个位于日本
  • 一级域名:Top Level Domain: tld
    • com, edu, mil, gov, net, org, int,arpa
    • 一级域名中只含有一个“.”,且“.”左边要有内容字段。一级域名又被称为顶级域名
  • 三类:组织域、国家域(.cn, .ca, .hk, .tw)、反向域
  • 二级域名
    • 二级域名的权重高于二级目录,二级域名是作为一个独立的域名出现在互联网上,而二级目录是以网站子页面出现的,所以很多人认为两者之间的权重相同,这种认识是错误的
    • 很多人都误把带www当成一级域名,把其他前缀的当成二级域名,是错误的。正确的域名划分为:
    • .com 顶级域名
    • baidu.com 一级域名
    • www.baidu.com 二级域名
    • bbs.baidu .com 二级域名
    • tieba.baidu .com 二级域名
  • 三级域名
    • 三级域名是形如“www.beiji.baidu.com”的域名,可以当做是二级域名的子域名,特征为域名包含三个“.”,一般来说,三级域名都是免费的
  • 最多127级域名
    • arpa是一个特殊的域名
  • 他用于,域名的反向解析

DNS原理

  • 比如说我想访问一个网站,你的网卡指定了DNS,一般电信或联通,铁通等等的技术员,会给网卡配他们的DNS服务器的
  • 电脑会发出一个信号,这个信号就是发给你指定的DNS服务器的,这个信号就是你想访问的这个网站
  • 但是这个DNS服务器正好里面没有这条记录,他会去找根服务器
  • 根服务器里面存放的是所有的,顶级域名服务器的DNS,如.com,.cn
  • 根里面就没有这个地址,但是他会推荐你去找个哪个顶级域名结尾的服务器如.com结尾的DNS服务器
  • 结果你电脑又去找.comDNS服务器,如果你是二级域名的话就找到了,如果你是三级域名那还要继续找下去
  • 但是他只是知道他的IP,并不是这个网站的服务器,你会跟着这个IP找到这个IP的DNS服务器
  • 最后就是找到了,因为这个DNS服务器肯定知道他服务器的IP,最后你们就可以握手,通信了
  • 不过我们电脑都会有连个DNS服务器IP,就算一个坏了我们一样可以请求找另外一个DNS服务器

DNS解析

  • DNS查询类型:
    • 递归查询 :递归说简单点就是,负责到底都是他一个人,获取到最终结果
    • 迭代查询 : 迭代的意思就是,你问他问题他帮你推荐一个人叫你去问别人问题
  • 名称服务器:域内负责解析本域内的名称的主机
    • 根服务器:13组服务器
    • 中9个在美国,
    • 欧洲2个,位于英国和瑞典
    • 亚洲1个位于日本
  • 解析类型:
    • FQDN --> IP
    • IP --> FQDN
    • 注意:正反向解析是两个不同的名称空间,是两棵不同的解析树

BIND等DNS软件

  • 提醒DNS服务的有很多种软件
  • 其中用的最多的还是BIND
  • BIND是伯克利大学发布的一款软件
  • 最近新的来代替BIND的软件,叫unbound
  • 我们在这里安装的还是BIND,首先我们来看看他的安装包
[root@localhost ~]# yum info bind
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
Name        : bind
Arch        : x86_64
Epoch       : 32
Version     : 9.9.4    <<<版本
Release     : 37.el7
Size        : 1.8 M
Repo        : bash
Summary     : The Berkeley Internet Name Domain (BIND) DNS (Domain Name System) server
URL         : http://www.isc.org/products/BIND/   <<官方网站
License     : ISC
Description : BIND (Berkeley Internet Name Domain) is an implementation of the DNS
            : (Domain Name System) protocols. BIND includes a DNS server (named),
            : which resolves host names to IP addresses; a resolver library
            : (routines for applications to use when interfacing with DNS); and
            : tools for verifying that the DNS server is operating properly.
  • 我们也来看看unbound,因为刚出来市场上反应好像不是很大,因为太新
[root@localhost ~]# yum info unbound
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Available Packages
Name        : unbound
Arch        : x86_64
Version     : 1.4.20   <<版本
Release     : 28.el7
Size        : 473 k
Repo        : bash
Summary     : Validating, recursive, and caching DNS(SEC) resolver
URL         : http://www.nlnetlabs.nl/unbound/   <<官方网站
License     : BSD
Description : Unbound is a validating, recursive, and caching DNS(SEC) resolver.
            : 
            : The C implementation of Unbound is developed and maintained by NLnet
            : Labs. It is based on ideas and algorithms taken from a java prototype
            : developed by Verisign labs, Nominet, Kirei and ep.net.
            : 
            : Unbound is designed as a set of modular components, so that also
            : DNSSEC (secure DNS) validation and stub-resolvers (that do not run
            : as a server, but are linked into an application) are easily possible.
  • dnsmasq,也提供了一些简单的DNS服务和DHCP服务
[root@localhost ~]# yum info dnsmasq
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
Installed Packages
Name        : dnsmasq
Arch        : x86_64
Version     : 2.66
Release     : 21.el7
Size        : 464 k
Repo        : installed
From repo   : anaconda
Summary     : A lightweight DHCP/caching DNS server
URL         : http://www.thekelleys.org.uk/dnsmasq/
License     : GPLv2
Description : Dnsmasq is lightweight, easy to configure DNS forwarder and DHCP server.
            : It is designed to provide DNS and, optionally, DHCP, to a small network.
            : It can serve the names of local machines which are not in the global
            : DNS. The DHCP server integrates with the DNS server and allows machines
            : with DHCP-allocated addresses to appear in the DNS with names configured
            : either in each host or in a central configuration file. Dnsmasq supports
            : static and dynamic DHCP leases and BOOTP for network booting of diskless
            : machines.

DNS服务器搭建

  • 接下来我将配置DNS服务器
  • 我是在CentOS7.3上面演示的那我们开始
  • 当然在开始之前先运行下yum repolist查看下下yum源是否正常
  • 还要在做实验之前先把防火墙和SElinux全给关了以免出问题
  • 首先安装bind,运行命令yum -y install bind
[root@localhost ~]# yum -y install bind
Total                                                                                                                                                         20 MB/s | 2.8 MB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : 32:bind-libs-9.9.4-37.el7.x86_64                                                                                                                                          1/2 
  Installing : 32:bind-9.9.4-37.el7.x86_64                                                                                                                                               2/2 
  Verifying  : 32:bind-9.9.4-37.el7.x86_64                                                                                                                                               1/2 
  Verifying  : 32:bind-libs-9.9.4-37.el7.x86_64                                                                                                                                          2/2 

Installed:
  bind.x86_64 32:9.9.4-37.el7                                                                                                                                                                

Dependency Installed:
  bind-libs.x86_64 32:9.9.4-37.el7                                                                                                                                                           

Complete!
  • 在运行rpm -ql bind,看一下他的文件列表
[root@localhost ~]# rpm -ql bind
/etc/logrotate.d/named
/etc/named
/etc/named.conf     <<配置文件
/etc/named.iscdlv.key
/etc/named.rfc1912.zones
/etc/named.root.key
/etc/rndc.conf  
/etc/rndc.key
/etc/rwtab.d/named
/etc/sysconfig/named
/run/named
/usr/lib/systemd/system/named-setup-rndc.service
/usr/lib/systemd/system/named.service
/usr/lib/tmpfiles.d/named.conf
/usr/lib64/bind
/usr/libexec/generate-rndc-key.sh
/usr/sbin/arpaname
/usr/sbin/ddns-confgen
/usr/sbin/dnssec-checkds
/usr/sbin/dnssec-coverage
/var/log/named.log   <<日志
/var/log/named.log
/var/named
/var/named/data
/var/named/dynamic
/var/named/named.ca   << 世界十三个根服务器地址
/var/named/named.empty
/var/named/named.localhost
/var/named/named.loopback
/var/named/slaves


  • 我们去用命令,cat /var/named/named.ca进去看下
;; ADDITIONAL SECTION:
a.root-servers.net. 3600000 IN  A   198.41.0.4   <
  • 软件包已解决装好,接下来我启动DNS服务器,运行命令systemctl start named
  • 在用命令systemctl enable named,把他设为开机启动
[root@localhost ~]# systemctl  enable named
Created symlink from /etc/systemd/system/multi-user.target.wants/named.service to /usr/lib/systemd/system/named.service.
  • 既然服务已经启动那我们看下他对应的端口号53端口打开没有,运行命令 ss -nutl,他会用两个端口一个是TCP的53一个是UDP的53
[root@localhost ~]# ss -nutl
Netid State      Recv-Q Send-Q                                               Local Address:Port                                                              Peer Address:Port              
udp   UNCONN     0      0                                                                *:15562                                                                        *:*                  
udp   UNCONN     0      0                                                        127.0.0.1:53                                                                           *:*                  
udp   UNCONN     0      0                                                                *:68                                                                           *:*                  
udp   UNCONN     0      0                                                              ::1:53                                                                          :::*                  
udp   UNCONN     0      0                                                               :::10338                                                                       :::*                  
tcp   LISTEN     0      10                                                       127.0.0.1:53                                                                           *:*                  
tcp   LISTEN     0      128                                                              *:22                                                                           *:*                  
tcp   LISTEN     0      128                                                      127.0.0.1:953                                                                          *:*                  
tcp   LISTEN     0      100                                                      127.0.0.1:25                                                                           *:*                  
tcp   LISTEN     0      10                                                             ::1:53                                                                          :::*                  
tcp   LISTEN     0      128                                                             :::22                                                                          :::*                  
tcp   LISTEN     0      128                                                            ::1:953                                                                         :::*                  
tcp   LISTEN     0      100                                                            ::1:25                                                                          :::*    
  • 现在服务已经启动,但是他对应的端口是有问题的,因为绑在了我本地CentOS7.3的本地网卡,既然绑定的别人怎么访问我的DNS服务器
  • 我用我准备好的客户机CentOS6.9来访问下我的DNS服务器
  • 可以用命令telnet 172.16.253.8 53,telnet如果是最小化安装是没有的需要重新安装
  • 172.16.253.8是我CentOS7.3的IP,53是指定的端口
[root@localhost ~]# telnet 172.16.253.8 53 
Trying 172.16.253.8...
telnet: connect to address 172.16.253.8: Connection refused   <<链接拒绝的意思
  • 接下来我要打开端口,要打开端口的话我们要进入/etc/named.conf,里面去修改配置文件
  • 在改之前要注意下他的所有者和组的问题,不然会出问题,组必须要有读权限,备份配置文件的时候要注意
[root@localhost ~]# ll /etc/named.conf 
-rw-r-----. 1 root named 1705 Mar 22  2016 /etc/named.conf
  • 接下来我们修改配置文件,运行命令vim /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 example 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; };  <<  要修改的行,或者把他注释掉
        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";
        allow-query     { localhost; };

        /* 
         - 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";
  • 把里面的127.0.0.1删除换成localhost,注释掉也可以
  • 修改玩以后,执行命令systemctl reload named,来重新读取配置文件
  • 现在在执行下ss -nutl,命令查看下成功了没
[root@localhost ~]# ss -nutl
Netid State      Recv-Q Send-Q                                               Local Address:Port                                                              Peer Address:Port              
udp   UNCONN     0      0                                                                *:15562                                                                        *:*                  
udp   UNCONN     0      0                                                     172.16.253.8:53                                                                           *:*                  
udp   UNCONN     0      0                                                        127.0.0.1:53                                                                           *:*                  
udp   UNCONN     0      0                                                                *:68                                                                           *:*                  
udp   UNCONN     0      0                                                              ::1:53                                                                          :::*                  
udp   UNCONN     0      0                                                               :::10338                                                                       :::*                  
tcp   LISTEN     0      10                                                    172.16.253.8:53                                                                           *:*                  
tcp   LISTEN     0      10                                                       127.0.0.1:53                                                                           *:*                  
tcp   LISTEN     0      128                                                              *:22                                                                           *:*                  
tcp   LISTEN     0      128                                                      127.0.0.1:953                                                                          *:*                  
tcp   LISTEN     0      100                                                      127.0.0.1:25                                                                           *:*                  
tcp   LISTEN     0      10                                                             ::1:53                                                                          :::*                  
tcp   LISTEN     0      128                                                             :::22                                                                          :::*                  
tcp   LISTEN     0      128                                                            ::1:953                                                                         :::*                  
tcp   LISTEN     0      100                                                            ::1:25                                                                          :::*  
  • 已经成功,我们在用我的CentOS6.9-1,的机器连接下
[root@localhost ~]# telnet 172.16.253.8 53 
Trying 172.16.253.8...
Connected to 172.16.253.8.
Escape character is '^]'.
  • 连接成功,这样我的CentOS7.3服务器就可以对外服务器了
  • DNS服务配成功,呵呵这只能算是一个缓存服务器,或转发服务器
  • 第二篇我将搭建根服务器的搭建和从等等的搭建

你可能感兴趣的:(Linux基础之DNS服务器第一篇)