Tag Archives: DNS

hostname和dnsdomainname命令

先讲结论: 忽略已经过时的NIS/YP相关内容(/sbin/sysctl kernel.domainname、/bin/domainname、/bin/nisdomainname、/bin/ypdomainname等) /bin/hostname、/sbin/sysctl kernel.hostname 和 /bin/uname -n 是一码事,都是本机的主机名 /bin/dnsdomainname 命令会把上述主机名按“第一个点”分成两端,输出后一段。这是简单的字符串处理的结果,在内核和DNS层面均无正式意义。 /etc/resolv.conf文件里的search或domain指令,用于从本机访问外部短主机名时,补充域名的后缀部分。   hostname命令: 通过gethostname(2)函数读到本机的主机名。在glibc的情况下,gethostname(2)不是syscall而是标准库函数,转而调用uname(2) (我不太确认调用的是glibc uname还是syscall uname)。根据 https://github.com/torvalds/linux/blob/master/Documentation/sysctl/kernel.txt#L285 的说法,/proc/sys/kernel/hostname、sysctl hostname 和hostname命令应该是功能相同的。 hostname -d 或者 dnsdomainname 命令: 根据/etc/host.conf指定的顺序,先尝试/etc/hosts然后尝试DNS,查找自己的主机名。如果能找到,把第一段去掉之后,输出剩下的部分。这个输出不具备内核意义,只是主机名经过字符串处理之后的派生结果 hostname –fqdn命令: getaddrinfo()函数查询到的ai_canonname strace观察到的行为是去DNS查一下主机名(如果主机名是短形式,按需补充/etc/resolv.conf里声明的search/domain后缀)对应的A记录,只要能查到,即使返回的IP地址不是本机的也不管,就以这个主机名作为结果。 hostname –all-fqdn命令: 拿自己的IP地址们循环调用getnameinfo()函数(strace/tcpdump观察到的具体行为是去DNS查PTR记录),并全部输出

Posted in 默认分类 | Tagged , | Leave a comment

一种巨型网站的 DNS 服务器流量优化方案

中国的门户网站,只 NS 服务器就能产生不少网络流量呢;而且因为随时可能会更改域名指向,以切换服务器组,域名的 TTL 还不能太大,甚至有低于 RFC 规定的300秒的情况。 其实这类服务还是有很大的优化余地的。我们来比划一下 DNS 的解析过程: 访客的电脑向 ISP 的 DNS 提出解析请求 ISP 的 DNS 向 root、gTLD/ccTLD 服务器提出请求,得到网站的域的 NS 地址及其 A记录 ISP 的 DNS 向该域的 NS 服务器提出查询,得到最终结果,返回给访客 这里面其实只有第一步是必须的,无法优化的,而后面的粗流量完全可以缩小成涓涓细流。解决方法就是让各主流 ISP 的 DNS 作为知名网站的域的 hidden slave NS,直接从主 NS 服务器获得权威数据,向辖区的访客提供解析服务。这样,多次重复递归解析的巨大流量变成了 … Continue reading

Posted in 默认分类 | Tagged , | 5 Comments

电信通污染专线客户的 DNS 请求,真是太无耻了

今天上新浪微博,发现页面乱了,明显是 css 下载失败的现象。开 firebug 看到,下载 css 的步骤被 301 到北京网通的导航页面去了。顺手 dig 了一下那个文件所在的域名 timg.sjs.sinajs.cn,发现那个 IP 竟然和我公司的 IP 很接近,是电信通的!!直接访问那个 IP ,是 squid 的错误页面,页面尾部也没署名。这个现象和网通的 NXDOMAIN Redirect 的现象是不同的。 不过,为什么连电信通的缓存服务器都自动 301 到北京网通的导航页面去了呢?看起来他们也在用北京网通DNS,且北京网通 DNS 也无法解析新浪的域名。 继而发现,在自己的电脑上,不论向哪个 DNS  服务器查询,出来都是那个结果,且 TTL 不会降低,保持在300,还有个现象就是应答里没有AUTHORITY和ADDITION SECTION。这说明电信通在线路上做了 DNS 拦截,直接转到他们自己的 DNS 服务器去了。ssh 登录外面托管的服务器上,解析那个域名,给出的是一系列 CNAME … Continue reading

Posted in 默认分类 | Tagged , | 4 Comments

其实SYSOP手段也不是万能的,今天被迫动了一下dnsmasq的源码

今天发现电信通拦截DNS请求,把热门流量导向其内部 squid 缓存服务器。今天主要发现有两个,一个是新浪微博的 css 文件所在的域名 timg.sjs.sinajs.cn 被指向了 124.207.162.88 ,另一个是……查看某个视频的时候,浏览器状态栏提示从 124.207.162.83 下载数据,跟新浪微博被拦截的域名指向同一个 IP 段。但是页面里并没有写是从哪个域名下载视频的。于是乎,我想从公司网关的 dnsmasq 上取得数据,却意外的发现 –log-queries 参数无效,开启该参数后,按文档说明发 USR1 信号给 dnsmasq ,syslog 里却没看到 cache dump。 找了一台 Debian 看了看,是可以的。于是我立即习惯性的阴暗的认为是 RedHat 的软件质量问题。找了一套原装正品源码,编译后发现行为也是一样的。无奈了,SYSOP 手段也不是万能的,只好开始看源码。 源码里搜索 log-queries 找到 getopt 这个步骤,找到其内部名字 OPT_LOG。然后在源码文件里找这个,发现了 cache.c 文件里的 cache_dump 函数中,关于 … Continue reading

Posted in 默认分类 | Tagged , , , , | 3 Comments

bind + mydns 大容量智能 DNS 的方案简述

大体上就是 bind 上启用 view 功能,然后把请求转发给后端的多个 mydns。不过遇到的问题是,如果用 zone {type “forward”;} 的话,会导致  bind 给出的解析结果里缺少 AA 标志位,而且还会带上 ADDITIONAL SECTION,而这个 ADDITIONAL SECTION 指向的恰恰是 bind 自己,于是有时会造成循环。 怎么让 bind 认同自己事实上的权威地位,成了方案的关键。想了几个小时,终于明白了只有 master 和 slave 才能给出带 AA 标志位的应答。master试过了肯定是不行的,因为必须有 file 参数。后来试了试 slave,竟然只需要 masters 参数即可。 最终方案是两横两纵的: 1 一个域有两个 NS 服务器 … Continue reading

Posted in 默认分类 | Tagged , , , , , | 2 Comments