DNS

DNS全称Domain Name System。因为Ip地址难以记忆使用,所以通过域名来唯一表示主机,然后通过DNS将域名转变为IP地址。这样,还能使域名对应的ip可以改变。domain name(域名)的概念不仅用在dns上,只要通过点隔开的名字系统,都可以叫域名,比如mail addressing。

RFC 1034说明了DNS的概念和功能

1. DNS 名字空间

name space大概如图所示:

1

top-level domains(顶级域名)分为三个部分

  • arpa is a special domain used for address-to-name mappings
  • 7个3个字符的域名叫做(generic domains or organizational domains)组织域
  • 所有两个字符的是国家域(根据country code found in iso 3166)

vangogh.cs.berkeley.edu. 最后一个点代表这个名称是完整的,就叫fully qualified domain name(FQDN)。

2. zone和dns服务器

zone

Zone,是DNS name space的子树。也是委托管理的单元。每个域名都属于某个区域(Zone)。每个Zone都会由专门组织来管理,来保证域名注册以及正常使用。比如中国互联网信息中心负责.cn域名的维护管理。.cn就是一个zone。

zone是层级划分的。一个域名,在不同的点分隔的地方,会请求不同的zone。这个叫delegation。比如baidu.comcom是一个zone,baidu.com也是一个zone。

dns server

管理zone的信息,就需要dns servers。一般至少两个dns server。其它dns可以从主dns上拷贝zone信息,这叫做zone transfer,既可以可以通过dns协议,也可以手动rsync

分布式的dns server不仅包括各个组织,ISP搭建的dns server,还有root servers和generic top-level domain servers。每个DNS请求,如果在ISP没有缓存结果,就会向root server请求。

2

在2011年,有13个root servers。每个root server不是单独的server。而是一组servers,一组servers用同样的ip地址。(通过IP anycast addressing)

搭建dn server

BIND是美国加利福尼亚大学伯克利分校开发的软件,是一套域名服务器软件包,该软件实现了 DNS 解析协议,可以在 Linux 系统上通过这个软件包来提供域名解析服务。

缓存

dns请求的结果,一般会缓存在本地几分钟。可以通过ipconfig来看本机缓存的情况。

# 显示本地dns缓存,配置在hosts的关系,也会显示出来
ipconfig /displaydns
# 清除本地dns缓存
ipconfig /flushdns

3. dns 格式

3 dns查询支持udp或tcp的方式进行。一个请求一个回答响应。 请求信息包括:name,type,class。 回答RRS包括:name,type,class,TTL,RData。

TTL:控制数据被缓存多久,单位秒。 Rdata:一般是ip地址 class:1,254,255.indicatiing the Internet,no class,all classes.

Rdata的主要类型如下:

|value|RR type|Description and Purpose| |—|—|—| |1|A|ipv4的地址| |2|NS|name server;提供authoritative name server的名字| |3|CNAME|canonical name;提供别名(CDN 用到了CNAME链)| |6|SOA|Start of a zone of authority;一个域的权威记录| |12|PTR|Pointer;提供了逆向查询。查询in-addr.arpa domain| |15|MX|Mail exchanger;提供域名对应的e-mail handling host。简单邮件传输有协议SMTP会根据MX记录来决定路由过程| |。。。|| 一共有14个类型,只列举了常用和我熟悉的,更多的需要看TCPIP详解。

soa类型

如下,我们可以通过查询域名的SOA记录,来看不同域名的name server。在网上查询name server,能进一步找到管理域名的组织

λ nslookup
Default Server:  UnKnown
Address:  192.168.20.241

> set type=soa
> cn.
Server:  UnKnown
Address:  192.168.20.241

Non-authoritative answer:
cn
        primary name server = a.dns.cn
        responsible mail addr = root.cnnic.cn
        serial  = 2026119302
        refresh = 7200 (2 hours)
        retry   = 3600 (1 hour)
        expire  = 2419200 (28 days)
        default TTL = 21600 (6 hours)

a.dns.cn        internet address = 203.119.25.1
a.dns.cn        AAAA IPv6 address = 2001:dc7::1

反向查找:PTR类型

通过ip地址查找对应的域名。通过IP地址添加特殊的in-addr.arpadomain用来反向查找ipv4的地址。比如79.69.156.39.in-addr.arpa来查询39.156.69.79的域名。

在实际中用API来反向查找,c函数的getnameinfo()。java的getHostName()但因为并不是所有dns都支持反向,经常查询失败。这个API要尽量少用,不仅查询失败。还会造成等待,

InetSocketAddress address = new InetSocketAddress("28.28.1.3", 100);
//This method may trigger a name service reverse lookup
String hostName = address.getHostName();

4. dns update

通过发起dns update请求,可以动态更新Zone。window会自动请求更新它的计算机名和域名。dns server需要配置支持dns update。

# Refreshes all DHCP leases and re-registers DNS names
C:\> ipconfig /registerdns

5. 其它相关

  • dhcp服务器也可以赋予客服端域名(FQDN)

whois service

whois service用来查询域名,ip的分配情况,注册用户和其它信息。具体定义在RFC 3912。whois协议现在一般基于TCP。

除了命令行的方式,还有很多web网站,比如:https://ipinfo.info/html/ip_checker.php 可以查询域名的whois信息。但是具体的组织能查询更具体的信息

例子

