Linux从入门到精通——DNS的配置
1.DNS的基础
域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用TCP和UDP端口53[1]。
DNS系统中,常见的资源记录类型有:
-
主机记录(A记录):RFC 1035定义,A记录是用于名称解析的重要记录,它将特定的主机名映射到对应主机的IP地址上。
-
别名记录(CNAME记录): RFC 1035定义,CNAME记录用于将某个别名指向到某个A记录上,这样就不需要再为某个新名字另外创建一条新的A记录。
-
IPv6主机记录(AAAA记录): RFC 3596定义,与A记录对应,用于将特定的主机名映射到一个主机的IPv6地址。
-
服务位置记录(SRV记录): RFC 2782定义,用于定义提供特定服务的服务器的位置,如主机(hostname),端口(port number)等。
2.DNS的配置的环境
rhel7.3
关闭防火墙
准备一个可以上网的主机、至少一个虚拟机
3.虚拟机网络的配置
因为虚拟机是新搭建的,因此需要配置网络服务、yum仓库
(1)搭建网络
vim /etc/sysconfig/network-scripts/ifcfg-eth0
配置网络 IPADDR、NETMASK等信息
vim /etc/sysconfig/network
配置网关 GATEWAY=172.25.254.1 ##想要虚拟机上网的话,将网关设定为真机的ip,然后在真机上开通地址伪装功能(相当于变成了路由器),关闭防火墙,虚拟机ping 百度,可以ping通则虚拟机就可以上网了。
vim /etc/resolv.conf
配置DNS解析 nameserver 114.114.114.114
(2)配置yum源
vim /etc/yum.repos.d/rhel3.repo
[rhel7.3]
name=rhel7.3
baseurl=http://172.25.254.1/rhel7.3
gpgcheck=0
enable=1
yum clean all
yum repolist
测试:ping 172.25.254.1
4.虚拟机的DNS的设置
在刚开始的时候虚拟机如果ping 百度的ip的时候是可以ping通的;但是如果ping www.baidu.com 则会显示不知道,因此需要设置DNS
vim /etc/resolv.conf
nameserver 114.114.114.114 ##意思是,出现一个不知道的域名的时候,去询问 114.114.114.114
设定完DNS之后,再ping www.baidu.com的时候就可以ping通了。
5.DNS的高速缓存
什么是高速缓存?第一台主机通过自身设定的DNS访问一个未访问的网址的时候,当这个DNS主机也没有访问过的时候,就会通过DNS主机的配置的 /etc/resolv.conf 里面的配置的DNS出去访问,然后会将访问的信息缓存下来。接下来其他的主机(自身设定的DNS)接着访问这个网址时候,DNS主机就会从缓存里面读取,而不用接着出去找。这就节省了DNS在域名解析的过程中的时间
网络优化:把外部的DNS设置成内部的高速缓存,只有第一个人在访问第一个未知的网址的时候,速度会相对的比较慢。
假设:我的真机为DNS高速缓存,两个虚拟机设置DNS为真机的IP
在真机上:
yum install -y bind.x86_64 ##下载DNS
vim /etc/named.conf ##修改配置文件如下
systemctl restart named
systemctl stop firewalld.service
在虚拟机上:
vim /etc/resolv.conf
nameserver 172.25.254.1 ##将真机的IP设置为虚拟机的DNS
测试:
(1)现在真机上ping www.baidu.com
(2)然后在虚拟机上接着ping www.baidu.com ,时间就会很快,因为有缓存
(3)接着在虚拟机上ping www.163.com ,因为第一次访问所以相对会很慢。
6.高速缓存DNS的部署
yum install -y bind.x86_64 ##下载DNS
systemctl restart named
rpm -qc bind ##如果不知道一个服务的配置文件的话,可以用这个命令查看
剩下的内容和上面的5配置方法一样。
baidu.com 属于 .com域 ,而 .com域 属于 .域
为什么访问 .域的时候会那么慢,因为 .域的服务器在美国, .域的配置文件在 /var/named/named.ca
7.DNS的正向解析
在有DNS的真机上:
vim /etc/named.conf
include "/etc/named.rfc1912.zones"; ##类似的也是配置文件
include "/etc/named.root.key";
vim /etc/named.rfc1912.zones
##这个配置文件里面的东西,和主配置文件中的一样,保存的是维护的域名,写入这个文件,也表示写入named.conf文件中
19 zone "维护的域名(westos.com)" IN {
20 type master;
21 file "westos.com.zone";
##查询westos.com这个域名时,需要到file指定的文件中去查询
22 allow-update { none; };
23 };
##19~23行为使用模版,复制一份,在下面编辑。
cd /var/named/
cp -p named.localhost westos.com.zone ## -p 同步权限
vim westos.com.zone
==============================================================================================================
第一个@:表示上面的文件写的域名westos.com
后面的@:失效,dns.westos.com. 注意:这里的所有字符不以.结尾的都会自动的将前面的@的值补上去。 这里是客户主机能看到的信息
rname.invalid.:表示谁维护,这里可以写维护这个域的人的网址信息。
refresh:表示刷新的时间,1D表示一天
retry:
expire:这个文件过期的时间,1W表示一周
minimum:最短的保存时间
============================================================================
systemctl restart named
在虚拟机上:
vim /etc/resolv.conf
nameserver 172.25.254.1 ##将真机的IP设置为虚拟机的DNS
测试:dig www.westos.com ## 查询成功:NOERROR
===============================================================================
会出现的错误:
(1)可能会出现SERVFAIL:DNS服务器停机或响应失败
查看DNS主机端:named.conf文件中的端口是否开启、是否允许其他人查询,主机端的防火墙是否关闭
netstat -antlp | grep named ##查看named的端口情况
systemctl status firewalld.server ##关闭防火墙
firewall-cmd --list-all ##为什么要关闭防火墙,因为firewall里没有允许named服务,所以会被屏蔽掉
firewall-cmd --permanent --add-service=dns ##在火墙内允许DNS通过
(2)可能会出现REFUSED:DNS服务器拒绝回答
查看DNS主机端:named.conf文件中是否允许其他人查询(any为任何人都可以查询)
(3)可能会出现NXDOMAIN:DNS服器提示不存在这样的名称
当你访问如:hehe.com 时,服务器会去访问/etc/named.rfc1912.zones这个文件,如果该访问的域名,在文件中没有的时候,就会报这样的错
===============================================================================
8.DNS正向解析的简单的轮循
在DNS主机端:
cd /var/named/
vim westos.com ##文件修改如下
systemctl restart named
在客户端(测试端): ##会出现轮循的效果,记得将DNS设置为DNS主机IP
dig linux.westos.com
dig bbs.westos.com
CNAME:表示把一个规范的域名转换成一个内部的域名然后作解析。就相当于百度的域名都是 www.baidu.com ,但是百度里面会有不同的主机。
================================================================================
邮件用的协议是smtp(简单邮件传输协议):本机想将邮件发送给另外一台主机,本机的25端口,另一台主机用本机的25端口接收邮件,两个25端口的通信,就叫做smtp
两台主机的通信通过IP,然而发邮件是给了一个wf@westos.com这个地址的,发送邮件需要将邮件发送给一个IP,这个IP是什么IP?需要发邮件的主机,去询问自己的DNS,邮件内的域名里面,负责mail这个的主机是谁,DNS会给到一个IP,这个IP就是westos.com这个域名的mx记录(mx:邮件交换器)
mail root@westos.com ## “.”表示结束邮件的编辑,发送邮件
mailq ##表示邮件队列,不会有消息,因为没有设置mail
mail ##会看到一封退信,里面里面会有提示找不到mx
dig -t westos.com ##查看你找的域名里的邮局是谁
测试:首先清空邮箱 echo > /var/spool/mail/root
当在相应的配置文件中添加 MX记录后,重启服务
mail root@westos.com
mailq ##在邮件的队列里面就会有一个邮件,邮件发出去了,但是相应的IP的25端口没有开启。
================================================================================
9.DNS的反向解析
反向解析:dig 一个IP,会出来相应的想要访问的网页页面
也需要编辑 /etc/named.rfc1912.zones ,编辑内容如下。
vim /etc/named.rfc1912.zones
相应的行复制粘贴,注意IP要反着写,file处写的是westos.com.ptr(ptr记录:反向解析记录)
cd /var/named/
cp -p named.loopback westos.com.ptr
vim westos.com.ptr ##内容编辑如下
测试:dig -x 172.25.254.1/2
10.DNS的双向解析
双向解析:拿企业来举例,一个企业里面有内网和外部网络之分。内部进行解析地址的时候,肯定和对外开放的网络是不一样的。企业内部的员工,在解析一个地址的时候,需要的是内网的解析;一个客户端在解析一个地址的时候,需要外网的解析。看不同的/var/named/westos.com.zone文件,就可以看不同的文件,因此这个文件应该cp一份文件名为local的配置文件,然而是因为配置文件/etc/named.rfc1912.zones 里面指定的读取上面的文件,因此这个文件应该也cp一份文件名为localnet的,指向上面的localnet文件的rfc配置文件。最后在DNS的配置文件/etc/named.conf文件中修改相应的配置。
在有DNS的主机上:
11.辅助DNS(DNS的集群)
将配置文件的双向解析还原成原来的单向解析DNS
当同时有多个人来访问服务器的时候,服务器的压力可能会太大而顶不住,这时候就需要搭建DNS的集群
准备两个虚拟机,一个为DNS,另一个为辅助DNS。
在辅助的DNS服务器上:
yum install bind -y
vim /etc/named.conf ##和主DNS上的配置相同,如下图
vim /etc/named.rfc1912.zones ##和主DNS上的配置部分相同,配置如下
刚开始slaves下面是没有数据文件的,在重启服务就会自动的同步master上的文件
但是当主DNS上的配置文件修改之后,辅助DNS在没有设置的情况下,配置文件没有改变,可以手动将辅助DNS的westos.com.zone文件删除以后重启服务,但是这样太麻烦,所以现在需要的是,辅助的DNS可以自动的去同步主DNS的配置文件的信息。
在主DNS上:(主动告诉辅助DNS,文件发生更改)
vim /etc/named.conf ##主配置文件
在westos自己新加的域内,添加 also-notify { 172.25.254.20; };
vim /var/named/westos.com.zone
修改文件中的serial的值,这个前面的值就表示这个文件是否被更改,当两个文件的数值不相同的时候,辅助DNS就会认为配置文件已经被更改了,会自动的同步主DNS的文件
11.DNS的更新
在企业6之前,需要在配置文件中添加 allow-transfer { 172.25.254.20; }; 辅助的DNS才可以主动的去同步主DNS的信息。配置文件中的 allow-update 允许谁去更新
这个更新,不是在westos.com.zone这个文件中添加新的一行,而是在/var/named/ 这个路径下新上传一个westos.com.zone.jnl这样一个文件,当允许的用户去更新DNS的时候,是以named用户的身份去更新的,但是 ls -ld /var/named/ 这个文件对named这个用户不可写,因此需要修改权限 chmod 770 /var/named/ ,这样就可以了。当服务重启的时候,会将jnl文件里面的内容写入到westos.com.zone文件中去(服务重启之后文件会被改掉)。
在被允许的客户端上:
nsupdate
>server 172.25.254.10
>update add hello.westos.com 86400 A 172.25.254.33
>send
>update delete hello.westos.com
>send
12.DNS的KEY更新
DNS的更新有不足之处:允许IP为172.25.254.1的主机更新DNS,我可以将我的主机的IP也改成172.25.254.1,然后更改DNS的文件。因此加密的方式更加的安全
(1)恢复westos.com.zone的文件,如果做过 cp -p 备份的,将文件全部删除,然后将备份文件移动到原来的目录下,重启服务即可
(2)cat /etc/rndc.key ##查看加密方式
(3)dnssec-keygen -a HMAC-MD5 -b 128 -n HOST westos ##回车之后,在虚拟机上的shell里敲击键盘。
(4)cp -p /etc/rndc.key /etc/westos.key ##生成自己的key文件
(5)vim /etc/westos.key ##将上面生成的key修改成自己的key,key名称也要改
(6)vim /etc/named.conf ##让DNS识别这个加密的文件
在最后面添加 include "/etc/westos.key";
(7)vim /etc/named.rfc1912.zones ##修改可以更新文件的人
allow-update { key westos; };
(8)重启服务
(9)将key文件发送到想要允许的用户
测试:
nsupdate -k 发送的key
>server 172.25.254.10
>update add hello.westos.com 86400 A 172.25.254.33
>send
>update delete hello.westos.com
>send
13.DDNS的动态域名的解析
配置文件westos.com.zone是自己写入的,里面的IP是一个静态的,但是如果IP是一个动态的、会改变的怎么办?配置文件的IP要跟着IP的改变而改变。
在DNS服务器上:
yum install -y dhcp
cp / /etc/dhcp/dhcpd.conf
vim /etc/dhcp/dhcpd.conf ##像之前的dhcp配置文件一样配置,但是还有不同
ddns-update-style interim; ##主动通知DNS
(DNS的动态域名解析,需要KEY)
key westos {
algorithm hmac-md5;
secret 自己获得的密码;
}
zone westos.com. {
primary localhost;
key westos;
}
在客户端:
将ip类型改为dhcp,将hostname更改为域名。
测试:dig hostname设置的域名