1、配置DNS服务
(1)我们现在尝试着添加一个解析数据。
还记得刚才在配置文件的末尾有一个文件,用来存放区域信息
我们就来编辑/etc/named.rfc1912.zones这个文件
添加3行关于magedu.com的信息
接下来我们要建立那个magedu.com.zone文件了,由于里面的内容较为复杂,我们可以复制模板然后修改一下。
我们将localhost文件当做模板复制一份起名就叫magedu.com.zone
因此我们可以手动改一下权限,或者在刚才复制的时候加-p保留权限。
改好权限之后我们就可以编辑这个文件了,这里就要填写之前提到的各种资源记录了。
在填记录之前我们先在192.168.37.106上搭建一个web服务
内容为centos6
然后就可以编辑文件了,内容如下:
配好之后保存然后可以使用named-checkzone进行数据库检查
显示OK,然后我们重新加载一下服务。可以使用rndc reload,这个命令是专门管理DNS服务的,直接重新加载数据库。
那么现在,客户端就可以通过这个DNS服务器访问websrv1.magedu.com网址了。
果然解析出地址为192.168.37.106.
我们可以使用links尝试打开网页:
打开成功!
(2)别名
我们再添一条www别名。然后rndc reload重新加载一下。
然后用客户端测试一下:
设置成功。
于是我们现在可以使用links 打开www.magedu.com了
别名设置成功!
(3)设置两个服务器
为了避免一个服务器负载过大,我们可以使用以下方式,设两个服务器
我们把106和107上都放一样的东西,这样用户访问www.magedu.com的时候,会随机分配,有一部分人访问106上的内容,一部分人访问107上的内容,效率就更高一些了。
(4)模糊访问——泛域名解析
·有的时候用户本来想访问www.magedu.com的网站,但是他不小心输错了输成wwww.magedu.com或其他乱七八糟的字母,但我们仍然希望只要是后面是magedu.com的就跳到我们www.magedu.com页面去。
于是我们使用通配符*,代表任意字符。这样无论用户输入什么.magedu.com都会跳到我们正确的界面了。
·有的时候我们连www都不想打,想直接输入magedu.com访问,于是我们就加一条:
magedu.com. A 192.168.37.106
或者
@ A 192.168.37.106
或者
A192.168.37.106
都可以实现。
2、反向地址解析
跟正向地址解析差不多,只是将IP地址解析成名字,一般用于邮件。
还是编辑这个文件,添加如下4行内容
然后再去/var/named/下创建192.168.37.zone文件
同样,用named.loopback做模板,复制一份文件出来,然后修改此文件
一定记得要写.表示结束
看106就没有问题。
3、主从DNS服务器
从服务器的数据存放在slaves文件夹内。
下面我们来配置一下magedu.com的从服务器:
将这两行注释。
然后再修改 /etc/named.rfc1912.zones文件
然后保存之后,可以先查看一下slaves文件夹下还没有备份
当我们重新加载一下之后再看,就已经做好备份了。从数据库的内容就和主数据库一样。
注意,有几个服务器,就应该有几条NS服务。
一个主可以有多个从,从也可以再有一个从。
(2)安全隐患
但是这种主从机制有一些安全隐患,任何人使用dig-t axfr magedu.com @192.168.37.107命令,就能从192.168.37.107服务器上把magedu.com这个域的所有数据抓下来。为了防止这种数据泄露,我们在主配置文件加上一句allow-transfer,后面跟上从的地址。
这样就只允许从服务器能从主上面传输数据。
但是这样也有安全问题,我虽然不能从主DNS上传输数据,我仍然可以从从DNS上传输数据。因此,我们也应该在葱的配置文件中加上这句allow-transfer,并且不允许任何人传输。
这样,就解决了安全问题。
4、子域
比如我们开始的网址是www.magedu.com,但是我们现在做大了,magedu下面新增加了子域,比如开在河南的分公司叫www.henan.magedu.com。这样magedu就有新的子域叫henan,那么这个子域放在哪里呢?有两种方式。
(1)当访问量不大时,就可以与magedu放在一个服务器上。
(2)当访问量大的时候,可以单独拿出来作为一个独立域,但是仍然放在同一个服务器上。
先在named.rfc1912.zones中增加以下内容:
虽然是子域,但是还是放在同一个机器上,但是从实现上是通过独立域实现的。
修改成功
(3)不放在同一个服务器上(这个过程叫委派)
我们之前讲过,上级服务器知道下级子域的地址的,因此我们先在上级域中添加子域信息
然后再按照之前的方法,在106上把henan.magedu.com域建起来即可。
添加配置文件内容:
glue record:粘合记录,父域授权子域的记录
5、bind-chroot软件搬家
bind-chroot:/var/named/chroot/ 把DNS很多相关文件迁移到一个比较深的文件夹,这样可以使黑客攻击时无法找到DNS文件,更加安全。
首先安装包:
装好之后,它有一个服务需要启动
启动服务:
可以看到,原来的文件也在,并且两个文件一模一样
inode号相同但是硬连接数还是1,说明它既不是硬链接也不是软连接
它是通过mount挂载实现的。目录挂目录。
二、允许动态更新
我们可以允许动态更新,通过命令,可以坐在别的机器上将这台机器的数据库的内容进行动态更新,而不是去本机的数据库里直接改。
1)首先得在本机上允许动态更新(就是将这个功能先开启)
修改named.rfc1912.zones文件:
指定的zone语句块中:添加Allow-update {any;};
这样允许任何人动态更新。
使用rndc reload重新加载一下。
2)然后需要给named目录添加写权限,让named用户可以去里面修改henan.magedu.com.zone文件
(或者使用chmod 770 /var/named更改权限)
PS:如果selinux策略启用的话,记得把策略开关打开:setsebool -P named_write_master_zones on。如果selinux策略本身是关掉的就不用管它了。
3)最后就可以在另一台机器上开始改了,使用nsupdate命令,交互式修改,每次改完一句记得输入send发送,这样那边才会被修改。
要注意,它并不会马上修改原来的文件,而是新生成了一个.jnl文件。等过一段时间才会把.jnl里的内容写进源文件。
但只要生成了.jnl文件,就已经添加成功且生效了。
4)那我们可以来测试一下
可以查看一下,源文件当前确实是没有被改变的。
5)可以添加当然也可以删除,使用相同的方式,命令如下:
果然没有6.6.6.6了。
6)这种方式允许任何人修改数据库,很不安全,因此我们在.zones文件中不要设成any,你允许哪个机器改,就把后面写上机器地址即可。
三、转发服务器
1、概念
正常情况下每个地方都有自己的服务器,现在先只看这三个,三个现在在三个地方都有自己的服务器,加入beijing有人想访问www.magedu.com但是它本机上没有,它就要跑到根上去问一圈然后返回结果,shanghai那边也有人想访问这个网址,它也要去根上跑一圈问,zhenghzou那边还有人想访问这个网址,它也要去根上跑一圈问,这样就很麻烦效率很低。
于是我们就设定,shanghai和zhengzhou如果本机没有时先不去根上问,而是先去beijing上去问,如果beijing没有再去根上问,如果beijing上有就可以直接拿到结果了。这种方式就叫服务器转发。
2、代码
被转发的服务器需要能够为请求者做递归,否则转发请求不予进行
(1) 全局转发: 对非本机所负责解析区域的请求,全转发给指定的服务器
Options {
forward first|only;
forwarders { ip;};
};
(2) 特定区域转发:仅转发对特定的区域的请求,比全局转发优先级高
zone"ZONE_NAME" IN {
type forward;
forward first|only;
forwarders { ip;};
};
注意:关闭dnssec功能:
dnssec-enableno;
dnssec-validationno;
3、实验
(1)我们现在来尝试一下转发。我们把107当做zhengzhou,106当成beijing。
有两种状态:
【only】:用户在107上访问网址,107如果有直接返回结果,107如果没有就去106上问,106如果也没有就返回失败结果。
【first】:用户在107上访问网址,107如果有直接返回结果,107如果没有就去106上问,106如果也没有就107自己跑去根上问,然后成功返回结果。
(2)现在开始在106上建立域:
将来如果访问www.qq.com的IP就是6.6.6.6。
记得service named reload重新加载一下。
(3)现在在107上设置转发:
设置转发也有两种效果。
一种是全局转发:无论问什么域我都转发给106;
还有一种是特定区域转发:只问特定的域(比如这里的www.qq.com)我才转发给106,其他的还是自己去问根。
方法1)我们先设置简单的,全局转发,无论查谁,都转到106:
修改/etc/named.conf(注意这就也分两种情况,我们之前提到过的only和first)
先设置[only]吧:
记得rndc reload重新加载一下服务
然后测试一下
可以看一下106上的日志,发现确实是107在问她。
如果访问的不是www.qq.com的网址,而是106上没有的网址,就会查询失败了。因为我们设置的是only。如果106上没有结果就返回查询失败的。(注意做这个实验时记得关掉106上的桥接模式,断网,不然106会去根上查询一圈找到结果的。)
可以看到查询失败。
刚才设置的是only,现在我们改成first试一下。
rndc flush清一下缓存,rndc reload重新加载。
查询一下其他的网:
比如京东
也成功。这个就是107自己去根上查到的了。
说明确实是107自己查到的。
如果把107也断网的话,然后清空缓存,那么就无论如何也查不到了。
这也确实说明刚才是107自己查到的。
方法2)刚才实现的是全局转发,现在我们来实现一下特定区域转发。
修改/etc/named.rfc1912.zones文件
改完记得rndc reload加载一下。
查询qq,本来应该成功的,但是还是失败
因为我们还需要修改一个设置:
修改named.conf文件
有两个设置DNS安全的开关,把yes改为no
改完后保存然后rndc reload重新加载
特定域转发成功。