DNS

Posted Evan_Wolf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DNS相关的知识,希望对你有一定的参考价值。

DNS(Domain Name System)域名服务系统

DNS定义

DNS is a hierarchical decentralized naming system for computers, services, or other resources connected to the Internet or a private network. It associates various information with domain names assigned to each of the participating entities. Most prominently, it translates more readily memorized domain names to the numerical IP addressesneeded for locating and identifying computer services and devices with the underlying network protocols. By providing a worldwide, distributed directory service, the Domain Name System is an essential component of the functionality on the Internet, that has been in use since 1985

从上述的定义中可以看出DNS功能和特点如下:

  • IP到人类易读和易记的域名的翻译如访问www.baidu.com可以通过此域名或IP61.135.169.125访问
  • 层级架构
  • 分布式部署

本地名称解析配置文件:hosts

/etc/hosts
%WINDIR%/system32/drivers/etc/hosts
122.10.117.2 www.magedu.com
93.46.8.89 www.google.com

如果事先知道IP和域名的关系,则可以在本地主机上直接配置IP和域名的对应关系,此时访问hosts里的域名是不需要经过DNS的解析。因为客户端云访问域名时,第一步是到本地的/hosts的文件时查找。但是互联网上的如此碰的域名和IP的解析关系通过配置本地的hosts文件是不可行的,还是需要依赖DNS。

DNS:Domain Name Service 应用层协议

53/udp, 53/tcp

DNS服务器类型

  • 主DNS服务器:管理和维护所负责解析的域内解析库的服务器
  • 从DNS服务器:从主服务器或从服务器“复制”(区域传输)解析库副本
  • 缓存DNS服务器(转发器)

主DNS服务器和从DNS服务器同步的工作机制:

“通知”机制:主服务器解析库发生变化时,会主动通知从服务器

  • 序列号:解析库版本号,主服务器解析库变化时,其序列递增 刷新时间间隔:从服务器从主服务器请求同步解析的时间间隔
  • 重试时间间隔:从服务器请求同步失败时,再次尝试时间间隔
  • 过期时长:从服务器联系不到主服务器时,多久后停止服务

对应在配置文件/var/named/linuxdevops.net.zone 

0 serial (解析库版本号,只要有变化就要手动加1)
1D ; refresh (刷新时间)
1H ; retry(重试时间 )
1W ; expire(过期时间)
3H ) ; minimum(否定答案的TTL值:查找不到的缓存时间,如用户查找wwww.baidu.com,因为这是一个错误的查询,缓存DNS服务器会告诉用户这是一个错误查询,如果用户后几次的请求还是同样的错误,缓存DNS服务器会直接通知此用户结果查询错误,减少向主DNS服务器查询的负担)

DNS解析

一次完整的查询请求经过的流程:
Client -->hosts文件 -->DNS Service Local Cache --> DNS Server (recursion) --> Server Cache --> iteration(迭代) --> 根--> 顶级域名DNS-->二级域名DNS…

DNS查询类型

递归查询:小区DNS缓存DNS服务器收到客户端的请求后,把请求转发至根DNS服务器,特点是负责到底
迭代查询:根DNS服务器根据域名的类型如.com,转发至相应的DNS服务器,特点是不负责到底

DNS基本配置

/etc/named.conf DNS的主配置文件

listen-on port 53 { localhost; };  localhost代表所有本机的IP

allow-query { localhost; any; }; 可以查询的客户端,localhost代表本机。

  最佳实践:把上述两行comment out

 

 

/etc/named.rfc1912.zones

zone "linuxdevops.net" IN {
type master;
file "linuxdevops.net.zone";
};

/var/named/linuxdevops.net.zone (区域解析数据库文件)

资源记录定义的格式:
语法:name [TTL] IN rr_type value

注意:

  • TTL可从全局继承
  • 后面记录可以继承上一行的值(如A记录中的TTL和IN都可以省略)
  • @可用于引用当前区域的名字
  • 同一个名字可以通过多条记录定义多个不同的值;此时DNS服务器会以轮询方式响应
  • 同一个值也可能有多个不同的定义名字;通过多个不同的名字指向同一个值进行定义;此仅表示通过多个不同的名字可以找到同一个主机

例子

$TTL 1D
@ IN SOA master.linuxdevops.net. admin.linuxdevops.net. (
                                                                            0 ; serial
                                                                           1D ; refresh
                                                                           1H ; retry
                                                                           1W ; expire
                                                                            3H ) ; minimum
              NS    master
