DNS解析
域名,调用解析程序,把待解析的域名放在DNS请求报文中(UDP用户数据报方式),发给本地域名服务器。本地域名服务器在查找域名后,把对应的IP地址放在回答报文中返回。应用程序获得目的主机的IP地址后即可进行通信。
域名层级
顶级域名 .com
二级域名
三级域名
…
DNS规定,域名中的标号都有英文和数字组成,每一个标号不超过63个字符(为了记忆方便,一般不会超过12个字符),也不区分大小写字母。标号中除连字符(-)外不能使用其他的标点符号。级别最低的域名写在最左边,而级别最高的字符写在最右边。由多个标号组成的完整域名总共不超过255个字符。
域名只是逻辑概念,并不代表计算机所在的物理地点。据2006年12月统计,现在顶级域名TLD(Top Level Domain)已有265个,分为三大类:
顶级域名分类 | 例 |
---|---|
国家顶级域名nTLD | cn代表中国,us代表美国,uk代表英国,国家域名又常记为ccTLD(cc表示国家代码contry-code) |
通用顶级域名gTLD | 最常见的通用顶级域名有7个,即:com(公司企业),net(网络服务机构),org(非营利组织),int(国际组织),gov(美国的政府部门),mil(美国的军事部门)。 |
基础结构域名(infrastructure domain) | 这种顶级域名只有一个,即arpa,用于反向域名解析,因此称为反向域名。 |
域名服务器
DNS服务器的管辖范围不是以“域”为单位,而是以“区”为单位。区是DNS服务器实际管辖的范围,区 <= 域。
域名服务器分类 | 说明 |
---|---|
根域名服务器 | 最高层次的域名服务器,最重要,在很多情况下,根域名服务器并不直接把待查询的域名直接解析出IP地址,而是告诉本地域名服务器下一步应当找哪一个顶级域名服务器进行查询 |
顶级域名服务器 | 负责管理在该顶级域名服务器注册的二级域名 |
权限域名服务器 | 负责一个“区”的域名服务器 |
本地域名服务器 | 本地服务器不属于下图的域名服务器的层次结构,但是它对域名系统非常重要。当一个主机发出DNS查询请求时,这个查询请求报文就发送给本地域名服务器 |
域名的解析过程
主机向本地域名服务器的查询一般都是采用递归查询
本地域名服务器向根域名服务器的查询的迭代查询
dnsmasq服务机制
Dnsmasq提供DNS缓存和DHCP服务、Tftp服务功能。当接受到一个DNS请求时,Dnsmasq首先会查找/etc/hosts这个文件,然后查找/etc/resolv.conf中定义的外部DNS
配置文件说明
配置项 | 说明 |
---|---|
resolv-file=/etc/resolv.dnsmasq.conf | 定义dnsmasq从哪里获取上游DNS服务器的地址,默认是从/etc/resolv.conf获取 |
strict-order | 严格按照resolv-file文件中的顺序从上到下进行DNS解析,直到第一个解析成功为止。一般需要开启strict-order |
listen-address=127.0.0.1 | 定义dnsmasq监听的地址,默认是监控本机的所有网卡上。局域网内主机若要使用dnsmasq服务时,指定本机的IP地址 |
address=/19.76.10.in-addr.arpa/10.20.10.10 | 设置一个反向解析,即所有的地址都解析到特定dns去解析 |
address=/double-click.net/127.0.0.1 | 增加一个域名,强制解析到你指定的地址上 |
cache-size=150 | 设置dns缓存大小,默认为150条 |
log-queries log-facility=/usr/log/dnsmasq.log | 设置DNS的日志及日志路径 |
openshift dns
Red Hat OpenShift Container Platform DNS deep dive: DNS changes in Red Hat OpenShift Container Platform 3.6
OpenShift 集群中,至少有三个地方需要用到 DNS:
1.Pod 中应用,通过域名访问外网,需要DNS来解析外网的域名
2.在集群内部(pod 中或者宿主机上)通过服务的域名来访问集群内服务的时候,这也是通常所说的服务发现功能,需要通过服务域名来先发现(获取其IP地址)再使用该服务
3.从集群外部通过域名访问部署在OpenShift pod 中的服务的时候,需要DNS来解析服务的外网域名
Pod中的DNS配置
Pod的DNS定义在resolv.conf文件中
nameserver字段是pod所在的宿主机的主网卡的IP 地址。pod中发起的所有DNS查询请求都会被转发到运行在宿主机的 53 端口上的DNS服务器上
search 字段指定当解析一个非FQDN域名时被附加的搜索域(search domain)列表。
Pod 所在宿主机上的 DNS 配置及服务
部署环境时,会在每个节点上部署 /etc/NetworkManager/dispatcher.d/99-origin-dns.sh 文件。每当节点上的 NetworkManager 服务启动时,该文件会被运行。它的任务包括:
创建 dnsmasq 配置文件 :
node-dnsmasq.conf
origin-dns.conf
origin-upstream-dns.conf
当 NetworkManager 服务启动时启动 dnsmasq 服务
设置宿主机的所有默认路由 IP 为 Dnsmasq 的侦听IP
修改 /etc/resolv.conf,设置搜索域,以及将宿主机的默认 IP 作为 nameserver
创建 /etc/origin/node/resolv.conf
也就是说,宿主机上的 DNS 请求也会转到本机上的 53 端口
dns解析流程
node 上的 dnsmasq 直接将查询请求转发给上游 DNS 名字服务器。因为存在多个名字服务器,所以是依次查询,直到成功为止。从日志看,其查询顺序和配置文件中的顺序是相反的。
dns反向解析
我们经常使用到得DNS服务器里面有两个区域,即“正向查找区域”和“反向查找区域”,正向查找区 域就是我们通常所说的域名解析,反向查找区域即是这里所说的IP反向解析,它的作用就是通过查询IP地址的PTR记录来得到该IP地址指向的域名,当然, 要成功得到域名就必需要有该IP地址的PTR记录。PTR记录是邮件交换记录的一种,邮件交换记录中有A记录和PTR记录,A记录解析名字到地址,而 PTR记录解析地址到名字。地址是指一个客户端的IP地址,名字是指一个客户的完全合格域名。通过对PTR记录的查询,达到反查的目的。反向解析验证其实是对方服务器在进行的,如果我们没有做反向解析,那么对方服务器的反向解析验证就会失败
dns解析测试
1.ping域名与直接ping ip对比时长
2.ping -n 域名,取消反向解析
3.nslookup 域名
4.nslookup domain [dns server] 域名
5.dig 域名
6.dig -x ip,反向解析流程
异常情况下,DNS解析后PTR请求超时。ping 域名,第一次DNS解析回IP地址,第二次DNS是PTR反向解析,超时了两次,共10S,后面ping的报文就可以继续。这个时候ping很打印会卡10S的时间,有延迟。
cat /etc/dnsmasq.conf|grep resolv-file
看是否有其他nameserver