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. 谷歌浏览器 —— 快捷键(vimium:像使用 vim 一样操作当前页面)

    Chrome 键盘快捷键 拷贝当前页面内的某链接: 首先输入 y(进入 yank 模式),输入 f,为当前页面内的全部超链接编号,然后输入待拷贝的链接编号,即可将该链接复制到粘贴板: 1. 使用 vi ...

  2. 洛谷P1962 斐波那契数列(矩阵快速幂)

    题目背景 大家都知道,斐波那契数列是满足如下性质的一个数列: • f(1) = 1 • f(2) = 1 • f(n) = f(n-1) + f(n-2) (n ≥ 2 且 n 为整数) 题目描述 请 ...

  3. Android GreenDao 使用教程

    上一篇 总结了grendao 环境搭建以及简单的增删查改,接下来将全面解析框架的使用,基于上篇的orm模型(Note)数据库讲解 GreenDao的插入: 插入的方式有很多: daoSession.g ...

  4. Java之Foreach语句

    Foreach是for语句的特殊简化版本,但任何时候的foreach语句都可以改写成for语句.Foreach语句在遍历数组等方面为程序员提供了很大的方便 语法如下: For(元素变量 x:遍历对象o ...

  5. 关于Android Studio更新后一直Refreshing的解决办法!

    今天更新了一下studio一直是这个问题 查了很多资料终于解决了 造成这个问题的原因是要更新的gradle版本和studio安装路径中的gradle版本不一致导致的 把他们改成一致的即可 在这个目录里 ...

  6. 双十一只是在搞噱头么?看看ABBYY FineReader就知道了

    双十一就这样轰轰烈烈的度过了,想问恢复正常工作日的你还好么,还能好好工作么,十分钟查一次物流的有木有? 由于ABBYY FineReader 12 限量200套半价活动过于火爆,各位小主也是用实际行动 ...

  7. 使用Eclipse将项目上传至远程GitLab

    一.先将项目提交至本地仓库 1.  右击项目——Team——Share Project… 2.在弹出框中,选择Git——Next 3.在弹出框中进行如下步骤操作 4.至此,我们已经成功创建了本地GIT ...

  8. 最近邻插值法&线性插值&双线性插值&三线性插值

    最近邻插值法nearest_neighbor是最简单的灰度值插值.也称作零阶插值,就是令变换后像素的灰度值等于距它最近的输入像素的灰度值. 造成的空间偏移误差为像素单位,计算简单,但不够精确.但当图像 ...

  9. Day 02 - 02 编程语言的分类

    编程语言的分类 机器语言分为: 1.机器语言 优点:执行代码效率非常快 缺点:开发效率低 2.汇编语言 优点(相对于机器语言):开发效率高 缺点(相对于机器语言):执行效率低 3.高级语言 解释型(同 ...

  10. 如何打印枚举类型:%d

    #include <stdio.h> typedef enum SessionState { SESSION_OPENING, /* Session scope is being crea ...