一、DNS配置

1、配置DNS服务

1)我们现在尝试着添加一个解析数据。

还记得刚才在配置文件的末尾有一个文件,用来存放区域信息

wKiom1nhyh_hL36sAAAyEWC6W9o100.png

我们就来编辑/etc/named.rfc1912.zones这个文件   

wKioL1nhx2mTr2ehAAEAThurTSU530.png

添加3行关于magedu.com的信息

接下来我们要建立那个magedu.com.zone文件了,由于里面的内容较为复杂,我们可以复制模板然后修改一下。wKiom1nhyh_wSk_DAAB-uYSsa2k433.png

我们将localhost文件当做模板复制一份起名就叫magedu.com.zone

但是我们发现这个权限太小了,named用户无法读wKiom1nhyh_jMAXvAADvudfUvMg687.png

因此我们可以手动改一下权限,或者在刚才复制的时候加-p保留权限。wKioL1nhx2mizvgxAAAnlN2AQIo613.png

改好权限之后我们就可以编辑这个文件了,这里就要填写之前提到的各种资源记录了。

 

在填记录之前我们先在192.168.37.106上搭建一个web服务

wKiom1nhyoGwgHbqAABCRBP_kkQ777.png

内容为centos6

wKiom1nhyoGymTYjAAA5guoIXWs070.png

启动一下web服务wKioL1nhx8uxtW7jAACD3Tfc19c338.png

然后就可以编辑文件了,内容如下:

TTL可以在开头定义,全局继承。wKiom1nhyoHjysQxAACa4Hda1ko318.png


配好之后保存然后可以使用named-checkzone进行数据库检查

wKioL1nhx8vi8TDXAABuAu90f6g454.png

显示OK,然后我们重新加载一下服务。可以使用rndc reload,这个命令是专门管理DNS服务的,直接重新加载数据库。

wKiom1nhytrTc2TiAAApHkFCO6k310.png

那么现在,客户端就可以通过这个DNS服务器访问websrv1.magedu.com网址了。

我们去客户端ping一下:wKioL1nhyCSD2JuvAADQiTk-sAI842.png

果然解析出地址为192.168.37.106.

我们可以使用links尝试打开网页:

wKiom1nhytqxfsoPAAAjxDozrlc506.png

wKioL1nhyCSTvlFHAACIzdDc_zA919.png

打开成功!


2)别名

wKiom1nhytrgnlxoAABIo2BDHNc949.png

我们再添一条www别名。然后rndc reload重新加载一下。

然后用客户端测试一下:

wKioL1nhyIyihb3ZAAH6eR1YEZE870.png

设置成功。

于是我们现在可以使用links 打开www.magedu.com

wKioL1nhyIzR6YheAAAadqLWMnc048.png

wKiom1nhy0LzAoXXAABdKUMcMRc240.png

别名设置成功!

 

3)设置两个服务器

为了避免一个服务器负载过大,我们可以使用以下方式,设两个服务器

wKioL1nhyIzgAQ55AABY4b-cBMs308.png

我们把106107上都放一样的东西,这样用户访问www.magedu.com的时候,会随机分配,有一部分人访问106上的内容,一部分人访问107上的内容,效率就更高一些了。


4)模糊访问——泛域名解析

·有的时候用户本来想访问www.magedu.com的网站,但是他不小心输错了输成wwww.magedu.com或其他乱七八糟的字母,但我们仍然希望只要是后面是magedu.com的就跳到我们www.magedu.com页面去。

wKiom1nhy0LA82ONAAA5bU9P9u0464.png

于是我们使用通配符*,代表任意字符。这样无论用户输入什么.magedu.com都会跳到我们正确的界面了。

 

·有的时候我们连www都不想打,想直接输入magedu.com访问,于是我们就加一条:

magedu.com. A 192.168.37.106

或者

@ A 192.168.37.106

或者

  A192.168.37.106

都可以实现。

 

