Linux基础之DNS服务器第一篇

简介

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

DNS域名和DNS域名结构

名称 代表意义
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   <<ipv4地址 这个地址在美国,可以把IP粘贴到百度上可以查出来
a.root-servers.net. 3600000 IN  AAAA    2001:503:ba3e::2:30   <<ipv6地址
b.root-servers.net. 3600000 IN  A   192.228.79.201
c.root-servers.net. 3600000 IN  A   192.33.4.12
d.root-servers.net. 3600000 IN  A   199.7.91.13
d.root-servers.net. 3600000 IN  AAAA    2001:500:2d::d
e.root-servers.net. 3600000 IN  A   192.203.230.10
f.root-servers.net. 3600000 IN  A   192.5.5.241
f.root-servers.net. 3600000 IN  AAAA    2001:500:2f::f
g.root-servers.net. 3600000 IN  A   192.112.36.4
h.root-servers.net. 3600000 IN  A   128.63.2.53
h.root-servers.net. 3600000 IN  AAAA    2001:500:1::803f:235
i.root-servers.net. 3600000 IN  A   192.36.148.17
i.root-servers.net. 3600000 IN  AAAA    2001:7fe::53
j.root-servers.net. 3600000 IN  A   192.58.128.30
j.root-servers.net. 3600000 IN  AAAA    2001:503:c27::2:30
k.root-servers.net. 3600000 IN  A   193.0.14.129
k.root-servers.net. 3600000 IN  AAAA    2001:7fd::1
l.root-servers.net. 3600000 IN  A   199.7.83.42
l.root-servers.net. 3600000 IN  AAAA    2001:500:3::42
m.root-servers.net. 3600000 IN  A   202.12.27.33
m.root-servers.net. 3600000 IN  AAAA    2001:dc3::35
  • 软件包已解决装好,接下来我启动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服务配成功,呵呵这只能算是一个缓存服务器,或转发服务器
  • 第二篇我将搭建根服务器的搭建和从等等的搭建
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容

  • 1. 概述 在网络环境中一般用户只需要在浏览器中输入url如www.sunny.com就可以到对应服务器获取相应的...
    ghbsunny阅读 2,880评论 0 7
  • DNS简介DNS解析关键概念BIND 一、DNS简介: (一)DNS服务 DNS:Domain Name Serv...
    哈喽别样阅读 1,793评论 0 2
  • 什么是DNS及功能: DNS(Domain name server),是将IP地址转换为域名地址。当在互联网访问外...
    魏镇坪阅读 7,631评论 0 8
  • DNS 是什么 DNS (Domain Name System), 也叫网域名称系统,是互联网的一项服务。它实质上...
    interstellar多米诺阅读 2,805评论 0 6
  • 14.1 引言 域名系统(DNS)是一种用于TCP/IP应用程序的分布式数据库,它提供主机名字和IP地址之间的转换...
    张芳涛阅读 1,882评论 0 8