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解析 |