看ip地址39.156.69.79(百度的ip)的分配情况,先访问美国的whois,http://whois.arin.net/rest/ip/39.156.69.79.txt 。就可以发现这个ip是APNIC组织分配管理的。详细信息http://wq.apnic.net/apnic-bin/whois.pl在这里查询。

#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2020, American Registry for Internet Numbers, Ltd.
#

NetRange:       39.0.0.0 - 39.255.255.255
CIDR:           39.0.0.0/8
NetName:        APNIC-39
NetHandle:      NET-39-0-0-0-1
Parent:          ()
NetType:        Allocated to APNIC
OriginAS:       
Organization:   Asia Pacific Network Information Centre (APNIC)
RegDate:        2011-01-09
Updated:        2011-02-10
Comment:        This IP address range is not registered in the ARIN database.
Comment:        For details, refer to the APNIC Whois Database via
Comment:        WHOIS.APNIC.NET or http://wq.apnic.net/apnic-bin/whois.pl
Comment:        ** IMPORTANT NOTE: APNIC is the Regional Internet Registry
Comment:        for the Asia Pacific region. APNIC does not operate networks
Comment:        using this IP address range and is not able to investigate
Comment:        spam or abuse reports relating to these addresses. For more
Comment:        help, refer to http://www.apnic.net/apnic-info/whois_search2/abuse-and-spamming
Ref:            https://whois.arin.net/rest/net/NET-39-0-0-0-1

#
# ARIN WHOIS data and services are subject to the Terms of Use
# available at: https://www.arin.net/resources/registry/whois/tou/
#
# If you see inaccuracies in the results, please report at
# https://www.arin.net/resources/registry/whois/inaccuracy_reporting/
#
# Copyright 1997-2020, American Registry for Internet Numbers, Ltd.
#

DDNS

动态域名服务。能用固定的域名地址访问动态IP。实现方式不在DNS协议范畴,而是应用层上的协议沟通。通过在客服端或者路由器上运行客服端程序,间隔检测IP地址,如果变更,就发送到提供DDNS服务的服务器上。国内提供DDNS服务器的主要有花生壳

本地网络的名字解析

除了DNS,在本地网络中还有其它的name services。包括mac的Bonjour/ZeroConf,windows的LLMNR和NetBIOS。这些都是不同厂商自己的,没有建立IETF标准。所以在不同local environment下解析name的行为会不同。而了解这些具体的行为只有参看具体操作系统给出的文档。

mac的本地名字解析,Multicast DNS协议(属于Bonjour)会添加.local后缀。所以mac用电脑名连接windows电脑,需要加上.local后缀。

例如windows在做名字解析的步骤(refer:Microsoft TCP/IP Host Name Resolution Order

  1. 看这个名字是否自己
  2. 查看hosts文件
  3. 请求dns server
  4. NetBIOS name resolution(这个顺序可以配置) 4.1 Check Netbios name cache; 4.2 check LMHOSTS file; 4.3 Query WINS server ( if configured ); 4.4 Try Netbios broadcasts.

7. dns安全

主要是两种:dos和伪造dns记录(dns挟持,dns污染)。

伪造dns记录,在我们日常生活中并不少见。平常我们不管访问什么页面,角落都有广告,可能就遇到了运营商dns挟持。通过修改dns记录,返回新的地址,将原来内容包括在iframe中,另外新增广告页面。现在基本这种情况大运营商基本没有了,投诉到工信部是有用的,访问https页面,因为证书的关系,也能够一定程度防止dns挟持。

还有一种情况,一些国外网站死活打不开,就算DNS服务器就算改到国外,还是不能访问。你可以遇到了GFW防火墙篡改DNS记录。科学上网,自己搭建DNS服务器,通过非常规端口请求dns,可能会解决这种情况。

还有一些工具能够内网dns欺骗,比如ettercap

预防dns污染的方法看这个RFC 5452:Measures for Making DNS More Resilient against Forged Answers

8. 还有什么

zone transferdns suffixwins服务器detect dns spoofing

9. 工具

windows

主要是: ipconfig: 显示ip,dns信息。 nslookup:能发起dns请求。 Nbtstat : a diagnostic tool for NetBIOS over TCP/IP

#NetBIOS名称
Nbtstat -A 192.168.1.12
#会显示出计算机名。
`ping ip`
################################
# 清除dns缓存
C:\> ipconfig /flushdns
Windows IP Configuration
Successfully flushed the DNS Resolver Cache.
################################
# 能发起不同type的dns请求
C:\> nslookup
Default Server: gw
Address: 10.0.0.1
> set type=a
> berkeley.edu.
Server: gw
Address: 10.0.0.1
Non-authoritative answer:
Name: berkeley.edu
Address: 169.229.131.81

linux

主要是:host dig

# host命令既可以正向查找,也可以反向查找
[near@xx]$ host digisky.com
digisky.com has address 125.64.92.11
digisky.com mail is handled by 10 qiye163mx02.mxmail.netease.com.
digisky.com mail is handled by 5 qiye163mx01.mxmail.netease.com.
# 
[near@xx]]$ host 125.64.92.11
11.92.64.125.in-addr.arpa has no PTR record

[near@xx]]$ dig www.pixiv.net @208.67.222.222

参考

  1. TCPIP详解卷一 第二版
  2. The default name resolution sequence for windows XP
  3. mac finder show pc name
  4. 无污染的智能路由 DNS 折腾记

Updated: