假如我们希望我们的网站,比如www.lee.com被别人通过域名访问到,那么我们需要向代理商注册---国内有万网,新网,国外有狗爹等,代理商会帮助你向根域注册,如果你的网站访问量很小,代理商会从他们自己公司的服务器里挑一台通过虚拟主机帮你解析(赚你的钱)。如果你希望通过自己公司里的DNS服务器去解析,那么需要在代理商提供给我们的主机页面后台修改DNS指向到我们自己的DNS服务器,就是NS记录和A记录指向自己的服务器。根域告知我们.com的位置(根域服务器通过子域授权认证了.com服务器),我们需要让.com的服务器通过子域授权到代理商的DNS服务器

linux上DNS的实现是依靠bind这个软件,但是这个软件的进程名叫named

wKioL1X5EGvRczkLAAF1Amlpz5E895.jpg

我们需要的包是bind,bindutils和bind-libs(提供各种库)

wKiom1X5DjXiV9uqAAIb1XYNrhI459.jpg

bind-utils为我们提供了一些测试工具,比如dig,nslookup,host命令

wKioL1X5EGvxnTskAACDtc5vd2U858.jpg

bind还提供了安全包,bind-chroot,安装了bind-chroot的话bind会把dns服务圈禁在/var/named/chroot目录下,即使***攻破了dns,也不会影响到真正的系统,因为dns的根目录被从我们系统的根目录上剥离开来了

wKiom1X5DtOwuSF9AAFVsTCQS7s407.jpg

安装bind后生成的配置文件:

wKiom1X5D5Xg4Y2XAACkL2Tly1o693.jpg

服务脚本:/etc/rc.d/init.d/named

主配置文件:/etc/named.conf,/etc/named.rfc1912.zones,/etc/rndc.key

rndc:默认与bind安装在同一主机,且只能通过127.0.0.1来连接named进程,提供辅助性管理功能,使用tcp953号端口,rndc.key提供了进程间通信的共享密钥

解析库文件:/var/named/目录下的.zone文件(通常命名方式),保存本地的区域文件----一台dns服务器能为多个区域解析,所以zone文件会有多个,这个目录下应该有根区域文件,也就是上图中的named.ca了,本地的正反解文件就是named.localhost和named.loopback




接下来我们配置主从DNS服务器,从服务器会向主服务器请求同步数据,达到了分摊负载功能

前提:

主从复制:
    1、应该为一台独立的名称服务器;
    2、主服务器的区域解析库文件中必须有一条NS记录是指向从服务器实现主服务器可以通知从服务器来请求数据;
    3、从服务器只需要定义区域,而无须提供解析库文件;解析库文件应该放置于/var/named/slaves/目录中;
    4、主服务器得允许从服务器作区域传送;
    5、主从服务器时间应该同步,可通过ntp进行;
    6、bind程序的版本应该保持一致;否则,应该从高,主低;

wKiom1X5E8DCB55sAABaoPjtOsw747.jpg


192.168.3.132-----主DNS服务器的named.conf文件配置

说明:

(1).使用//注释:

(2).花括号的两边必须有空格

option下:

listen-on指定了监听在哪个地址的哪个端口上

directory指定了dns服务器工作目录,也就是zone文件放置的位置

allow-query指定那些网段的主机可以通过本DNS服务器查询解析

recursion指定是否允许客户端主机到本dns服务器查询时是否为他们递归到根节点查询

logging下:

指定日志文件存放位置

severity指定安全日志级别

zone下:

type指定dns服务器类型,这里是主dns服务器

file:指定zone文件存放位置

allow-transfer:指定主从同步时传送zone文件给那些主机(在主dns服务器上配置此条)

masters:指定主从复制时主dns服务器在哪(在从dns服务器上配置此条)

wKiom1X5HK7DnQpZAAFNJ__VTRk265.jpg

正解zone文件:/var/named/magedu/magedu.zone

wKiom1X5HV-T8EHPAACPeoBGpDs580.jpg

如果使用泛域名解析:(泛域名解析等理论部分请查看上一篇博客)---简单说就是用户输入错误域名我们帮助用户重定向到某一网页,主机

wKiom1X5QKSCDmORAAAdaQ-zPzE900.jpg

上面的zone文件没有添加从DNS的NS记录,和A记录,所以当主dns重启时,默认不会通知从DNS来更新自己的数据,所以合规的做法是:

wKioL1X5Q16TQaheAACy6JyPSEI638.jpg

反解zone文件:/var/named/magedu/100.16.172.arpa

wKioL1X5R6DgDfa3AACG1cay7a4777.jpg

192.168.3.132----从DNS服务器named.conf配置

wKioL1X5HuXAOAm5AAEt6g9_Iqc757.jpg

重启后查看53号端口被DNS监听了:

wKiom1X5HK-ywqROAACh2HH6l4E171.jpg

查看从DNS服务器/var/named/slaves目录下发现同步成功:

wKioL1X5IPXz8by6AAA1zru7YEc704.jpg

查看日志发现提示了主从复制成功:

wKiom1X5Hr-DwPScAAFkiLko_EA322.jpg

当修改了区域解析数据库后需要手动将序列号加1来触发增量通知(IXFR)

我们来测试一下:

正解:dig -t指定正解时资源记录类型,@后面指定用哪个dns服务器解析。dig不会查询hosts文件,直接查询dns服务器

flags段中:aa表示权威答案

wKioL1X5JQqB6wQTAAF-D8K0_9U451.jpg

反解:用-x选项

wKiom1X5ItTjcMcXAAG3w2LyemM790.jpg

查询选项:
    +[no]trace:跟踪解析过程
    +[no]recurse:进行递归解析

dig命令其他用法请看man手册,这里举一个例子:+trace跟踪路由

wKiom1X5JouSC1UZAAFScRRn0Uw199.jpg

模拟区域全量传送:正向:

wKiom1X5OoOjOStKAAGyxAleYOY103.jpg

反向:

wKioL1X5PLmy9euPAAGZh88ziRo315.jpg

使用host命令查询

wKiom1X5MiGRospqAAB_zwPq8fc696.jpg

反解示例:host -t PTR 172.16.100.11 172.16.100.11

使用nslookup查询:

wKioL1X5NMWRdM9MAACedRHgG3A126.jpg

有两个命令可以用来检查name.conf文件和zone文件的语法有没有错误

wKioL1X5JQuyxmQ8AAAgUdw4Kks222.jpg

使用rndc命令可以查看dns服务器状态信息:使用rndc reload可以实现不重启named服务读取配置文件,修改了zone文件后可以使用这个命令生效,不用重启。

    reload: 重载主配置文件和区域解析库文件
    reload zone: 重载区域解析库文件
    retransfer zone: 手动启动区域传送过程,而不管序列号是否增加;
    notify zone: 重新对区域传送发通知;
    reconfig: 重载主配置文件
    querylog: 开启或关闭查询日志;
    trace: 开启并且递增debug级别;
    trace LEVEL: 指定使用的级别;指定(数字)级别

wKiom1X5I43hFtI1AACjM487P5Y628.jpg

注意:/var/named目录权限为640,下面的文件为了安全也应该把权限改为640,自己创建的zone文件默认属主是root,应该把属主和属组拥有者改成named用户,放置named服务因为没权限无法读取zone文件。

提醒:主从服务器时间应该同步,并且bind版本最好保持一致!