2、反向地址解析

跟正向地址解析差不多,只是将IP地址解析成名字,一般用于邮件。

wKiom1nhy9uCwjv5AAAh2Re91Ts940.png

还是编辑这个文件,添加如下4行内容

wKioL1nhySWQoscjAACmKSF66Hk867.png

然后再去/var/named/下创建192.168.37.zone文件wKiom1nhy9vDUISkAACQKSvCfm0513.png

同样,用named.loopback做模板,复制一份文件出来,然后修改此文件

wKioL1nhySWAr4a0AAC7xSBjAMc219.png

一定记得要写.表示结束

wKiom1nhy9yQHm8WAABEIV1ffOc323.png

我们来测试一下100:wKioL1nhySaSlB42AAGjE9lmAUU098.png

果然补充了后缀,所以一定要写点!wKiom1nhy9zQ83KnAAF1zDBuc9Q171.png

106就没有问题。

 

3、主从DNS服务器

1从的数据库不需要自己创建,会自动同步主DNS的数据。wKioL1nhySax08g1AAFf_CuMuks409.png

从服务器的数据存放在slaves文件夹内。

 

下面我们来配置一下magedu.com的从服务器:

首先还是要先改named.conf文件wKiom1nhy93Sqq6dAADVpw_GbuI687.png

将这两行注释。

然后再修改 /etc/named.rfc1912.zones文件

wKiom1nhy92RD8EqAABtxuJev5g561.png

然后保存之后,可以先查看一下slaves文件夹下还没有备份

wKiom1nhzO2Sml9aAAB7O76htII269.png

当我们重新加载一下之后再看,就已经做好备份了。从数据库的内容就和主数据库一样。

wKioL1nhyjfQAZT8AABQBra-E2s672.png

注意,有几个服务器,就应该有几条NS服务。

一个主可以有多个从,从也可以再有一个从。

 

2)安全隐患

但是这种主从机制有一些安全隐患,任何人使用dig-t axfr magedu.com @192.168.37.107命令,就能从192.168.37.107服务器上把magedu.com这个域的所有数据抓下来。为了防止这种数据泄露,我们在主配置文件加上一句allow-transfer,后面跟上从的地址。wKiom1nhzO2iRnuxAAELY7Ni174152.png

这样就只允许从服务器能从主上面传输数据。

但是这样也有安全问题,我虽然不能从主DNS上传输数据,我仍然可以从从DNS上传输数据。因此,我们也应该在葱的配置文件中加上这句allow-transfer,并且不允许任何人传输。wKiom1nhzO2iFK3GAADqqRx7Tvk391.png

这样,就解决了安全问题。

 

4、子域

比如我们开始的网址是www.magedu.com,但是我们现在做大了,magedu下面新增加了子域,比如开在河南的分公司叫www.henan.magedu.com。这样magedu就有新的子域叫henan,那么这个子域放在哪里呢?有两种方式。

1当访问量不大时,就可以与magedu放在一个服务器上。

wKioL1nhyjezk1CVAACrwuoET-I165.png

2当访问量大的时候,可以单独拿出来作为一个独立域,但是仍然放在同一个服务器上。

       先在named.rfc1912.zones中增加以下内容:

wKiom1nhzXyDXO53AAA-y3LDiOk226.png

然后仍然是复制一份模板改一改:wKioL1nhysbRvD-TAAAx2wSXwBk582.png

虽然是子域,但是还是放在同一个机器上,但是从实现上是通过独立域实现的。wKiom1nhzX3wrmXbAAB9mvBfWJc819.png

  修改成功

wKioL1nhyseAvqVTAAH1259Xs_M523.png

3不放在同一个服务器上(这个过程叫委派)

我们之前讲过,上级服务器知道下级子域的地址的,因此我们先在上级域中添加子域信息wKiom1nhzX3Cy9D1AACtAauvaBM366.png

然后再按照之前的方法,在106上把henan.magedu.com域建起来即可。    

