-- 什么叫DNS? DNS domain name system 域名系统 DNS有什么用? 公网访问,是靠IP走路由,但是对一个用户去访问网站(或其它应用)来说,IP不好记,域名好记。 DNS就是把域名解析为IP的。 [root@li ~]# vim /etc/nsswitch.conf hosts: files dns --涉及到名称翻译的都会先查找/etc/hosts,再查找DNS(/etc/resolv.conf) 主机名和域名的区别? 主机名是内网的名字 域名是外网的名字 --主机名和域名其实是两个完全可以不同的名字,但是有很多软件(如邮件系统postfix)会默认认为它们一致 DNS服务器 特点: 1,分布式的数据库 2,解决了数据不一致,避免了名字冲突 3,有缓存机制,提高了性能和可靠性 分层结构,最多127层 查询方式:递归查询,迭代查询 DNS 全世界有13台根域服务器 .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 vim /etc/resolv.conf nameserver 10.1.1.10 --可以写三个,第一个没有记录,则找第二个 根 | | 中国 USA | | 大运营商 | | 小运营商 | | | 自己的DNS服务器 US电信 | | | | uplooking.com.cn. x.x.x.x abc.com.us. 上图中uplooking在小运营商申请了域名,自己搭DNS服务器,请问如何与运营商联系起来(意思就是说,域名的查询怎样才能转到你自己搭的DNS服务器) 如果上面的DNS服务器做好了,全世界的任意一个访问点如何能访问到你的这个DNS服务器里的域名? 上图中DNS服务器里除了自己的域名和IP对应,能否写上qq.com这个域和IP的对应呢? ================================================================== bind (berkeley internet name domain) yum install bind* -y 软件包; # rpm -qa |grep ^bind- --rhel6.3下的包 bind-utils-9.8.2-0.10.rc1.el6.x86_64 bind-chroot-9.8.2-0.10.rc1.el6.x86_64 bind-libs-9.8.2-0.10.rc1.el6.x86_64 bind-9.8.2-0.10.rc1.el6.x86_64 bind-dyndb-ldap-1.1.0-0.9.b1.el6.x86_64 协议端口: tcp/udp 53 查询DNS记录只使用udp 53端口 主DNS服务器和备DNS服务器之间的数据同步使用tcp 53端口 配置文件的目录: 没有安装bind-chroot.i386的话 配置文件为/etc/named.conf 数据文件在/var/named目录下 安装了bind-chroot.i386 配置文件为/var/named/chroot/etc/named.conf --默认没有 数据文件在/var/named/chroot/var/named目录 从上面看到装了bind-chroot,笼环境为/var/named/chroot/ [root@dns data]# ls /var/named/chroot/etc/ --域配置文件目录 localtime rndc.key [root@dns data]# ls /var/named/chroot/var/named/ data slaves [root@dns data]# ls /var/named/chroot/var/named/data/ --存放主zone文件 [root@dns data]# ls /var/named/chroot/var/named/slaves/ --存放从zone文件 --rhel6.3上的结果 # ls /var/named/chroot/etc/ localtime named pki # ls /var/named/chroot/var/named/ --空的 --在红帽6里你配置/etc/named.conf,重启服务后,他会链接到/var/named/chroot/etc/named.conf --你配置/var/named/,重启服务后,他也会链接到/var/named/chroot/var/named/ --rhel6.3下配置模版在/etc/named.conf或者在/usr/share/doc/bind-9.8.2/目录下 配置步骤: 1,编辑named.conf --记录你的域和域对应的数据文件在哪 2, 编辑zone区域文件 --就是数据文件,记录域名和IP的对应 # vim /etc/named.conf 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 --打开这个文件,最后加上一个域的配置 zone "cluster.com" IN { type master; file "data/master.cluster.com.zone"; }; # vim /var/named/data/master.cluster.com.zone --建立数据文件,路径要对应上面的配置 $TTL 3600 @ IN SOA sdfsadfas. zhangsan. ( 2013050801 --版本号,下面的是各种时间,如果不做主从结构,这些随便写 30 60 90 3600 ) IN NS 10.1.1.10. --这里就是DNS服务器的IP(实际应该是公网IP,但这里是内网环境,所以写的内网IP),但记得加点,也可以写DNS服务器的外网域名;并且这里可以写多个NS,代表了你公司的多台DNS服务器 mail IN A 1.1.1.1 --A记录就是真正的数据,这里代表了mail.cluster.com的公网地址为1.1.1.1 dns IN A 10.1.1.10 bbs IN A 2.2.2.2 # /etc/init.d/named restart --SOA Start Of Authority --NS Name Server --A Address 客户端 # vim /etc/resolv.conf nameserver 10.1.1.10 # nslookup mail.cluster.com Server: 10.1.1.10 Address: 10.1.1.10#53 Name: mail.cluster.com Address: 1.1.1.1 # nslookup bbs.cluster.com Server: 10.1.1.10 Address: 10.1.1.10#53 Name: bbs.cluster.com Address: 2.2.2.2 # dig bbs.cluster.com # host bbs.cluster.com 例二:反向解析 IP解析为域名 --比如我们使用公司的一台内部机器,可以模拟zhangsan@126.com去给另一个lisi@qq.com发邮件; 那么qq如何知道你发的这封邮件是真的从126来的呢? --通过反向解析(IP解析为域名)就可以判别 第一步:主配置文件添加以下区域: # vim /etc/named.rfc1912.zones zone "1.1.10.in-addr.arpa" IN { type master; file "data/master.1.1.10.in-addr.arpa.zone"; }; --我这里做的是一个内网网段,在这里只是实验 第二步:建立区域数据文件 # vim /var/named/data/master.1.1.10.in-addr.arpa.zone $TTL 86400 @ IN SOA sdfsfd. sdfsda. ( 2013011101 30 40 50 86400 ) IN NS 10.1.1.10. 10 IN PTR dns.cluster.com. --10.1.1.10这个IP被反向解析为dns.cluster.com # /etc/init.d/named restart # nslookup 10.1.1.10 Server: 10.1.1.10 Address: 10.1.1.10#53 10.1.1.10.in-addr.arpa name = dns.cluster.com. 例三,使用DNS的轮循(round-robin)实现简单的负载均衡 (一个域名对应多个IP) 属于一种基本的负载均衡(load balance) 课后网上查询CDN DNS轮循相对于其它的负载均衡软件来说: 优点:配置简单,成本低 缺点:没有后台健康检查,算法单一,因为DNS的缓存,会影响你修改DNS调度的生效速度 client | DNS服务器 | | www.uplooking.com web1 web2 web3 1000 1000 1000 1000 500 0 rsync 共享存储 保证数据一致 # vim /var/named/data/master.cluster.com.zone $TTL 86400 @ IN SOA 10.1.1.10. daniel. ( 2013011101 10 20 30 86400 ) IN NS 10.1.1.10. web IN A 1.1.1.1 web IN A 1.1.1.2 web IN A 1.1.1.3 --对web记录再绑定两个IP mail IN A 2.2.2.2 # /etc/init.d/named reload # nslookup web.cluster.com --客户端验证 Server: 10.1.1.10 Address: 10.1.1.10#53 Name: web.cluster.com Address: 1.1.1.1 Name: web.cluster.com Address: 1.1.1.2 Name: web.cluster.com Address: 1.1.1.3 例四:CNAME记录的使用 (一个IP对应多个域名) # vim /var/named/data/master.cluster.com.zone $TTL 86400 @ IN SOA 10.1.1.10. daniel. ( 2013011101 10 20 30 86400 ) IN NS 10.1.1.10. www IN CNAME venus venus IN CNAME mars mars IN CNAME earth earth IN CNAME web --这里加了几个cname记录 web IN A 1.1.1.1 web IN A 1.1.1.2 web IN A 1.1.1.3 mail IN A 2.2.2.2 # /etc/init.d/named reload # nslookup web.cluster.com --客户端验证 Server: 10.1.1.10 Address: 10.1.1.10#53 www.cluster.com canonical name = venus.cluster.com. venus.cluster.com canonical name = mars.cluster.com. mars.cluster.com canonical name = earth.cluster.com. earth.cluster.com canonical name = web.cluster.com. Name: web.cluster.com Address: 1.1.1.3 Name: web.cluster.com Address: 1.1.1.1 Name: web.cluster.com Address: 1.1.1.2 例五:实现直接对域的解析 # vim /var/named/data/master.cluster.com.zone cluster.com. IN A 3.3.3.3 # /etc/init.d/named reload # nslookup cluster.com Server: 10.1.1.10 Address: 10.1.1.10#53 Name: cluster.com Address: 3.3.3.3 例六:使用通配符实现泛解析 * IN A 4.4.4.4 # nslookup sdfasfsasdfsad.cluster.com Server: 10.1.1.10 Address: 10.1.1.10#53 Name: sdfasfsasdfsad.cluster.com Address: 4.4.4.4 例七:实现连接范围域名解析 实现station1~station254.cluster.com 与10.1.1.1~10.1.1.254的对应 正向DNS的写法 # vim /var/named/data/master.cluster.com.zone $GENERATE 1-254 station$ IN A 10.1.1.$ /etc/init.d/named reload 测试: nslookup 测试 反向DNS的写法 # vim /var/named/data/master.1.1.10.in-addr.arpa.zone $GENERATE 1-254 $ IN PTR station$.cluster.com. 测试: nslookup 测试 例8: 辅助DNS服务器(从DNS服务器)的配置 主 从 DNS mysql oracle 高可用 主 10 备 105 10.1.1.10 10.1.1.105 主 ---- 从 type master type slave zone文件 被动的从主传过来zone文件 从DNS服务器的准备工作: 和主DNS服务器一样 准备工作有: 1,主机名三步 2,时间同步 3,iptables,selinux关闭 iptables -L --查看,有写规则的话,则表示需要关闭 iptables -F --清空规则 chkconfig iptables off ls /selinux/ --有数据,表示selinux开启着,如果没数据则表示selinux关闭 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 --打开此文件,和主的配法一样 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 --在最后加上下面一段 zone "cluster.com" IN { type slave; --类型定义为slave file "slaves/slave.cluster.com.zone"; --最好把zone文件定义到slaves目录下; masters { 10.1.1.10; }; --指定主DNS服务器的IP地址 }; /etc/init.d/named start --在从上启动named服务 Starting named: [ OK ] [root@localhost ~]# ls /var/named/slaves/ --再次查看发现是主上面下载过来了 slave.cluster.com.zone 如果不能下载过来: 查看网络是否连通,就是ping一下 查看iptables,selinux是否关闭 时间是否同步等 [root@localhost ~]# tail /var/log/messages --或者查看日志也可以看到相关的日志内容 例九:验证主DNS到从DNS的更新 1,更新主服务器的区域文件的记录,注意,加大版本号 vim /var/named/chroot/var/named/data/master.cluster.com.zone 随便添加一条记录,然后增大版本号的数字,最好把刷新时间改小点(比如60秒) 2,/etc/init.d/named restart --重启服务 3,在从域名服务器这里查看 1,直接删除/var/named/chroot/var/named/slaves/slave.cluster.com.zone 文件 然后重启服务 2,从DNS服务器什么都不用做,用watch tail /var/log/messages查看日志看是否能够自动更新过来 --或者使用tail -f来查看 --上面看到这样的同步机制很慢,如果主服务器更新了大量记录,而从服务器还没有同步过去时,主服务器就崩溃了,则就会造成数据的不一致 --所以可以用脚本或程序开发或共享存储等技术实现同步更新就可以了,不一定要使用它自带的refresh功能 例十:限制从DNS的IP 主对从DNS的限制 vim /var/named/chroot/etc/named.conf zone "cluster.com" IN { type master; file "data/master.cluster.com.zone"; allow-transfer { 10.1.1.105; }; --加上这一句,限制了只有105这台机才能做这个域的从DNS }; 例十一:转发服务器的设置 前面所做的全是一个域的情况,也就是我只能解析cluster.com这一个域,如果想要解析另外一个域 方法一:在named.conf里再写一个域 然后再配置一个对应zone数据文件 重启服务 方法二:做转发 单域转发 1,named.conf里加上下面一段 zone "man.com" IN { type forward; forwarders { 10.1.1.127; }; }; /etc/init.d/named restart [root@li ~]# nslookup station171.man.com --查找能查出来,是因为127的DNS服务器的zone文件里有,我这里转发过去查找到结果,再返回过来 Server: 10.1.1.45 Address: 10.1.1.45#53 Non-authoritative answer: Name: station171.man.com Address: 10.1.1.171 2,完全转发 options { directory "/var/named"; forwarders { 10.1.1.1; }; --这是写到options里的完全转发,指的是本机的zone文件查不到的情况,会去查找10.1.1.1,都查不到才会返回错误 }; options { directory "/var/named"; forwarders { 10.1.1.127;10.1.1.199; }; --可以用分号隔开,写多个转发服务器的IP }; --在rhel6.3上测试的转发,不管是单域还是全局转发,都要把下面的这个参数改为no,才可以成功 dnssec-validation no; 例十二:缓存dns服务器 如果你的DNS服务器就按上面的例子来配置一个cluster.com这个域; 如果你的公司内网用户,把DNS不去指向外网,而用内网地址指向你的DNS服务器去查baidu,youku,sina等域名,会是什么情况? 情况一:如果DNS服务器有一个能出去的外网网关,那么内网用户也可以查询到除了cluster.com之外的域名 情况二:没有网关,则不行; 但在去掉网关之前,你查过的域名还是可以,因为有缓存 情况三:或者你做了转发服务器,转发给外网或者转发给一个有外网网关的DNS服务器都可以 --DNS服务器缓存的清除方法rndc flush 怎么做一个only cache的DNS服务器? 一个DNS管理一个域或不管理域,然后加一个能出去的外网网关就OK。 子域 baidu.com news.baidu.com tieba.baidu.com us.news.baidu.com sports.tieba.baidu.com cn.news.baidu.com miltary.tieba.baidu.com ========================================================== 练习: 1,简述通过浏览器上www.baidu.com的过程(域名的查找过程,DNS的访问和网络的访问过程) /etc/nsswitch.conf /etc/hosts /etc/resolv.conf 路由 2,做为一个公司的技术人员,要不要搭建DNS服务器,哪些情况才可能需要搭建 3,简述主DNS服务器,从DNS服务器,缓存DNS服务器,转发DNS服务器的区别及应用 4,下面是dig www.sina.com产生的结果,通过下面的结果,画出sina的DNS的架构图,并写出他的配置 ;; ANSWER SECTION: www.sina.com 35 IN CNAME us.sina.com.cn. us.sina.com.cn. 2 IN CNAME news.sina.com.cn. news.sina.com.cn. 2 IN CNAME jupiter.sina.com.cn. jupiter.sina.com.cn. 59 IN CNAME libra.sina.com.cn. libra.sina.com.cn. 182 IN A 202.108.33.98 libra.sina.com.cn. 182 IN A 202.108.33.99 libra.sina.com.cn. 182 IN A 202.108.33.70 libra.sina.com.cn. 182 IN A 202.108.33.71 libra.sina.com.cn. 182 IN A 202.108.33.72 libra.sina.com.cn. 182 IN A 202.108.33.74 libra.sina.com.cn. 182 IN A 202.108.33.75 libra.sina.com.cn. 182 IN A 202.108.33.76 libra.sina.com.cn. 182 IN A 202.108.33.77 libra.sina.com.cn. 182 IN A 202.108.33.78 libra.sina.com.cn. 182 IN A 202.108.33.79 libra.sina.com.cn. 182 IN A 202.108.33.80 libra.sina.com.cn. 182 IN A 202.108.33.81 libra.sina.com.cn. 182 IN A 202.108.33.95 libra.sina.com.cn. 182 IN A 202.108.33.96 libra.sina.com.cn. 182 IN A 202.108.33.97 ;; AUTHORITY SECTION: sina.com.cn. 18423 IN NS ns3.sina.com.cn. sina.com.cn. 18423 IN NS ns1.sina.com.cn. sina.com.cn. 18423 IN NS ns2.sina.com.cn. sina.com.cn. 18423 IN NS ns4.sina.com.cn. ;; ADDITIONAL SECTION: ns1.sina.com.cn. 24775 IN A 202.106.184.166 ns2.sina.com.cn. 24775 IN A 61.172.201.254 ns3.sina.com.cn. 24775 IN A 202.108.44.55 ns4.sina.com.cn. 24775 IN A 121.14.1.22