视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Linux下DNS服务器搭建详解
2025-09-24 06:36:25 责编:小OO
文档
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 800 

#默认的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 800 

@ 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解析下载本文

显示全文
专题