实验环境:RHEL5.8 32Bit

DNS子域授权

    假设今年我们公司的规模扩展了,现在有两个部门,它们都期望现在能够自我实现自己的DNS服务器的管理,比如说我们公司的域名叫做lkx.com.,而且之前我们公司内部所有的主机都位于www.lkx.com这个域名上面,但是后来公司的财务部和市场部都期望能够有自己的Web页面,于是就可已有如下的结构:

    www.lkx.com/fin表示财务部,www.lkx.com/market表示市场部

    但是一段时间之后,财务部和市场部希望能够完全的独立出去,它们都希望能够使用自己特有的名称被访问,即以www主机的形式被访问,即便它们都从属于lkx.com.这个域,但是它们都期望以自己的FQDN的形式被访问,即:

    www.fin.lkx.com.表示财务部,www.market.lkx.com.表示市场部,这样定义之后我们域内就有了三个组织,fin.lkx.com.、market.lkx.com以及lkx.com.三个可以实现自我管理的组织,而fin.lkx.com.和market.lkx.com.就叫做lkx.com.这个域的子域,而lkx.com.这个域就叫做这两个子域的父域,子域和父域都需要各自的DNS服务器进行管理,而对于父域来讲要不要划分子域以及划分几个子域都是由父域的DNS服务器来决定的,而且在划分完子域之后,父域还得指定子域是由哪个DNS服务器进行管理的,任何一个子域想要正常工作必须得得到自己的父域的授权,我们这里只讨论正向区域的子域授权,因为反向区域的子域授权非常麻烦。

