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包
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解析
 
能够返回两套不同的解析结果,说明配置成功。
 
本文出自 “Separate Ways” 博客

相关内容

    暂无相关文章