添加配置文件内容:

wKioL1nhy2agWDZyAAA87Tz10ts403.png

建立henan.magedu.com.zone文件:wKioL1nhy2bgeH7FAACxwqqkKdQ995.png

这样就委派成功了。wKioL1nhy2aj5xxrAAG6NGXmeAA521.png

glue record:粘合记录,父域授权子域的记录

 

5bind-chroot软件搬家

bind-chroot:/var/named/chroot/ DNS很多相关文件迁移到一个比较深的文件夹,这样可以使******时无法找到DNS文件,更加安全。

 

首先安装包:

wKiom1nhzh3wvIHmAAAZVVpTTeI117.png

装好之后,它有一个服务需要启动

wKioL1nhy2fy4VvhAAC8ck8AMm4829.png

启动服务:

wKiom1nhzsTxpt8MAAAr_14A2SM871.png

搬家成功:wKioL1nhzA7i2nENAAGWh8Vj-7g324.png

wKiom1nhzsXzE96UAAH-tH6tkNM042.png

可以看到,原来的文件也在,并且两个文件一模一样

wKioL1nhzA-zn3qDAACvpQUCPGg980.png

inode号相同但是硬连接数还是1,说明它既不是硬链接也不是软连接

wKiom1nhzsXTO43vAADKg6xwSi8446.png

它是通过mount挂载实现的。目录挂目录。


二、允许动态更新

我们可以允许动态更新,通过命令,可以坐在别的机器上将这台机器的数据库的内容进行动态更新,而不是去本机的数据库里直接改。

 

1)首先得在本机上允许动态更新(就是将这个功能先开启)

修改named.rfc1912.zones文件:

指定的zone语句块中:添加Allow-update {any;};

wKioL1nhzTjgY5O5AABN18ROGpg550.png

这样允许任何人动态更新。

使用rndc reload重新加载一下。

 

2)然后需要给named目录添加写权限,让named用户可以去里面修改henan.magedu.com.zone文件wKioL1nhzTiiVxOpAAISN9YVYRM469.png

(或者使用chmod 770 /var/named更改权限)

PS:如果selinux策略启用的话,记得把策略开关打开:setsebool -P named_write_master_zones on。如果selinux策略本身是关掉的就不用管它了。

 

3)最后就可以在另一台机器上开始改了,使用nsupdate命令,交互式修改,每次改完一句记得输入send发送,这样那边才会被修改。wKiom1nhz-7g_6uBAAE1Ax8tQ50535.png

要注意,它并不会马上修改原来的文件,而是新生成了一个.jnl文件。等过一段时间才会把.jnl里的内容写进源文件。wKioL1nhzTjRVonKAAF5kCk8Fz4761.png

这个文件是一个二进制文件。wKiom1nhz--w8TRpAACogHTFEXk258.png

但只要生成了.jnl文件,就已经添加成功且生效了。

 

4)那我们可以来测试一下

wKiom1nh0ISj4jEWAAGJtlENGaw996.png

果然添加成功wKiom1nh0ISxQ_38AADz4ZvkdII222.png

可以查看一下,源文件当前确实是没有被改变的。

 

5)可以添加当然也可以删除,使用相同的方式,命令如下:

wKioL1nhzc7w6ZuqAAAnbC1_bm4539.png

这样就删掉了websrv那条记录wKiom1nh0IWh1gMfAAHzL_au57o218.png

果然没有6.6.6.6了。

 

6)这种方式允许任何人修改数据库,很不安全,因此我们在.zones文件中不要设成any,你允许哪个机器改,就把后面写上机器地址即可。

wKioL1nhzc-i-JAtAABN-IimSCg550.png

wKiom1nh0QfAVQRxAABPXkIrcq4119.png


三、转发服务器

1、概念

wKioL1nhzlGRbZOsAACX0LrVclc031.png

