Linux下DNS服务器搭建详解

DNS  即Domain Name System(域名系统)的缩写,它是一种将ip地址转换成对应的主机名或将主机名转换成与之相对应ip地址的一种机制。其中通过域名解析出ip地址的叫做正向解析,通过ip地址解析出域名的叫做反向解析。

下面对DNS的工作流程及原理进行简要说明

DNS的查询流程:需要解析服务的Client先查看本机的/etc/hosts;若无结果,则client查看本地的DNS缓存服务器;若无结果,则查找所属域的首选DNS服务器;若此时本地首选DNS服务器仍无法解析,则会想根域名服务器进行查询或选择转发解析请求。

DNS 的查询规则:递归式查询,即client向支持递归查询的DNS Server发出解析请求,则自DNS服务器不论是自身直接解析还是无法解析想根发出请求,总会由其向client返回一个结果;迭代式查询,即接收 client解析请求的DNS Server,若其能够解析则直接返回结果,若其不能解析将把解析请求交给其他DNS服务器,而不是自己亲自将解析过程完成。

所谓的“根”服务器:根 服务器主要用来管理互联网的主目录,全世界只有13台。1个为主根服务器,放置在美国。其余12个均为辅根服务器,其中9个放置在美国,欧洲2个,位于英 国和瑞典,亚洲1个,位于日本。所有根服务器均由美国政府授权的互联网域名与号码分配机构ICANN统一管理,负责全球互联网域名根服务器、域名体系和 IP地址等的管理。

DNS记录的类型:

A:Address 域名向ip地址转换的记录;

PTR:Printer ip地址向域名转换的记录;

NS:代表域内的dns服务器;

MX:代表域内的邮件服务器;

CNAME:域名的别名;

SOA:start of authority用于标示域内主DNS服务器。

提供DNS服务的软件:BIND即Berkeley Internet Name Domain有加州大学伯克利分校研发是当今提供dns服务应用最广的软件。

下面让我们进入正题,以下内容包括:DNS的缓存服务器、主/从服务器、子域授权、转发以及视图的配置步骤

DNS缓存服务器

Ps:为了更好的体会和理解dns的配置文件和域解析文件,作者在此只安装bind包,以手动编辑的方式生成这几个必须的文件。

1.安装bind包

  1. yum install bind

2.创建住配置文件/etc/named.conf

  1. options {
  2. directory "/var/named";         #告知工作目录
  3. };
  4. zone “.” IN  {
  5. type hint;                           #声明根域
  6. file "named.ca";                     #根信息存放文件
  7. };
  8. zone "localhost" IN {  #本地正解定义
  9. type master;  #类型为master
  10. file "localhost.zone";  #正解文件名
  11. };
  12. zone "0.0.127.in-addr.arpa" IN {  #本地反解定义
  13. type master;
  14. file "named.local";  #反解文件名
  15. };
  16. chown :named /etc/named.conf
  17. #修改属组给named

3.创建3个解析文件

named.ca

  1. dig -t NS . > /var/named/named.ca
  2. #向跟服务器发起查询并重定向到目标文件

