设为首页 收藏本站
查看: 426|回复: 0

[经验分享] Linux下DNS服务器搭建详解

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-1-13 09:00:23 | 显示全部楼层 |阅读模式
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包

    yum install bind

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

    options {
        directory "/var/named";         #告知工作目录
    };
            
    zone “.” IN  {
    type hint;                           #声明根域
    file "named.ca";                     #根信息存放文件
    };      
            
    zone "localhost" IN {  #本地正解定义
    type master;  #类型为master
    file "localhost.zone";  #正解文件名
    };   
            
    zone "0.0.127.in-addr.arpa" IN {  #本地反解定义
    type master;
    file "named.local";  #反解文件名
    };      
            
    chown :named /etc/named.conf
    #修改属组给named

3.创建3个解析文件

named.ca

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

localhost.zone

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

named.local

    vim named.local
    $TTL 86400              
    @             IN      SOA     localhost.  admin.localhost.      (
                                                                            2011081601   
                                                                            1H                  
                                                                            10M                                             
                                                                            7D                                                      
                                                                            1D                  
                                                                            )                                
    @                    IN          NS          localhost.
    1                    IN          PTR         localhost

4.检测配置文件语法

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

5.开启服务并测试

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



主DNS服务器配置

1.修改主配置文件

    vim /etc/name.conf
    zone "a.org" IN {
    type master;
    file "a.org.zone";
    };   
    zone "0.168.192.in-addr.arpa" IN {
    type master;
    file "192.168.zone";
    };   

2.生成解析文件

/var/named/a.org.zone

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

/var/named/192.168.zone

    $TTL 1200
    @               IN      SOA     ns1.a.org.      admin.a.org. (
                                                            2011081601
                                                            1H
                                                            10M
                                                            7D
                                                            1D
    )
    @               IN      NS      ns1.a.org.           
                    IN      NS      ns2.a.org.
    72              IN      PTR     ns1.a.org.
    71              IN      PTR     ns2.a.org.
    73              IN      PTR     www.a.org.
    74              IN      PTR     ftp.a.org.



从DNS服务器配置

1.安装bind包

    yum install bind

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

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

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

    options {
        directory "/var/named";         
    };
            
    zone “.” IN  {
    type hint;                                    
    file "named.ca";                           
    };      
            
    zone "localhost" IN {
    type master;
    file "localhost.zone";
    };   
            
    zone "0.0.127.in-addr.arpa" IN {
    type master;
    file "named.local";
    };
     
    zone "a.org." IN {
    type slave;  #声明从服务器
    file "slaves/a.org.zone";  #同步文件保存路径
    masters { 192.168.0.72; };  #主服务器ip
    };                       
     
    zone "168.192.in-addr.arpa"  IN {
    type slave;
    file "slaves/192.168.zone";
    master { 192.168.0.72; };
    };

4.启动服务

    service named start

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



子域授权

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

当前位置:Master DNS Server

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

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

    $TTL    1200
    $ORIGIN     .a.org.
    @               IN      SOA     ns1.a.org.      admin.a.org.    (           #在父域中声明
                                                            2011081701
                                                            1H
                                                            10M
                                                            7D
                                                            1D
    )
                        IN          NS              ns1.a.org.
                        IN          NS              ns2.a.org.
                        IN          MX  10       mail.a.org.      
    ns1                 IN          A               192.168.0.72
    ns2                 IN          A               192.168.0.71
    www                 IN          A               192.168.0.73
    bbs                 IN          CNAME    www.a.org.
    ftp                 IN          A               192.168.0.74         
    tech.a.org.         IN          NS           ns1.tech.a.org.     #声明子域DNS server的域名
    ns1.tech.a.org.     IN          A               192.168.0.71        #声明子域DNS server的ip

创建子域DNS

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

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

    $TTL    1200
    $ORIGIN tech.a.org.
    @               IN      SOA     ns1.tech.a.org.      admin.a.org.    (
                                                            2011081701
                                                            1H
                                                            10M
                                                            7D
                                                            1D
    )        
                    IN          NS              ns1.tech.a.org.
                    IN          NS              ns2.tech.a.org.
                    IN          MX  10       mail.tech.a.org.     
    ns1             IN          A               192.168.0.71
    ns2             IN          A               192.168.0.73  
    mail            IN          A               192.168.0.74
    www             IN          A               192.168.1.75
    ftp             IN          A               192.168.1.76         

3.测试

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

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



DNS转发

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

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

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

配置完全转发

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



配置部分转发

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



视图View

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

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

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

    acl internal {                          #声明内网网段
            192.168.0.0/24;
            127.0.0.0/8;
    };
    acl external {                          #声明外网网段
            172.16.0.0/16;
    };
     
    options {
        directory "/var/named";
        recursion yes;
    };      
            
    view "INNET" {                          #在试图中定义内网
        match-clients { internal; };     #定义匹配的client     
        recursion yes;                      #是否递归(默认是允许)
            
            zone "." IN {                  
                        type hint;
                        file "named.ca";
            };
     
     
            zone "a.org"{
                        type master;
                        file "a.org.internal";  #使用解析内网的文件
            };
    };     
            
    view "EXNET" {                          #在试图中定义外网
        match-clients { external; };     #定义匹配的client     
        recursion yes;                      #是否递归(默认是允许)
            
            zone "." IN {                        
                        type hint;
                        file "named.ca";
            };
     
            zone "a.org"{
                        type master;
                        file "a.org.external"; #使用解析外网的文件
            };
    };      



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

内网:

    vim /var/named/a.org.internal
    $TTL    1200
    $ORIGIN     .a.org.
    @               IN      SOA     ns1.a.org.      admin.a.org.    (            
                                                            2011081701
                                                            1H
                                                            10M
                                                            7D
                                                            1D
    )
                            IN          NS              ns1.a.org.
                            IN          NS              ns2.a.org.
                            IN          MX  10       mail.a.org.      
    ns1                     IN          A               192.168.0.72
    ns2                     IN          A               192.168.0.71
    www                     IN          A               192.168.0.73
    bbs                     IN          CNAME    www.a.org.
    ftp                     IN          A               192.168.0.74

外网:

    vim /var/named/a.org.external
    $TTL    1200
    $ORIGIN     .a.org.
    @               IN      SOA     ns1.a.org.      admin.a.org.    (            
                                                            2011081701
                                                            1H
                                                            10M
                                                            7D
                                                            1D
    )
                            IN          NS              ns1.a.org.
                            IN          NS              ns2.a.org.
                            IN          MX  10       mail.a.org.      
    ns1                     IN          A               172.16.100.72
    ns2                     IN          A               172.16.100.71
    www                     IN          A               172.16.100.73
    bbs                     IN          CNAME    www.a.org.
    ftp                     IN          A               172.16.100.74

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

3.测试

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



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

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

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-40658-1-1.html 上篇帖子: centos 6.5 x86_64 justniffer安装 下篇帖子: CentOS6.6升级到CentOS7 服务器 Linux
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表