正常情况下每个地方都有自己的服务器,现在先只看这三个,三个现在在三个地方都有自己的服务器,加入beijing有人想访问www.magedu.com但是它本机上没有,它就要跑到根上去问一圈然后返回结果,shanghai那边也有人想访问这个网址,它也要去根上跑一圈问,zhenghzou那边还有人想访问这个网址,它也要去根上跑一圈问,这样就很麻烦效率很低。

于是我们就设定,shanghaizhengzhou如果本机没有时先不去根上问,而是先去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当做zhengzhou106当成beijing

有两种状态:

only】:用户在107上访问网址,107如果有直接返回结果,107如果没有就去106上问,106如果也没有就返回失败结果

first】:用户在107上访问网址,107如果有直接返回结果,107如果没有就去106上问,106如果也没有就107自己跑去根上问,然后成功返回结果

 

2现在开始在106上建立域:

wKiom1nh0QfyKLD9AAA7sCLAp8k777.png

wKiom1nh0QehqzsJAADT2MuGkNY939.png

将来如果访问www.qq.comIP就是6.6.6.6

记得service named reload重新加载一下。

 

3现在在107上设置转发:

设置转发也有两种效果。

一种是全局转发:无论问什么域我都转发给106

还有一种是特定区域转发:只问特定的域(比如这里的www.qq.com)我才转发给106,其他的还是自己去问根。

 

方法1)我们先设置简单的,全局转发,无论查谁,都转到106

修改/etc/named.conf(注意这就也分两种情况,我们之前提到过的onlyfirst

先设置[only]吧:

wKioL1nhzlGxFXkfAAFXWy_An8Y509.png

记得rndc reload重新加载一下服务

然后测试一下

wKiom1nh0cvxQ4eMAAG4z5khDIw252.png

成功。wKioL1nhzxeCtxbrAAQcp6RXo48916.png

可以看一下106上的日志,发现确实是107在问她。

 

如果访问的不是www.qq.com的网址,而是106上没有的网址,就会查询失败了。因为我们设置的是only。如果106上没有结果就返回查询失败的。(注意做这个实验时记得关掉106上的桥接模式,断网,不然106会去根上查询一圈找到结果的。)wKiom1nh0c2zk6DbAAGscOcpEU8050.png

可以看到查询失败。

 

刚才设置的是only,现在我们改成first试一下。

wKioL1nhzxfCK9HWAAByDWJZgrM708.png

rndc flush清一下缓存,rndc reload重新加载。

查询qq没问题wKiom1nh0c7QeOS0AAGLsrRkJZ0962.png

查询一下其他的网:

比如京东

wKioL1nhz4vw-rb3AAIniWnNJv8734.png

也成功。这个就是107自己去根上查到的了。

查看日志,106上说107来它这里查但是没有结果wKiom1nh0kHwIlh_AAFiAiFLgMI091.png

说明确实是107自己查到的。

如果把107也断网的话,然后清空缓存,那么就无论如何也查不到了。wKiom1nh0kGwATtGAAGQla6ysnU720.png

这也确实说明刚才是107自己查到的。

 

方法2)刚才实现的是全局转发,现在我们来实现一下特定区域转发。

修改/etc/named.rfc1912.zones文件

wKioL1nhz4uQW-DlAABQa49AyUs761.png

改完记得rndc reload加载一下。

 

查询sohu,失败。wKiom1nh0kLD0EwuAAGQn6KROBA671.png

查询qq,本来应该成功的,但是还是失败

wKiom1nh0rHg7ahEAAGPnC05AVc708.png

因为我们还需要修改一个设置:

修改named.conf文件

wKioL1nhz_vgHibrAADOBVmrq9s778.png

有两个设置DNS安全的开关,把yes改为no

wKiom1nh0rHi_S1IAAAfKE3nqzs947.png

改完后保存然后rndc reload重新加载

再试一次:wKioL1nhz_yiC_BJAAIf8j4bCBw251.png

特定域转发成功。