localhost.zone

  1. vim localhost. zone
  2. $TTL 86400
  3. #默认的ttl值
  4. @               IN      SOA     localhost.  admin.localhost.     (
  5. #主DNS服务器localhost.
  6. 2011081601
  7. #时间+序列号01
  8. 1H
  9. #刷新时间:每隔多久来master查询更新
  10. 10M
  11. #重试时间间隔
  12. 7D
  13. #过期时间,如果7天仍找不到master,slave停止服务
  14. 1D
  15. #否定答案ttl值,表示查询不到再次查询需要时间
  16. @                   IN          NS          localhost.
  17. #当前域的DNS服务器是localhost.
  18. localhost.          IN          A           127.0.0.1

named.local

  1. vim named.local
  2. $TTL 86400
  3. @             IN      SOA     localhost.  admin.localhost.      (
  4. 2011081601
  5. 1H
  6. 10M
  7. 7D
  8. 1D
  9. @                    IN          NS          localhost.
  10. 1                    IN          PTR         localhost

4.检测配置文件语法

  1. named-checkconf
  2. named-checkzone “localhost” /var/named/localhost.zone
  3. named-checkzone “0.0.127.in-addr.arpa” /var/named/named.local

5.开启服务并测试

  1. service named start
  2. dig -t A  域名 #测试正解
  3. dig -x ip地址 #测试反解

主DNS服务器配置

1.修改主配置文件

  1. vim /etc/name.conf
  2. zone "a.org" IN {
  3. type master;
  4. file "a.org.zone";
  5. };
  6. zone "0.168.192.in-addr.arpa" IN {
  7. type master;
  8. file "192.168.zone";
  9. };

2.生成解析文件

/var/named/a.org.zone

  1. $TTL    1200
  2. @               IN      SOA     ns1.a.org.      admin.a.org.    (
  3. 2011081601
  4. 1H
  5. 10M
  6. 7D
  7. )
  8. IN      NS      ns1.a.org.     #NS包括主从两台服务器
  9. IN      NS      ns2.a.org.
  10. IN      MX  10  mail.a.org.
  11. ns1.a.org.       IN      A       192.168.0.72      #两台服务器的ip的ip地址,否则主服务器无法向从服务器同步数据
  12. ns2.a.org.       IN      A       192.168.0.71
  13. www.a.org.       IN      A       192.168.0.73
  14. bbs.a.org.       IN      CNAME   www.a.org.
  15. ftp.a.org.       IN      A       192.168.0.74

/var/named/192.168.zone

  1. $TTL 1200
  2. @               IN      SOA     ns1.a.org.      admin.a.org. (
  3. 2011081601
  4. 1H
  5. 10M
  6. 7D
  7. 1D
  8. )
  9. @               IN      NS      ns1.a.org.
  10. IN      NS      ns2.a.org.
  11. 72              IN      PTR     ns1.a.org.
  12. 71              IN      PTR     ns2.a.org.
  13. 73              IN      PTR     www.a.org.
  14. 74              IN      PTR     ftp.a.org.

从DNS服务器配置

1.安装bind包

  1. yum install bind

2.复制named.conf、localhost.zone和named.local到本地对应目录

  1. scp 192.168.0.72:/etc/named.conf /etc/named.conf
  2. scp 192.168.0.72:/var/bind/localhost.zone /var/bind/localhost.zone
  3. scp 192.168.0.72:/var/bind/named.local /var/bind/named.local

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

  1. options {
  2. directory "/var/named";
  3. };
  4. zone “.” IN  {
  5. type hint;
  6. file "named.ca";
  7. };
  8. zone "localhost" IN {
  9. type master;
  10. file "localhost.zone";
  11. };
  12. zone "0.0.127.in-addr.arpa" IN {
  13. type master;
  14. file "named.local";
  15. };
  16. zone "a.org." IN {
  17. type slave;  #声明从服务器
  18. file "slaves/a.org.zone";  #同步文件保存路径
  19. masters { 192.168.0.72; };  #主服务器ip
  20. };
  21. zone "168.192.in-addr.arpa"  IN {
  22. type slave;
  23. file "slaves/192.168.zone";
  24. master { 192.168.0.72; };
  25. };

4.启动服务

  1. service named start

ps:服务正常启动,且同步成功后/var/named/slaves/下会生成从主服务器同步过来的两个解析文件

子域授权

所谓子域授权就是在原有域下声明子域DNS。

当前位置:Master DNS Server

在a.org这个域中加入子域DNS服务器,tech.a.org.com

修改/var/named/a.org.zone内容

  1. $TTL    1200
  2. $ORIGIN     .a.org.
  3. @               IN      SOA     ns1.a.org.      admin.a.org.    (           #在父域中声明
  4. 2011081701
  5. 1H
  6. 10M
  7. 7D
  8. 1D
  9. )
  10. IN          NS              ns1.a.org.
  11. IN          NS              ns2.a.org.
  12. IN          MX  10       mail.a.org.
  13. ns1                 IN          A               192.168.0.72
  14. ns2                 IN          A               192.168.0.71
  15. www                 IN          A               192.168.0.73
  16. bbs                 IN          CNAME    www.a.org.
  17. ftp                 IN          A               192.168.0.74
  18. tech.a.org.         IN          NS           ns1.tech.a.org.     #声明子域DNS server的域名
  19. ns1.tech.a.org.     IN          A               192.168.0.71        #声明子域DNS server的ip

创建子域DNS

1.先创建一个缓存DNS服务器,具体步骤见上文

2.创建/var/named/tech.a.org

  1. $TTL    1200
  2. $ORIGIN tech.a.org.
  3. @               IN      SOA     ns1.tech.a.org.      admin.a.org.    (
  4. 2011081701
  5. 1H
  6. 10M
  7. 7D
  8. 1D
  9. )
  10. IN          NS              ns1.tech.a.org.
  11. IN          NS              ns2.tech.a.org.
  12. IN          MX  10       mail.tech.a.org.
  13. ns1             IN          A               192.168.0.71
  14. ns2             IN          A               192.168.0.73
  15. mail            IN          A               192.168.0.74
  16. www             IN          A               192.168.1.75
  17. ftp             IN          A               192.168.1.76

3.测试

  1. dig -t A ns1.tech.a.org @192.168.0.72
  2. #通过父域解析子域是可以实现的
  3. dig -t A ns1.tech.a.org @192.168.0.71
  4. #通过子域解析自己的也可以实现
  5. dig -t A ns1.a.org  @192.168.0.71
  6. #此时通过子域解析父域就解析不到了

要实现此功能就要依赖转发实现了。

DNS转发

完全转发:只要DNS server无法解析的请求就统统转发到option中定义的forwarders上。

部分转发:只转发已经在声明type forward; 所对应域的解析请求,对于其他域的解析请求按常规方法处理。

forward {only|first} 选项only:如果不能完成解析请求就向forwarder进行转发,且进行递归式转发(即不成功不停止);选项first:先请求递归,若没有予以响应,使用迭代去找根;

配置完全转发

  1. vim /etc/named.conf
  2. options {                       #定义在option则是完全转发
  3. directory "/var/named";
  4. forward first;                  #转发模式使用first
  5. forwarders { 192.168.0.72; };   #转发到192.168.0.72(转发至父域DNS server)
  6. };

配置部分转发

  1. vim /etc/named.conf
  2. zone "a.org" IN {                #声明一个区域
  3. type forward;                    #定义此区域是一个转发域,即域名匹配a.org就果断转发至192.168.0.72的forwarders上
  4. forwarders { 192.168.0.72; };
  5. };

视图View

实现:内网用户一套地址解析,外网访问一套地址解析;来自不同的网络的用户,根据我们的部署返回不同网络的主机。

目的:实现内网用户与外网用户通过视图DNS对应两套不同的解析策略

1.创建具有视图功能DNS服务器的主配置文件/etc/named.conf

  1. acl internal {                          #声明内网网段
  2. 192.168.0.0/24;
  3. 127.0.0.0/8;
  4. };
  5. acl external {                          #声明外网网段
  6. 172.16.0.0/16;
  7. };
  8. options {
  9. directory "/var/named";
  10. recursion yes;
  11. };
  12. view "INNET" {                          #在试图中定义内网
  13. match-clients { internal; };     #定义匹配的client
  14. recursion yes;                      #是否递归(默认是允许)
  15. zone "." IN {
  16. type hint;
  17. file "named.ca";
  18. };
  19. zone "a.org"{
  20. type master;
  21. file "a.org.internal";  #使用解析内网的文件
  22. };
  23. };
  24. view "EXNET" {                          #在试图中定义外网
  25. match-clients { external; };     #定义匹配的client
  26. recursion yes;                      #是否递归(默认是允许)
  27. zone "." IN {
  28. type hint;
  29. file "named.ca";
  30. };
  31. zone "a.org"{
  32. type master;
  33. file "a.org.external"; #使用解析外网的文件
  34. };
  35. };

2.编辑两套不同的解析文件

内网:

  1. vim /var/named/a.org.internal
  2. $TTL    1200
  3. $ORIGIN     .a.org.
  4. @               IN      SOA     ns1.a.org.      admin.a.org.    (
  5. 2011081701
  6. 1H
  7. 10M
  8. 7D
  9. 1D
  10. )
  11. IN          NS              ns1.a.org.
  12. IN          NS              ns2.a.org.
  13. IN          MX  10       mail.a.org.
  14. ns1                     IN          A               192.168.0.72
  15. ns2                     IN          A               192.168.0.71
  16. www                     IN          A               192.168.0.73
  17. bbs                     IN          CNAME    www.a.org.
  18. ftp                     IN          A               192.168.0.74

外网:

  1. vim /var/named/a.org.external
  2. $TTL    1200
  3. $ORIGIN     .a.org.
  4. @               IN      SOA     ns1.a.org.      admin.a.org.    (
  5. 2011081701
  6. 1H
  7. 10M
  8. 7D
  9. 1D
  10. )
  11. IN          NS              ns1.a.org.
  12. IN          NS              ns2.a.org.
  13. IN          MX  10       mail.a.org.
  14. ns1                     IN          A               172.16.100.72
  15. ns2                     IN          A               172.16.100.71
  16. www                     IN          A               172.16.100.73
  17. bbs                     IN          CNAME    www.a.org.
  18. ftp                     IN          A               172.16.100.74

反解文件编辑与主从DNS反解文件相同,在此不再赘述。

3.测试

作者使用VMware虚拟机,在另一台虚拟机中配置两块虚拟网卡分别是192.168.0.0和172.16.100.0网段。

  1. dig -t A www.a.org @192.168.0.71
  2. dig -t A www.a.org @172.16.100.71
  3. #分别测试两网段的DNS解析

能够返回两套不同的解析结果,说明配置成功。

Linux下DNS服务器搭建详解的更多相关文章

  1. Linux下dns服务器搭建

    Linux下dns服务器搭建1-环境Red Hat Enterprise Linux Server release 6.7 (Santiago)2-配置本地yum源安装dns相关包yum -y ins ...

  2. linux下DNS服务器搭建,正反向解析配置

    dns服务器之前自己搭建玩过,一段时间不搞,加上当时没写文档,基本忘光光了,这次老实了,写个文档记下来,方便以后查阅. 1.服务器准备 为了避免不必要的问题,关闭防火墙,关闭selinux,hosts ...

  3. linux下samba共享服务器搭建详解

    这两天业务需求搭了一台服务器.要求samba共享文件. 葡萄美酒月光杯的前戏就省了,我们直接上干货. 1.yum方式安装samba yum  -y  install samba 2.将/etc/sam ...

  4. linux下的服务器搭建集成环境

    linux下的服务器搭建集成环境 ——写给初学者的我们 1.准备工具 1.1 SecureCRT SecureCRT是一款支持SSH(SSH1和SSH2)的终端仿真程序,简单地说是Windows下登录 ...

  5. Linux下tomcat的安装详解

    Linux下tomcat的安装详解 来源: ChinaUnix博客 日期: 2007.01.21 22:59 (共有0条评论) 我要评论 一,安装前的准备:1,Linux版本:我的是企业版.(至于红帽 ...

  6. Linux下的文件目录结构详解

    Linux下的文件目录结构详解 / Linux文件系统的上层根目录 /bin 存放用户可执行的程序 /boot 操作系统启动时所需要的文件 /dev 接口设备文件目录,例如:had表示硬盘 /etc ...

  7. Linux下SVN服务器搭建配置

    Linux下SVN服务器搭建配置 1.SVN服务安装 yum install subversion 2.创建SVN代码仓库 mkdir /data/svn svnadmin create /data/ ...

  8. 《Linux下FTP服务器搭建及FTP使用》

    .LOGAndy:mxtd114 <Linux下FTP服务器搭建> 0.root登录 1.安装ftp # yum -y install ftp 2.安装vsftpd # yum -y in ...

  9. Linux下find命令用法详解

    Linux下find命令用法详解   学神VIP烟火 学神IT教育:XueGod-IT   最负责任的线上直播教育平台   本文作者为VIP学员 烟火   第一部分:根据文件名查找   1.在当前目录 ...

随机推荐

  1. 2015.03.16,外语,读书笔记-《Word Power Made Easy》 00 “如何最大限度的利用本书”学习笔记

    备注:蓝色表明是自己学习或笔记的部分,红色表明特别的地方,例如自己不理解或需要重点关注的地方.加粗单词表明是要加入生词库学习的词语.单词后面括号中的蓝色部分,是单词的解释和音标. 1.this is ...

  2. HDU 5493 Queue 树状数组+二分

    Queue Problem Description N people numbered from 1 to N are waiting in a bank for service. They all ...

  3. virtual table(有180个评论)

    To implement virtual functions, C++ uses a special form of late binding known as the virtual table. ...

  4. Node.js:连接 MySQL

    ylbtech-Node.js:连接 MySQL 1.返回顶部 1. Node.js 连接 MySQL 本章节我们将为大家介绍如何使用 Node.js 来连接 MySQL,并对数据库进行操作. 如果你 ...

  5. HD-ACM算法专攻系列(19)——Leftmost Digit

    问题描述: AC源码: 解题关键是,数据很大,不能强算,需要使用技巧,这里使用科学计算法,令N^N=a*10^n ,取对数后变为 N*log10(N)=log10(a)+n,令x = log10(a) ...

  6. git工具的安装和使用

    啰嗦几句: 世界上本没有后悔药,但软件开发提供了后悔药,那就是代码管理工具.它可以让你的代码穿越回以前的状态,甚至可以指定某一个时刻,而且还可以穿越回来. 当下流行的代码管理工具有 SVN 和 GIT ...

  7. Chosen:Select 选择框的华丽变身

    HTML Form 表单里的各种组件,例如文本输入框,textarea,按钮等,都可以通过CSS或其它技术进行美化,让它们看起来很漂亮了,唯独下拉列表选项框(select box),不管你怎么做,它摆 ...

  8. Rabbit MQ 学习 (一)Window安装Erlang环境

    之前也没有用过Rabbit MQ ,最近正在学习中,记性不好,特意记一下. 百度一下 先得 安装 Erlang 并且 设置环境变量. 在Erlang 官网去下载,那个慢呀... 还好CSDN 里有人提 ...

  9. Centos7 minimal 系列之rabbitmq安装(八)

    一.安装Erlang 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. 这种方法网站访问不了 wget https://packages.erlang-solutions.com/ ...

  10. [NOIP补坑计划]NOIP2017 题解&做题心得

    终于做完了…… 场上预计得分:?(省一分数线:295) 由于看过部分题解所以没有预计得分qwq 题解: D1T1 小凯的疑惑 题面 震惊!一道小学奥数题竟难倒无数高中考生! 欢迎大家以各种姿势*和谐* ...