·正向区域的子域授权

    在正向区域中,要想实现子域授权非常简单,只需要在父域服务器中的正向区域中定义子域的NS即可,定义格式如下:

    SUB_ZONE_NAME    IN    NS     SUB_NSSERVER_NAME

    子域的区域名称                子域的DNS服务器名称

    任何一条NS记录都得有一条A记录

    SUB_NSSERVERNAME    IN    NS    IP

    如上定义即可。

    假设我们现在是.com这个域的管理员,而有一个人注册了lkx.com.这个域,他期望使用lkx.com.这个域名,那么我们身为管理员应该如何给这个子域进行授权呢?

    在.com域的DNS服务器的正向区域中如下定义即可:

        lkx.com.    IN    NS    ns1.lkx.com.

        ns1.lkx.com.    IN    A    192.168.0.5

        如果我们只添加了如上两条记录,那么要是lkx.com.域中还有另外一台DNS服务器的话是不可以在互联网中提供DNS服务的,因此子域中有几台DNS服务器就得在父域中添加几条记录,比如我们的lkx.com.这个域有两台一主一从的DNS服务器,那么就可以如下定义:

        lkx.com.    IN    NS    ns1.lkx.com.

                    IN    NS    ns2.lkx.com.

        ns1.lkx.com.    IN    A    192.168.0.5

        ns2.lkx.com.    IN    A    192.168.0.15

    那么如果是我们自己在互联网上面注册了一个lkx.com.这样一个域名的话,我们期望能够使用两台DNS服务器的话该怎么办?我们在哪里注册的域名,它一定会给我们返回一个后台编辑页面,我们可以在这个编辑页面里面将NS记录指定的DNS服务器改为我们自己服务器的FQDN,两条NS记录分别指向我们的ns1和ns2,并且每一条NS记录都得有一条对应的A记录。

    假设现在lkx.com.这个域已经归我们自己管理了,我们对它有所有的操作权限,而且也建立好了一主一从的DNS服务器,现在我们期望能够在我们这个域内进行子域的授权,一个子域叫做fin.lkx.com.,另一个子域叫做market.lkx.com.,我们直接在lkx.com.这个域上对它们两个进行授权即可,即在父域的正向区域文件里面添加相对应的NS记录即可:

    DNS子域授权_第1张图片

    父域的正向区域只能授权子域的正向区域,反之亦然。

    DNS子域授权_第2张图片

    子域和父域不一定得在同一个网段内,每一个子域中也可以有从DNS服务器,所以说我们还可以在父域中授权从区域的子域,如上图所示,如果fin.lkx.com.这个子域中只有一台DNS服务器的话,那么我们给它授权了从区域的子域,这样是不行的,这样会使得DNS的整个工作逻辑出问题。

    接下来我们只演示如何创建fin.lkx.com.这个正向子域:

    1,在父域的正向区域中給子域进行授权

        wKiom1iBtznTuVSSAAANV7BUgL0382.png

        不要忘记序列号加一,否则我们父域上的从服务器无法得到数据同步

        wKiom1iBt4_Q8VvUAAANt_paYrE363.png

    2,检查配置文件错误和重启DNS服务

        DNS子域授权_第3张图片

    3,接着使用dig -t NS fin.lkx.com.命令进行检测,看是否可以检测到子域的存在

        wKiom1iBuHfhjrkfAAAHtQYxVvk246.png

        由上图可知,我们无法解析到子域的存在,这是因为子域的DNS服务器根本就不存在,所以父域服务器无法和子域服务器进行通信,父域服务器就无法解析到子域的域名,故我们得实际的配置一台子域的DNS服务器:

        1,首先将一台Linux主机的ip地址配置成192.168.0.8,接着在/etc/resolv.conf文件中将nameserver指向本机,search指向fin.lkx.com.:

            wKiom1iBvr_TM6YbAAAJft8NlHc801.png

        2,安装好DNS的客户端和服务端之后,修改DNS服务的主配置文件

            wKiom1iBwHKyTeVdAAAOfu5QUoU444.png

        3,修改子域的正向区域

            可以使用末行模式的命令将全局的lkx.com.修改为fin.lkx.com.:

            wKioL1iBwzGjxfqFAAAEvznmWhA020.png

            区域文件修改如下:

            DNS子域授权_第4张图片

        4,检查区域文件语法错误,并重启DNS服务,接着使用dig命令进行检测

            DNS子域授权_第5张图片

            成功!

    我们在使用dig命令的时候,如果通过子域的DNS服务器去解析子域的域名的时候,命令的结果会返回aa字符:

    DNS子域授权_第6张图片

    而如果是通过父域的DNS服务器去解析子域的域名的时候不会返回aa字符:

    DNS子域授权_第7张图片

    这是因为我们在解析子域的域名的时候,只有子域的DNS服务器返回的是权威答案,aa表示的就是权威答案。

    接下来使用nslookup命令在DOS环境下进行检测:

        DNS子域授权_第8张图片

    由上图知,我们我们通过父域服务器查到的是非权威应答。

        DNS子域授权_第9张图片

    而通过子域服务器本身查到的就是权威应答。

    但是我们在子域的服务器上面使用dig命令却无法解析父域的域名,这是因为子域无法直接解析父域,当我们使得子域的父域去解析父域的域名的时候,子域的DNS服务器首先会向根域服务器发起请求,接着再向.com.域的服务器发起查询请求,但是我们这个域没有在.com域上面注册,所以无法查询到,但是我们可以让它查询到,定义转发区域就可以做到这一点,转发区域可以使得子域将所有发向自己的查询请求转发给父域服务器去解析,但是父域服务器要允许子域服务器进行递归,这种转发机制叫做全局转发,在子域服务器的DNS的主配置文件中定义一个forward参数,该参数有两个值:

    1,only

        only参数表示本机无法解析的域名全部转发至forwarders,且仅转发给forwarders,如果forwarders无法帮助我们解析的话,就转而向根域服务器发起请求。

    2,first

    如下:

    DNS子域授权_第10张图片

    表示将所有发送给子域服务器的解析请求,全部转发给父域服务器进行解析。

    我们还可以定义局部转发,仅将解析父域的发往子域服务器的请求转发给父域进行解析,其余的请求还是由子域进行解析:

    DNS子域授权_第11张图片

    将全局选项中的forward和forwarders参数删掉,重新定义一个如上图所示的转发区域即可。