DNS概述 DNS服务器: 什么是DNS服务器? 简单来说就是将不容易记住的IP地址转换为容易主机的网站域名的一个服务器(www.baidu.com
www.taobao.com
)
1 2 vim /etc/nsswitch.conf hosts: files dns #涉及到名称翻译的都会先查找/etc/hosts,再查找DNS(/etc/resolv.conf)
主机名和域名的区别?
主机名是内网的名字 域名是外网的名字
主机名和域名其实是两个完全可以不同的名字,但是有很多软件(如邮件系统postfix)会默认认为它们一致
DNS服务器特点:
1,分布式的数据库 2,解决了数据不一致,避免了名字冲突 3,有缓存机制,提高了性能和可靠性
分层结构,最多127层
查询方式:递归查询,迭代查询
全世界共有有13台DNS根域服务器
顶级域名
1 2 3 4 5 6 7 8 .com .org .edu .gov .net .mil .info 商业 组织 教育 政府 通讯 军事 信息 根 cn hk us jp tw in .com.cn .net.us .edu.cn
深圳电信的DNS地址: 首选的:202.96.134.133 备选的:202.96.128.86
课后扩展: 上网查询 全球现在免费的DNS服务器
对应的linux主机上写DNS指向,由/etc/resolv.conf
1 2 3 vim /etc/resolv.conf nameserver 192.168.224.2 #一共可以写三个,如果第一个没有记录,则找第二个 nameserver 8.8.8.8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 根(com) | | 中国(cn) USA | | 大运营商(电信) | | 小运营商(百度,google) | | | 自己的DNS服务器 US电信 | | | | qianyun.com.cn. abc.com.us.
上图中qianyun在小运营商申请了域名,自己搭DNS服务器,请问如何与运营商联系起来(意思就是说,域名的查询怎样才能转到你自己搭的DNS服务器)
如果上面的DNS服务器做好了,全世界的任意一个访问点如何能访问到你的这个DNS服务器里的域名?
上图中DNS服务器里除了自己的域名和IP对应,能否写上qq.com这个域和IP的对应呢?
===========================================================
开始安装DNS服务器 bind (berkeley internet name domain)
查看软件包;
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 rpm -qa |grep ^bind- #rhel7.3下的包 bind-pkcs11-libs-9.9.4-73.el7_6.x86_64 bind-sdb-9.9.4-73.el7_6.x86_64 bind-pkcs11-9.9.4-73.el7_6.x86_64 bind-devel-9.9.4-73.el7_6.x86_64 bind-libs-9.9.4-73.el7_6.x86_64 bind-libs-lite-9.9.4-73.el7_6.x86_64 bind-9.9.4-73.el7_6.x86_64 bind-sdb-chroot-9.9.4-73.el7_6.x86_64 bind-dyndb-ldap-11.1-4.el7.x86_64 bind-lite-devel-9.9.4-73.el7_6.x86_64 bind-pkcs11-devel-9.9.4-73.el7_6.x86_64 bind-utils-9.9.4-73.el7_6.x86_64 bind-license-9.9.4-73.el7_6.noarch bind-chroot-9.9.4-73.el7_6.x86_64 bind-pkcs11-utils-9.9.4-73.el7_6.x86_64
DNS使用的协议端口: tcp/udp 53
查询DNS记录只使用udp 53端口 主DNS服务器和备DNS服务器之间的数据同步使用tcp 53端口
配置文件的目录:
配置文件为/etc/named.conf 数据文件在/var/named目录下
安装完成后启动DNS服务器:
1 2 systemctl start named systemctl enable named
配置文件详解:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 options { listen-on port 53 { any; }; #监听端口 IPV4 listen-on-v6 port 53 { any; }; #监听端口 IPV6 directory "/var/named"; #工作目录 dump-file "/var/named/data/cache_dump.db"; #数据存放目录 statistics-file "/var/named/data/named_stats.txt"; #数据存放目录 memstatistics-file "/var/named/data/named_mem_stats.txt"; #数据存放目录 allow-query { any; }; #允许解析的IP地址 recursion yes; # 开启递归查询 dnssec-enable yes; #开启加密 dnssec-validation yes; #在递归查询服务器上开启DNSSEC验证 /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { #日志 channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
例一.正向解析(将域名解析成ip) 配置步骤: 1,编辑named.conf –记录你的域和域对应的数据文件在哪 2, 编辑zone区域文件 –就是数据文件,记录域名和IP的对应
1 2 3 4 5 6 7 8 9 10 11 vim /etc/named.conf options { listen-on port 53 { any; }; #改为any,表示监听所有来自53端口的请求 listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; recursing-file "/var/named/data/named.recursing"; secroots-file "/var/named/data/named.secroots"; allow-query { any; }; #改为any,表示所有客户端都可以访问该服务器
1 2 3 4 5 6 vim /etc/named.rfc1912.zones #打开这个文件,最后加上一个域的配置 zone "server2.com" IN { type master; file "data/server2.com.zone"; };
1 2 3 4 5 6 7 8 9 10 11 12 13 vim /var/named/data/server2.com.zone #建立数据文件,路径要对应上面的配置 $TTL 3600 ; 缓存时间(生存周期) @ IN SOA ns.server2.com. root.server2.com. ( ; #DNS服务器名称 DNS管理员邮箱;可以随便写,但最后得有个 . 0 ; #更新序列号(主从服务器时使用) 30 ; #更新时间 60 ; #重试时间 90 ; 失效时间 3600 ) ; #无效解析记录缓存时间 @ IN NS 192.168.224.12. ; NS = name server #域名服务器地址(注意:这里可以写域名或IP,后方必须有个 . ) www IN A 192.168.224.12 ; A = address #A记录,表示直接将该域名解析至指定服务器 mail IN A 192.168.224.13 ; dns IN A 192.168.224.12 ; #一个IP可以解析为多个域名 bbs IN A 192.168.224.13 ; #同理,一个域名也可解析为多个IP
1 2 3 4 5 $TTL 600 @ IN SOA @ IN SOA ns.server2.com. root.server2.com ( 2019071701; 1D; 1H; 1W; 3H; ) @ NS ns.server2.com dns A 192.168.224.11 www A 192.168.224.12
3.配置完成,重启服务
4.测试,客户端修改nameserver,指向自己搭建的服务器
1 2 3 4 vim /etc/resolv.conf Generated by NetworkManager search localdomain nameserver 192.168.224.12
1 2 3 4 5 6 7 8 9 10 11 12 13 nslookup mail.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: mail.server2.com Address: 192.168.224.13 #这里可以看到该域名的解析情况 nslookup bbs.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: bbs.server2.com Address: 192.168.224.13
例二:反向解析 IP解析为域名 比如我们使用公司的一台内部机器,可以模拟zhangsan@126.com
去给另一个@qq.com
发邮件; 那么qq如何知道你发的这封邮件是真的从126来的? 通过反向解析(IP解析为域名)就可以判别
第一步:服务器端主配置文件添加以下区域:
1 2 3 4 5 6 vim /etc/named.rfc1912.zones zone "224.168.192.in-addr.arpa" IN { type master; file "data/master.224.168.192.in-addr.arpa.zone"; };
我这里做的是一个内网网段,在这里只是实验
第二步:建立区域数据文件
1 2 3 4 5 6 7 8 9 10 11 vim /var/named/data/master.3.3.3.in-addr.arpa.zone $TTL 86400 @ IN SOA 224.168.192. root. ( 0 30 40 50 86400 ) IN NS 192.168.224.12. 3 IN PTR www.server2.com. ; 将192.168.224.12解析为www.server2.com 4 IN PTR bbs.server2.com. ; 将192.168.224.13解析为bbs.server2.com
注意反向解析后方的 .
重启named
第三步;客户端测试
1 2 3 4 5 6 7 8 9 10 11 nslookup 192.168.224.12 Server: 192.168.224.12 Address: 192.168.224.12#53 192.168.224.12.in-addr.arpa name = www.server2.com. --反向解析成功 nslookup 192.168.224.13 Server: 192.168.224.12 Address: 192.168.224.12#53 4.3.3.3.in-addr.arpa name = bbs.server2.com.
例三:使用DNS轮询 实现简单的不可靠的负载均衡(一个域名对应多台服务器)
DNS轮循相对于其它的负载均衡软件来说: 优点:配置简单,成本低 缺点:没有后台健康检查,算法单一,因为DNS的缓存,会影响你修改DNS调度的生效速度
client
|
DNS服务器
|
|
`www.server2.com`
web1 web2 web3
192.168.224.12 192.168.224.13 192.168.224.14
rsync
共享存储 保证数据一致
服务器端操作:
第一步: vim /etc/named.rfc1912.zones
–打开这个文件,最后加上一个域的配置(刚刚有添加的就不用添加了)
1 2 3 4 zone "server2.com" IN { type master; file "data/server2.com.zone"; };
第二步:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 vim /var/named/data/server2.com.zone $TTL 3600 @ IN SOA ns.server2.com. root.server2.com. ( 0 30 60 90 3600 ) @ IN NS 192.168.224.12. ns IN A 192.168.224.12 www IN A 192.168.224.12 www IN A 192.168.224.13 www IN A 192.168.224.14
第三步:客户端测试
1 2 3 4 5 6 7 8 9 10 nslookup www.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: www.server2.com Address: 192.168.224.14 Name: www.server2.com Address: 192.168.224.12 Name: www.server2.com Address: 192.168.224.13 #单域名对应多机器解析成功
例四:CNAME记录的使用 (一个IP对应多个域名) 别名
vim /var/named/data/master.server2.com.zone
1 2 3 4 5 6 7 8 9 10 11 12 $TTL 86400 @ IN SOA ns.server2.com. root.server2.com. ( 2013011101 10 20 30 86400 ) IN NS 192.168.224.12. aaa IN CNAME www www IN A 192.168.224.12 www IN A 192.168.224.13 www IN A 192.168.224.14
客户端测试:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 nslookup www.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: www.server2.com Address: 192.168.224.14 Name: www.server2.com Address: 192.168.224.12 Name: www.server2.com Address: 192.168.224.13 [root@server ~]# nslookup aaa.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 aaa.server2.com canonical name = www.server2.com. #注意看这条 Name: www.server2.com Address: 192.168.224.13 Name: www.server2.com Address: 192.168.224.12 Name: www.server2.com Address: 192.168.224.14
例五:直接对域的解析 (域名不需要前缀)
1 2 3 4 5 6 7 8 9 10 11 vim /var/named/data/server2.com.zone $TTL 86400 @ IN SOA ns. root. ( 2013011101 10 20 30 86400 ) IN NS 192.168.224.12. server2.com. IN A 192.168.224.12 #直接写域名即可
配置完成,重启服务 systemctl restart named
测试:
1 2 3 4 5 6 nslookup server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: server2.com Address: 192.168.224.12 #解析成功
例六:使用通配符实现泛解析 1 2 3 4 5 6 7 8 9 10 11 12 vim /var/named/data/server2.com.zone * IN A 192.168.224.13 nslookup a.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: a.server2.com Address: 192.168.224.13
1 2 3 4 5 6 [root@server ~]# nslookup b.server2.com Server: 192.168.224.12 Address: 192.168.224.12#53 Name: b.server2.com Address: 192.168.224.13
例七: 辅助DNS服务器(从DNS服务器)的配置
192.168.224.12 192.168.224.13
主 ---- 从
type master type slave
zone文件 被动的从主传过来zone文件
从DNS服务器的准备工作:
和主DNS服务器一样
准备工作有: 1,主机名三步 2,时间同步 3,iptables,selinux关闭 iptables -L –查看,有写规则的话,则表示需要关闭 iptables -F –清空规则 systemctl disable iptables
vim /etc/selinux/config
SELINUX=disabled #改为disabled
reboot #selinux的关闭需要重启电脑才能完全生效
如果你不想重启来关闭selinux,那么使用setenforce 0(这不是关闭selinux,只是改成警告模式,但是这种模式不会拒绝你的操作)
4,yum配置好
1,配置从服务器的主配置文件
在从服务器上安装bind软件包
yum install bind* -y
vim /etc/named.conf
#打开此文件,和主的配法一样
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 options { listen-on port 53 { any; }; #改为any listen-on-v6 port 53 { ::1; }; directory "/var/named"; dump-file "/var/named/data/cache_dump.db"; statistics-file "/var/named/data/named_stats.txt"; memstatistics-file "/var/named/data/named_mem_stats.txt"; allow-query { any; }; #改为any recursion yes; dnssec-enable yes; dnssec-validation yes; dnssec-lookaside auto; /* Path to ISC DLV key */ bindkeys-file "/etc/named.iscdlv.key"; managed-keys-directory "/var/named/dynamic"; }; logging { channel default_debug { file "data/named.run"; severity dynamic; }; }; zone "." IN { type hint; file "named.ca"; }; include "/etc/named.rfc1912.zones"; include "/etc/named.root.key";
vim /etc/named.rfc1912.zones
#在最后加上下面一段
1 2 3 4 5 zone "server2.com" IN { type slave; #类型定义为slave file "slaves/slave.server2.com.zone"; #最好把zone文件定义到slaves目录下; masters { 192.168.224.12; }; #指定主DNS服务器的IP地址 };
systemctl start named
#在从上启动named服务
ls /var/named/slaves/
#再次查看发现是主上面下载过来了 slave.server2.com.zone
如果不能下载过来:
查看网络是否连通,就是ping一下
查看iptables,selinux是否关闭
tail /var/log/messages #或者查看日志也可以看到相关的日志内容
例九:转发服务器的设置 前面所做的全是一个域的情况,也就是我只能解析server2.com这一个域,如果想要解析另外一个域该怎么办?
方法一:在/etc/named.conf
里再写一个域 然后再配置一个对应zone数据文件 重启服务
方法二:做转发 先在其它机器上搭建一个test.com
的域名解析
单域转发 1,named.conf里加上下面一段
1 2 3 4 5 6 7 8 9 10 zone "test.com" IN { type forward; forwarders { 192.168.224.14; }; #将test.com这个域的解析转发到3.5的服务器上 }; 修改dnssec-validation改为no options { dnssec-validation no; #在递归查询服务器上关闭DNSSEC验证 };
systemctl restart named
nslookup test.com
#查找能查出来,是因为127的DNS服务器的zone文件里有,我这里转发过去查找到结果,再返回过来
1 2 3 4 5 6 Server: 192.168.224.12 Address: 192.168.224.12#53 Non-authoritative answer: Name: www.test.com Address: 192.168.224.12
2,完全转发
1 2 3 4 5 6 7 8 9 10 vim /etc/named.conf options { dnssec-validation no; forwarders { 114.114.114.114; }; #这是写到options里的完全转发,指的是本机的zone文件查不到的情况,会去查找10.0.0.1,都查不到才会返回错误 }; options { forwarders { 8.8.8.8;114.114.114.114; }; #可以用分号隔开,写多个转发服务器的IP };