漫谈DNS
文章作者:luxianghao
文章来源:http://www.cnblogs.com/luxianghao/p/6189633.html 转载请注明,谢谢合作。
免责声明:文章内容仅代表个人观点,如有不当,欢迎指正。
---
为什么会有DNS?
在internet的世界里最早是只有IP的,这就要求人们人们去浏览一些站点的时候必须记住对应的IP地址,
但人们对数字的记忆能力显然不怎么样,这样就催生出了DNS的服务,借助于这个服务,人们可以给一些
IP地址起个名字,如给111.13.101.208起个外号叫baidu.com, 这样人们访问baidu.com跟访问
111.13.101.208是一个效果;但是DNS服务也不是完全没有坏处,首先人们需要维护这样一个服务,增加
了维护成本,然后现在有的服务架构中对DNS是强依赖的,如果DNS不可用,对应的服务也将不可用。
DNS的正解和反解
正解:由主机名查到IP
反解:由IP查询主机名
不管正解和反解,每个领域的所有记录就是一个域,如example.net就是一个域
DNS Linux环境下的配置
存放位置: /etc/resolv.conf
内容:
search example.net
nameserver 10.118.6.6
nameserver 10.118.7.6
其中example.net是默认的域,比如nslookup web1 = nslookup web1.example.net
10.118.6.6是DNS server的IP地址
常用的DNS查询的命令
ping:
[root@test.bj ~]# dig baidu.com
; <<>> DiG 9.8.2rc1-RedHat-9.8.2-0.10.rc1.el6_3.5 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63255
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0
;; QUESTION SECTION:
;baidu.com. IN A
;; ANSWER SECTION:
baidu.com. 35 IN A 111.13.101.208
baidu.com. 35 IN A 123.125.114.144
baidu.com. 35 IN A 180.149.132.47
baidu.com. 35 IN A 220.181.57.217
;; Query time: 34 msec
;; SERVER: 10.118.6.6#53(10.108.6.6)
;; WHEN: Sat Dec 17 13:36:43 2016
;; MSG SIZE rcvd: 91
[root@test.bj ~]# nslookup baidu.com
Server: 10.118.6.6
Address: 10.118.6.6#53
Non-authoritative answer:
Name: baidu.com
Address: 111.13.101.208
Name: baidu.com
Address: 123.125.114.144
Name: baidu.com
Address: 180.149.132.47
Name: baidu.com
Address: 220.181.57.217
关于递归查询
很多组织为了安全起见,都严格限制了能够像他们发起递归查询的主机
相关配置的所在地址:
/etc/bind/named.conf
具体的配置示例:
options {
recursion no;
...
}
options {
allown-recursion {10.1.1.0/24}; #10.1.1.0整个子网可以
...
}
acl "internel" {127.0.0.1; 10.1.1.0/24;};
options {
allown-recursion {"internel"}; #以上acl中的IP可以
...
}
关于DNS缓存
作用:
1) 可以更快速的响应查询请求
2)可以减轻DNS server负载,所以有些DNS server会直接忽略掉特别小的TTL,然后重写一个合理的值
但是DNS缓存也会造成自己的更改迟迟不能生效等问题
除了DNS server有缓存,如下的情况也能造成DNS缓存,当有DNS server调整的时候要格外关注,以避免不必要的损失
JAVA:由于 Java缓存的原因,可能会导致JAVA进程不会使用系统中新的 DNS服务配置,导致期间出现解析失败的情况。
Java对dns 的缓存默认是forever, refer to http://docs.oracle.com/javase/7/docs/technotes/guides/net/properties.html
解决方法:重启Java进程
操作系统:
在Linux中,nscd daemon会处理这类缓存
解决方法:/etc/init.d/nscd restart
DNS server:
解决方法:/etc/init.d/named restart
其他的解决方法:绑定/etc/hosts
提示:在实际的生产环境中,并不建议绑定/etc/hosts,另外这种绑定仅支持A记录,并不支持CNAME
如果你并不着急,可以慢慢等缓存失效
但如果你等待的时间已经超出缓存时间,修改仍不生效,那可能是
1)修改后的配置有语法错误,DNS server会自动忽略错误的配置,继续使用上次ok的配置,可以查syslog或message查相关的报错信息
2)主DNS server的更改没能同步到slave的DNS server,原因可能是,中间网络的问题;salve没配置相关的主server, 拒绝了更新通知;
slave server的版本号大于主的待更新的版本号
另外在实际的生产环境中DNS 的生效时间直接决定了工作效率,故障时间等,所以能够寻求快速的使DNS修改生效的方式也是造福一类的一件事,
不断探索中。。。
漫谈DNS的更多相关文章
- dns泛解析漫谈
比如说:http://www.aaa.com/ 指向10.10.1.1,ftp.aaa.com/ 指向10.10.2.2,如果这时候客户访问的是aaa.com或者error.aaa.com (这里er ...
- 计算机网络漫谈之OSI七层模型和TCP/IP四层模型
在 什么是网络? 中,你已经知道计算机网络是物理连接的"局域网"和工作于这个局域网上的"网络协议",并且我们的重心是网络协议.有关网络协议,按照目前的分层方式主 ...
- 6.DNS公司PC访问外网的设置 + 主DNS服务器和辅助DNS服务器的配置
网站部署之~Windows Server | 本地部署 http://www.cnblogs.com/dunitian/p/4822808.html#iis DNS服务器部署不清楚的可以看上一篇:ht ...
- 【道德经】漫谈实体、对象、DTO及AutoMapper的使用
写在前面 实体和值对象 实体和对象 故常无欲以观其妙,常有欲以观其徼 初始实体和演化实体 代码中的DTO AutoMapper实体转换 后记 实体(Entity).对象(Object).DTO(Dat ...
- CSS实现水平|垂直居中漫谈
利用CSS进行元素的水平居中,比较简单,手到擒来:行级元素设置其父元素的text-align center,块级元素设置其本身的left 和 right margins为auto即可.而撸起垂直居中, ...
- Liunx下配置DNS服务
当Ping 主机名时可以映射出该主机的IP地址,反之亦然.配置并指定DNS服务器可以快速部署集群,不需要每台主机都去修改HOSTS文件即可实现IP与主机名的相互解析.而在Linux下的DNS是用bin ...
- ★Kali信息收集~4.DNS系列
★.1host:DNS信息 参数: 一般情况下,host查找的是A,AAAA,和MX的记录 案例: DNS服务器查询 host -t ns 域名 A记录和MX记录查询 host 域名(host - ...
- Node.js:DNS模块的使用
Nodejs的DNS模块包涵有关DNS查询和操作的方法,下面介绍该模块的基本用法以及实现一个DNS查询小工具. 1.获取DNS服务器地址 使用getServers方法,该方法返回一个IP地址组成的数组 ...
- Java DNS查询内部实现
源码分析 在Java中,DNS相关的操作都是通过通过InetAddress提供的API实现的.比如查询域名对应的IP地址: String dottedQuadIpAddress = InetAddre ...
随机推荐
- javascript报错:ReferenceError: $ is not defined解决办法
原因很简单,要么是未导入jquery包,要么是导入的顺序不对. 例如,我在制作Chrome扩展程序时,其中的一块代码如下: 然后运行时报上述错误. 解决方法:我们不难发现script位置有问题,因为$ ...
- GIT分布式版本控制器的前后今生
Git的入门与安装 GIT基础操作 GIT的分支应用 GITLAB应用 gitlab与pycharm应用 GITHUB使用
- JS实现单向链表、双向链表、循环链表
https://cloud.tencent.com/developer/article/1114246 链表存储有序的元素的集合,但是和数组不同的是,链表中的元素在内存中的存储并不是连续的.每一个链表 ...
- C11 C语言文件的读写
目录 文件的打开和关闭 字符流读写文件 文件的打开和关闭 fopen( ) fopen( ) 函数来创建一个新的文件或者打开一个已有的文件,这个调用会初始化类型 FILE 的一个对象,类型 FILE ...
- Java获取yml里面的配置
#yml文件配置systemPath: #档案系统地址 dossier: http://127.0.0.1:8088/ //调用说明 配置文件里必须包含节点 否则项目无法启动 @Value(" ...
- 汉明码(Hamming Code)原理及实现
汉明码实现原理 汉明码(Hamming Code)是广泛用于内存和磁盘纠错的编码.汉明码不仅可以用来检测转移数据时发生的错误,还可以用来修正错误.(要注意的是,汉明码只能发现和修正一位错误,对于两位或 ...
- maven,gradle本地缓存位置
gradle: 配置系统环境变量GRADLE_USER_HOME即可,值为缓存位置. maven: 修改settings文件:maven的home路径下的conf文件夹下的settings.xml 对 ...
- Java Object类 instanceof关键字 练习:判断是否为同一人 集合按照人的年龄排序,如果年龄相同按名字的字母顺序升序 Comparator比较器
package com.swift; public class Same_Person_Test { public static void main(String[] args) { /* * Obj ...
- iOS开发之MVVM在项目中的应用
今天写这篇博客是想达到抛砖引玉的作用,想与大家交流一下思想,相互学习,博文中有不足之处还望大家批评指正.本篇博客的内容沿袭以往博客的风格,也是以干货为主,偶尔扯扯咸蛋(哈哈~不好好工作又开始发表博客啦 ...
- HDU-1072-Nightmares
这题可以用dfs写,我们记忆化搜索. 我们定义一个step和time数组,分别表示走到这点的最小步数,time表示走到该点炸弹还剩多少时间. 递归边界一是,如果走到该点,时间等于0,我们就返回. 如果 ...