DNS 原理入门( 三 )


常见的DNS记录类型如下 。
(1) A:地址记录(Address) , 返回域名指向的IP地址 。
(2) NS:域名服务器记录(Name Server) , 返回保存下一级域名信息的服务器地址 。该记录只能设置为域名 , 不能设置为IP地址 。
(3)MX:邮件记录(Mail eXchange) , 返回接收电子邮件的服务器地址 。
(4)CNAME:规范名称记录(Canonical Name) , 返回另一个域名 , 即当前查询的域名是另一个域名的跳转 , 详见下文 。
(5)PTR:逆向查询记录(Pointer Record) , 只用于从IP地址查询域名 , 详见下文 。
一般来说 , 为了服务的安全可靠 , 至少应该有两条NS记录 , 而A记录和MX记录也可以有多条 , 这样就提供了服务的冗余性 , 防止出现单点失败 。
CNAME记录主要用于域名的内部跳转 , 为服务器配置提供灵活性 , 用户感知不到 。举例来说 , facebook.github.io这个域名就是一个CNAME记录 。
$ dig facebook.github.io
...
;; ANSWER SECTION:
facebook.github.io. 3370 IN CNAME github.map.fastly.net.
github.map.fastly.net. 600 IN A 103.245.222.133
上面结果显示 , facebook.github.io的CNAME记录指向github.map.fastly.net 。也就是说 , 用户查询facebook.github.io的时候 , 实际上返回的是github.map.fastly.net的IP地址 。这样的好处是 , 变更服务器IP地址的时候 , 只要修改github.map.fastly.net这个域名就可以了 , 用户的facebook.github.io域名不用修改 。
由于CNAME记录就是一个替换 , 所以域名一旦设置CNAME记录以后 , 就不能再设置其他记录了(比如A记录和MX记录) , 这是为了防止产生冲突 。举例来说 , foo.com指向bar.com , 而两个域名各有自己的MX记录 , 如果两者不一致 , 就会产生问题 。由于顶级域名通常要设置MX记录 , 所以一般不允许用户对顶级域名设置CNAME记录 。
PTR记录用于从IP地址反查域名 。dig命令的-x参数用于查询PTR记录 。
$ dig -x 192.30.252.153
...
;; ANSWER SECTION:
153.252.30.192.in-addr.arpa. 3600 IN PTR pages.github.com.
上面结果显示 , 192.30.252.153这台服务器的域名是pages.github.com 。
逆向查询的一个应用 , 是可以防止垃圾邮件 , 即验证发送邮件的IP地址 , 是否真的有它所声称的域名 。
dig命令可以查看指定的记录类型 。
$ dig a github.com
$ dig ns github.com
$ dig mx github.com
九、其他DNS工具
除了dig , 还有一些其他小工具也可以使用 。
(1)host 命令
host命令可以看作dig命令的简化版本 , 返回当前请求域名的各种记录 。
$ host github.com
github.com has address 192.30.252.121
github.com mail is handled by 5 ALT2.ASPMX.L.GOOGLE.COM.
github.com mail is handled by 10 ALT4.ASPMX.L.GOOGLE.COM.
github.com mail is handled by 10 ALT3.ASPMX.L.GOOGLE.COM.
github.com mail is handled by 5 ALT1.ASPMX.L.GOOGLE.COM.
github.com mail is handled by 1 ASPMX.L.GOOGLE.COM.
$ host facebook.github.com
facebook.github.com is an alias for github.map.fastly.net.
github.map.fastly.net has address 103.245.222.133
host命令也可以用于逆向查询 , 即从IP地址查询域名 , 等同于dig -x。
$ host 192.30.252.153
153.252.30.192.in-addr.arpa domain name pointer pages.github.com.
(2)nslookup 命令
nslookup命令用于互动式地查询域名记录 。
$ nslookup
> facebook.github.io
Server: 192.168.1.253
Address: 192.168.1.253#53
Non-authoritative answer:
facebook.github.io canonical name = github.map.fastly.net.
Name: github.map.fastly.net
Address: 103.245.222.133
>
(3)whois 命令
whois命令用来查看域名的注册情况 。
$ whois github.com

【DNS 原理入门】


推荐阅读