master    A    172.20.42.145
www   A    172.20.103.43

$TTL 1D 全局TTL值,默认是秒为单位;DNS的缓存时间

@代表当前域名本身,在本例子中是linuxdevops.net,@也可以用精确的域名linuxdevops.net代替,但是必须加dot,如linuxdevops.net.

admin.linuxdevops.net. (邮件记录,应该是admin@linuxdevops.net,但是@在bind配置中有特殊意,所以用dot代替)

 

DNS别名配置

在dig www.linuxdevops.net,别名记录会解析到相对应的两个A记录,如果部署是web服务器,可以起到负载均衡的作用。

DNS主从配置

  • 在从服务器上安装bind

  • /etc/named.rfc1912.zones(masters是主DNS服务器的IP,从服务器的文件生成路径是/var/named/slaves/系统默认的)

  • 在主DNS服务器的区域数据库文件linuxdevops.net.zone中加入从DNS服务器的NS记录以及从DNS服务器的A记录

 

 

  • 启动从DNS服务器的named服务 systemctl start named
  • reload主DNS服务器
  • 检查从服务器的/var/named/slaves,会看到解析库文件自动从主同步成功

也可以通过systemctl status named -l查看详细的同步过程

 智能DNS

  • 智能DNS是CDN网络的基础
  • 能够通过配置view来区别客户请求的IP把用记的请求发送到最近的边缘节点
  • 可以实现不同的区域内容发布的个性化

实验目标:

来自不同网段的IP访问事先分配好的网站:192.168.30.0/24网段访问172.20.103.43的web站点,172.20.0.0/16网段访问172.20.42.143的web站点,两个站点的URL相同www.linuxdevops.net但是主页内容有差别(192.168.30.201和172.20.42.145分别为主DNS的两个IP)

配置过程

主配置文件named.conf

named.rfc1912.zones

把根域从主配置文件移动到此文件,一旦启用了view,所有的zone都只能定义在view中。

named.rfc1912.zones.bj

named.rfc1912.zones.sh

/var/named

linuxdevops.net.zone

 

 linuxdevops.net.zone.bj

linuxdevops.net.zone.sh

测试

通过192网段云查询DNS:dig www.linuxdevops.net @192.168.30.201

通过172网段:dig www.linuxdevops.net @172.20.42.145

 DNS实验

需求:

建立公司内部的DNS,client通过DNS proxy来查询访问www.linuxdevops.net,通过自已的根域,com域,以及主备DNS访问web1, web2,在此实验中,web server和DNS部署在同一服务器上。

准备:

  • 5 台CentOS7服务器,一台windowns客户端
  • 把SElinux, Firewall disabled
  • 编写脚本,在Ansible堡垒机上运行,完成到所有客户端的ssh验证

vim ip.txt

172.20.103.43
172.20.42.200
172.20.42.201
172.20.42.202
172.20.42.203
172.20.42.204

 #!/bin/bash
rpm -q expect &> /dev/null || yum install expect -y
ssh-keygen -P "" -f "/root/.ssh/id_rsa"
password=verimatrix
while read ipaddr;do
expect <<EOF
set timeout 10
spawn ssh-copy-id $ipaddr
expect {
"yes/no" { send "yes\\n";exp_continue }
"password" { send "$password\\n" }
}
expect eof
EOF
done < ip.txt

  • ansible dnsservers -m yum -a \'name=bind\' 安装bind在5台服务器上
  • 确认安装成功

配置各DNS

根DNS

配置文件:/etc/named.rfc1912.zones

 

 COM DNS服务器

 

主DNS服务器

 

 

 

从DNS服务器

同时在主从DNS服务器上安装httpd, 建立两个不同的页面,显示server1 server2

DNS proxy服务器

 

 

Windows客户端

  把DNS指向DNS proxy IP:

      访问www.linuxdevops.com

 

以上是关于DNS的主要内容,如果未能解决你的问题,请参考以下文章

DNS简介DNS工作原理DNS正反向解析的搭建DNS主从备份DNS子域创建

企业dns服务器部署详解(上)—高速缓存dns搭建/dns正反向解析

通用稳定DNS,国际DNS,国内DNS,公共DNS

DNS篇(详解DNS)

dns解析需要多长时间

0302DNS服务器多区域的DNS服务器DNS主从架构DNS主从数据同步特殊解析缓存DNS