一,什么是DNS呢?
我们知道,在网络中是依靠IP地址来唯一标识一台主机,依靠IP地址和端口来标识某个主机上的某个服务。而我们目前应用最广泛的是IPV4的地址,它有32位组成,也就是会有上亿的不同的ip地址。如果我们访问一个主机上的服务,都需要记住此主机的ip地址,那将是多么可怕的一件事。所以,人类想出了一个好方法,把ip地址和主机名称联系起来,这样有助于我们的记忆,通过主机名称来获取该主机的ip地址。故应运而生,我们有了DNS,即域名解析服务,专门用于把主机名称解析为对应的ip地址,以实现网络主机之间的通信。我们的DNS服务通常运行在一个或几个性能比较稳定的主机上,而这台主机就是我们的DNS服务器。
全世界有不计其数的主机,而就像我们人的名字可以相同一样,主机的名称是可以相同的。而我们怎么通过主机名称来判断此机非彼机呢?这就需要给它一个域名。有了域名,即使相同名字的主机只要不在同一个域内,就可以实现通信。DNS是有层次之分的,每个层次上的主机名称和域名是不同的,整个层次的架构是一个树状的结构。
最上层的是根域,全世界的所有域都在根域之下,用”.”表示,根域负责管理顶级域。全世界有13台根域的服务器。
第二层是顶级域:有com,edu,gov,mil,org,cn.us,hk等。他们每个都有自己的意义:
com:商业公司
edu:教育单位
gov:政府单位
mil:军事单位
org:组织,机构
cn:中国
us:美国
hk:香港
第三层是二级域:比如cctv.cn.,magedu.com.,baidu.com.等
再往下,可以继续划分子域,例zz.edu.cn.;或是指定这个域负责解析的相应DNS服务器的主机名称,例:
www.baidu.com.,它是标识的是在baidu.com.这个域中的一台主机www。
每个域都要指定一个主机去管理这个域,这个被指定的主机就是这个域中的域名服务器,并且每个域的域名服务器仅仅管理它的下一层的域名。例:com.这个域的DNS服务器只知道baidu.com这个域的,它并不知道
www.baidu.com.这台主机。
DNS的工作流程是怎么样的呢?
首先,www.magedu.com.主机会查找自己的缓存,看是否有对应
www.jia.com.的缓存记录,如果有的话就直接把对应ip返回给主机。如果没有,再查找自己的hosts文件,如果没有相应的记录,才开始向其指向的域名服务器即管理magedu.com.这个域的DNS服务器发送解析请求,域名服务器收到请求后,先判断这个请求
www.jia.com.是不是自己所负责区域中的主机,如果是的话,就通过查询自己的区域数据文件返回解析结果;如果不是的话,就查询自己的缓存,缓存中有的话就返回解析,缓存中没有记录的话就直接向根域名服务器发送解析请求。根域名服务器收到请求后,判断是自己管理的com.这个域管理的主机,故把管理com.域的DNS服务器的ip返回给管理magedu.com域的DNS服务器,然后管理magedu.com.的DNS服务器会向管理com.域的DNS服务器发送解析请求,管理com.域的DNS服务器判断是自己管理的域jia.com.这个域中的主机,故再把管理jia.com.域的DNS服务器的ip返回给管理magedu.com域的DNS服务器。然后,管理magedu.com.域的DNS服务器向管理jia.com域的主机发送解析请求,管理jia.com域的DNS服务器判断是自己所负责区域的主机,然后查询区域文件,找到对应的记录项,返回给管理magedu.com域的DNS服务器。管理magedu.com域的DNS服务器收到对应的ip记录后,解析结果存入自己的缓存,并把解析结果发送给
www.magedu.com.这台主机,这台主机也会缓存这个解析结果,至此解析过程结束。
DNS是靠什么实现解析的呢?这就需要我们定义zone了
DNS可以实现把FQDN解析为对应的ip地址,这叫正向解析;而把ip地址解析为对应的FQDN,这叫反向解析。而简单点来说,一个正向解析的设置或反向解析的设置就是一个zone。即我们可以定义本机的正向和反向解析区域,可以定义一个域的正向和反向解析区域等。当然,正向解析和反向解析是相互独立的,并不是一定要设置反向解析。
而我们DNS区域的定义在/etc/named.conf这个文件中,它是DNS的主配置文件。
常用的命令:
service named start|stop|restart|reload|status|configtest
开启,关闭,重新,重新载入,显示服务状态,检查全部区域文件的语法是否正确
named-checkconf 检查/etc/named.conf这个文件的语法
named-checkzone PATH 检查一个区域文件的语法,PATH要使用绝对路径
dig –t A FQDN 正向解析
dig –x IP 反向解析
dig –t NS 正向解析一个域,会显示负责这个域的主机
dig –t axfr domain 获得整个区域的记录内容
二,构建缓存DNS:
DNS要受selinux的管理,并且防火墙也会组织DNS服务器之间数据的传送,故搭建DNS服务器之前,要配置selinux和防火墙或是关闭他们。
我们的named进程是由named用户来运行的,故我们要将区域配置文件的属组改为named,以便named进程运行正常
Linux中是需要安装bind这个软件包来提供DNS服务的,需要安装:
bind,bind-utils,bind-libs这三个软件包,这里我们使用文件来存放我们的记录项,而不使用数据库。
安装完这三个软件包之后,会自动生成一个目录/var/named,这个一般用于我们bind的工作目录。
现在我们开始DNS的构建:
1,vi /etc/named.conf 这个文件是bind的默认配置文件,我们要自己建
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";
};
options:用来定义全局作用域,在这里面定义的整个区域生效;
directory:用来指定我们bind的工作目录
zone:定义区域,格式是固定的。
”.”:定义根的正向解析区域
“localhost”:定义的是本机的正向解析区域
“0.0.127.in-addr.arpa”:定义的是本机的反向解析区
type:定义区域的类型
master:主
slave:从
hint:线索域,找不到的都找这个区域
forward:转发
file:定义的是该区域的解析文件,要在/var/named这个目录建立
cd /var/named
dig –t NS . > named.ca 定义根域解析文件
vi localhost.zone 定义本机正向解析文件
$TTL 600
@ IN SOA localhost admin.localhost. (
2012030801 序列号,每次修改此文件,要加1
20M 刷新时间,多长时间从dns到主dns更新记录
5M 如果与dns链接失败,多长时间后重试
7D 与主dns断开连接多长时间后从dns会宣告失效
1D) 那些解析不到的记录的缓存时间
IN NS localhost.
localhost. IN A 127.0.0.1
vi named.local 定义本机反向解析文件
$TTL 600
@ IN SOA localhost admin.localhost. (
2012030801
20M
5M
7D
1D)
IN NS localhost.
1 IN PTR localhost.
由于我们的根服务器有13台,是固定的。所有我们直接用dig命令查询后导入根区域的文件。
$TTL:定义了每条记录的TTL值
IN:
记录的类型有:
NS:指定一个域的DNS服务器
A :正向解析记录
PTR:反正解析记录
CNAME:指定别名
MX:指定邮件服务器,后面要指定优先级0-99,值越小优先级越高
chmod :named /var/named/* /etc/named.conf
service named start 开启DNS服务
至此,我们的DNS现在已经是一个缓存DNS了,每个DNS的建立过程都要经历这个阶段。
三,构建一个管理域的DNS(以magedu.com为例)
vi /etc/named.conf
添加如下内容:
zone "magedu.com" IN { 定义一个提供正向解析的区域
type master;
file "magedu.com.zone";
};
zone "168.192.in-addr.arpa" IN { 定义一个提供反向解析的区域
type master;
file "168.192.zone";
};
cd /var/named
vi magedu.com.zone
$TTL 600
$ORIGIN magedu.com.
@ IN SOA ns admin (
2012030801
20M
5M
7D
1D
)
IN NS ns
IN MX 10 mail
mail IN A 192.168.0.200
pop IN CNAME mail
ns IN A 192.168.0.100
www IN A 192.168.0.100
vi 168.192.zone
$TTL 600
@ IN SOA ns.magedu.com. admin.magedu.com. (
2012030801
20M
5M
7D
1D
)
IN NS ns.magedu.com.
200.0 IN PTR mail.magedu.com.
100.0 IN PTR ns.magedu.com.
100.0 IN PTR www.magedu.com.
chmod :named /var/named/* /etc/named.conf
service named restart 重启DNS服务
vi /etc/resolv.conf 修改我们的DNS指向
nameserver 192.168.0.100
至此,管理magedu.com这个域的DNS服务器就建好了,能提供正向和反向的解析。
四,rndc工具的使用:
为了使我们便于管理DNS,我们可以安装rndc这个工具:
rndc-confgen > /etc/rndc.conf
tail /etc/rndc.conf | head -9 | sed 's@^#@@g' >> /etc/named.conf
service named restart 重启服务,我们的rndc就能使用了
rndc reload 重新载入配置文件
rndc status 显示服务器状态信息
rndc flush 情况服务器的缓存
rndc stop 停止服务
rndc reconfig 重新载入主配置文件和发送更新的文件,可以用于从DNS更新主DNS的区域文件
五,为magedu.com域中的主DNS构建一个从DNS服务器
从DNS会完全备份主DNS的记录,当主DNS挂掉之后,在一段时间内可以负责域中FQDN的解析,可以提供时间让我们修复主DNS,增加了服务的稳定性。
现在我们把192.168.0.200这台主机做成magedu.com的从DNS
首先,我们的主DNS要定义一个从DNS,即:
vi magedu.com.zone 向正向区域文件中添加这两行
@ IN NS ns2
Ns2 IN A 192.168.0.200
vi 168.192.zone 向正向解析区域添加这两行
@ IN NS ns2.magedu.com.
200.0 IN PTR ns2.magedu.com.
rndc reload 重读区域配置文件,使其生效
vi /etc/named.conf
在文件的起始行添加:
acl OURCLIENT { 定义一个名字为OURCLIENT的acl列表
192.168.0.0/16;
127.0.0.1;
};
在options选项中添加:
allow-transfer { 192.168.0.200; }; 即只允许从DNS进行完全区域传送
allow-recursion { OURCLIENT; }; 只允许192.168.0.0网段主机进行递归查询
在我们的192.168.0.200这台主机上,安装bind,bind-util,bind-libs这三个软件包
vi /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 "magedu.com" IN {
type slave; 说明这个主机是这个域的从DNS
masters { 192.168.0.100; }; 指定主DNS
file "slaves/magedu.com"; 指定正向解析文件,存放在/var/named/slaves中
};
zone "168.192.in-addr.arpa" IN {
type slave;
masters { 192.168.0.100; };
file "slaves/168.192.zone";
};
cd /var/named
vi named.ca
vi localhost.zone
vi named.local
这三个文件和主DNS的一样,这里就不写它的内容了
chmod :named /var/named/* /etc/named.conf
安装rndc工具:
rndc-confgen > /etc/rndc.conf
tail /etc/rndc.conf | head -9 | sed 's@^#@@g' >> /etc/named.conf
service named restart 重启服务,我们的rndc就能使用了
rndc reconfig 会自动把主DNS上的区域文件同步到/var/named/slaves目录中
现在我们的从DNS就建好了。只要两台主机能正常通信,防火墙规则允许传输数据。我们在主DNS上更改记录文件并修改序列号,rndc reload重新载入文件后,我们的从DNS就会自动更新对应文件的内容。
六,转发器的构建;
例如设置192.168.0.100这台DNS服务器,使其不解析example.com这个域中的主机,把 example.com这个域中主机请求转发到192.168.0.254这台DNS,则:
vi /etc/named.conf 添加如下行
zone "example.com" IN {
type forward;
forwarders { 192.168.0.254; };
};
rndc reload 重新载入配置文件
至此,只要是对example.com这个域中主机的解析请求,就会被转发给192.168.0.254这台主机,192.168.0.100这台主机不做解析。
七,子域授权
我们以magedu.com为例,创建一个子域tech.magedu.com
我们只需修改magedu.com.zone这个文件
cd /var/named
vi magedu.com.zone
添加如下行:
tech IN NS tech.ns
tech.ns IN A 192.168.0.5
service named restart 使配置生效
我们在一个192.168.0.5这台主机上建立我们的子域
先安装bind软件包
vi /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 “tech.magedu.com” IN {
type master;
file “tech.magedu.com.zone”;
};
cd /var/named
vi named.ca 内容和前面的一样
vi localhost.zone
vi named.local
vi tech.magedu.com.zone 正向解析的区域文件
$TTL 600
$ORIGIN tech.magedu.com.
@ IN SOA ns admin (
2012030801
20M
5M
7D
1D
)
IN NS ns
IN MX 10 mail
mail IN A 192.168.0.5
ns IN A 192.168.0.5
www IN A 192.168.0.5
chmod :named /var/named/* /etc/named.conf
service named start 启动服务
好了,我们的子域也建立起来了。
这样我们的父域就能解析到子域了,但是,子域解析不到父域。要想使子域也能解析到父域则定义一个转发器即可。
八,view的构建
DNS的切割机制,就是通过view来实现的。通过view机制我们可以实现:
我们国家的两大巨头,电信和网通,他们的网络大多数是没有交集的,故他们之间互访的话是非常慢的。而我们用户有联通的也有电信的,因此,对大型的服务网站来说,通常他们有两类服务器,一类提供电信用户的连接请求,一类提供网通用户的连接请求,这样就不会跨网,加快了传输的速度。而这就需要DNS要有一种机制,能识别请求者是电信还是网通的ip,从而返回给他们相应的服务器ip,这就是DNS的智能解析。这个机制可以通过view来实现:
例如:我们的电信用户是192.168.0.0这个网段的ip,其他网段的ip是网通用户的。我们要实现把电信用户的请求发给192.168.0.100这个主机,把网通的的请求发给1.1.1.1这台主机,这就要配置DNS使返回给不同用户的解析是不同的。
安装bind软件包,然后我们还是以192.168.0.100为例构建:
vi /etc/named.conf
acl OURCLIENT {
192.168.0.0/24;
127.0.0.1;
};
options {
directory "/var/named";
};
view internal {
match-clients { OURCLIENT; };
recursion yes;
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 "magedu.com" IN {
type master;
file "magedu.com.internal";
allow-transfer { none; };
allow-update { none; };
};
zone "168.192.in-addr.arpa" IN {
type master;
file "168.192.internal";
allow-transfer { none; };
allow-update { none; };
};
};
view external {
match-clients { any; };
recursion no;
zone "magedu.com" IN {
type master;
file "magedu.com.external";
allow-transfer { none; };
allow-update { none; };
};
zone "1.1.in-addr.arpa" IN {
type master;
file "1.1.external";
allow-transfer { none; };
allow-update { none; };
};
};
cd /var/named
vi named.ca 内容和前面的一样
vi localhost.zone 内容和前面的一样
vi named.local 内容和前面的一样
vi magedu.com.internal 定义内网正向解析的区域文件
$TTL 600
$ORIGIN magedu.com.
@ IN SOA ns admin (
2012030803
20M
5M
7D
1D
)
IN NS ns
IN NS ns2
IN MX 10 mail
mail IN A 192.168.0.200
ns IN A 192.168.0.100
ns2 IN A 192.168.0.200
www IN A 192.168.0.100
vi magedu.com.external 定义外网正向解析的区域文件
$TTL 600
$ORIGIN magedu.com.
@ IN SOA ns1 admin (
2012030803
20M
5M
7D
1D
)
IN NS ns1
IN NS ns2
IN MX 10 mail
mail IN A 1.1.1.1
ns1 IN A 1.1.1.1
ns2 IN A 1.1.1.2
www IN A 1.1.1.3
vi 168.192.internal 定义内网反向解析的区域文件
$TTL 600
@ IN SOA ns.magedu.com. admin.magedu.com. (
2012030801
20M
5M
7D
1D
)
IN NS ns.magedu.com.
IN NS ns2.magedu.com.
200.0 IN PTR mail.magedu.com.
100.0 IN PTR ns.magedu.com.
200.0 IN PTR ns2.magedu.com.
100.0 IN PTR www.magedu.com.
vi 1.1.external 定义外网反向解析的区域文件
$TTL 600
@ IN SOA ns1.magedu.com. admin.magedu.com. (
2012030801
20M
5M
7D
1D
)
IN NS ns1.magedu.com.
IN NS ns2.magedu.com.
1.1 IN PTR mail.magedu.com.
1.1 IN PTR ns1.magedu.com.
2.1 IN PTR ns2.magedu.com.
3.1 IN PTR www.magedu.com.
Service named start
我们的智能DNS就建好了