一, 背景
到 20 世纪 70 年代末, ARPAnet 是一个拥有几百台主机的很小很友好的网络. 仅需要一个名为 HOSTS.TXT 的文件就能容纳所有需要了解的主机信息: 它包含了所有连接到 ARPAnet 的主机名字到地址的映射(name-to-addressmapping).
HOSTS.TXT 文件是由 SRI 的网络信息中心 (Network Information Center, 简称 NIC) 负责维护, 并且从一台主机 SRI-NIC 上分发到整个网络. ARPAnet 的管理员通常是通过电子邮件通知 NIC, 同时定期 FTP 到 SRI-NIC 上获得最新的 HOSTS.TXT 文件.
但是随着 ARPAnet 的增长, 这种方法行不通了. 每台主机的变更都会导致 HOSTS.TXT 的变化, 导致所有主机需要到 SRI-NIC 上获得更新文件. 当 ARPAnet 采用 TCP/IP 协议后, 网络上的主机爆炸性的增长, 出现了以下问题:
流量和负载:
名字冲突:
一致性
二, DNS 介绍
DNS(Domain Name System, 域名系统), 万维网上作为域名和 IP 地址相互映射的一个分布式数据库, 能够使用户更方便的访问互联网, 而不用去记住能够被机器直接读取的 IP 数串. 通过域名, 最终得到该域名对应的 IP 地址的过程叫做域名解析(或主机名解析).DNS 协议运行在 UDP 协议之上, 使用端口号 53. 在 RFC 文档中 RFC 2181 对 DNS 有规范说明, RFC 2136 对 DNS 的动态更新进行说明, RFC 2308 对 DNS 查询的反向缓存进行说明.
三, DNS 数据结构
3.1 DNS 记录类型
域名和 IP 之间的对应关系, 称为 "记录"(record). 根据使用的目的不同, 又分为不同的类型, 常见的 DNS 记录类型如下:
A: 地址记录(Address), 返回域名指向的 IP 地址.
NS: 域名服务器记录(Name Server), 返回保存下一级域名信息的服务器地址. 该记录只能设置为域名, 不能设置为 IP 地址.
MX: 邮件记录(Mail eXchange), 返回接收电子邮件的服务器地址.
CNAME: 规范名称记录(Canonical Name), 返回另一个域名, 即当前查询的域名是另一个域名的跳转.
PTR: 逆向查询记录(Pointer Record), 只用于从 IP 地址查询域名.
3.2 工作原理
DNS 服务的工作过程
当 DNS 客户机需要查询程序中使用的名称时, 它会查询本地 DNS 服务器来解析该名称. 客户机发送的每条查询消息都包括 3 条信息, 以指定服务器应回答的问题.
指定的 DNS 域名, 表示为完全合格的域名 (FQDN) .
指定的查询类型, 它可根据类型指定资源记录, 或作为查询操作的专门类型.
DNS 域名的指定类别.
对于 DNS 服务器, 它始终应指定为 Internet 类别. 例如, 指定的名称可以是计算机的完全合格的域名, 如 im.qq.com, 并且指定的查询类型用于通过该名称搜索地址资源记录.
DNS 查询以各种不同的方式进行解析. 客户机有时也可通过使用从以前查询获得的缓存信息就地应答查询. DNS 服务器可使用其自身的资源记录信息缓存来应答查询, 也可代表请求客户机来查询或联系其他 DNS 服务器, 以完全解析该名称, 并随后将应答返回至客户机. 这个过程称为递归.
另外, 客户机自己也可尝试联系其他的 DNS 服务器来解析名称. 如果客户机这么做, 它会使用基于服务器应答的独立和附加的查询, 该过程称作迭代, 即 DNS 服务器之间的交互查询就是迭代查询.
DNS 查询的过程
四, DNS 安装
YUM 安装
yum install bind* caching-nameserver
源码安装
- tar zxvf bind-9.6.1.tar.gz
- cd bind-9.6.1
- ./configure --prefix=/usr/local/bind9 --sysconfdir=/etc/named/ --enable-threads --disable-chroot --disable-ipv6
- make && make install
配置环境变量
VIM /etc/profile.d/bind.sh
追加以下行
export PATH=/usr/local/bind9/bin:/usr/local/bind9/sbin:$PATH
帮助文档的查看
- man -M share/man/ named
- VIM /etc/man.config
追加以下行
MANPATH /usr/local/bind9/share/man
DNS 单点配置
- # 修改 / etc/named.conf
- listen-on port 53 {
- any;
- };
- directory "/var/named";
- dump-file "/var/named/data/cache_dump.db";
- statistics-file "/var/named/data/named_stats.txt";
- memstatistics-file "/var/named/data/named_mem_stats.txt";
- allow-query {
- any;
- };
- recursion yes;
- #(此处, 做的是 dns 转发, 当本地服务器无法解析的, 如公网上的域名时, 转发到 114.114.114.114 上)
- forwarders {
- 114.114.114.114;
- };
- };
- # 配置 / etc/named.rfc1912.zones
- zone "test.com" IN {
- type master;
- file "test.com.zone";
- };
- zone "40.168.192.in-addr.arpa" IN {
- type master;
- file "40.168.192.in-addr.arpa.zone";
- };
- #test.com.zone 配置文件
- $TTL 600
- @ IN SOA ns.test.com. root.test.com. (
- 201810131834 ; serial
- 300 ; refresh (5 minutes)
- 60 ; retry (1 minute)
- 604800 ; expire (1 week)
- 3600 ; minimum (1 hour)
- )
- @ IN NS ns.test.com.
- ns IN A 192.168.40.105
- mail IN A 192.168.40.103
- rhl IN A 192.168.40.102
- #40.168.192.in-addr.arpa.zone 配置文件
- $TTL 600
- @ IN SOA ns.test.com. root.test.com. (
- 201810151834 ; serial
- 300 ; refresh (5 minutes)
- 60 ; retry (1 minute)
- 604800 ; expire (1 week)
- 3600 ; minimum (1 hour)
- )
- @ IN NS ns.test.com.
- 103 IN PTR mail.test.com.
DNS 的主从同步
1)主服务器配置
- # 修改 / etc/named.conf
- options {
- listen-on port 53 {
- any;
- };
- directory "/var/named";
- dump-file "/var/named/data/cache_dump.db";
- statistics-file "/var/named/data/named_stats.txt";
- memstatistics-file "/var/named/data/named_mem_stats.txt";
- allow-query {
- any;
- };
- recursion yes;
- #(此处, 做的是 dns 转发, 当本地服务器无法解析的, 如公网上的域名时, 转发到 114.114.114.114 上
- forwarders {
- 114.114.114.114;
- };
- # 配置 / etc/named.rfc1912.zones
- zone "test.com" IN {
- type master;
- file "test.com.zone";
- allow-update {
- none;
- };
- # 从服务器地址
- allow-transfer {
- 192.168.40.170;
- };
- notify yes;
- };
- # 反向解析
- zone "40.168.192.in-addr.arpa" IN {
- type master;
- file "named.192.168.40";
- allow-update {
- none;
- };
- # 从服务器地址
- allow-transfer {
- 192.168.40.170;
- };
- notify yes;
- };
2)从服务器的配置
- # 修改 / etc/named.conf
- options {
- listen-on port 53 {
- any;
- };
- directory "/var/named";
- dump-file "/var/named/data/cache_dump.db";
- statistics-file "/var/named/data/named_stats.txt";
- memstatistics-file "/var/named/data/named_mem_stats.txt";
- allow-query {
- any;
- };
- recursion yes;
- forwarders {
- 114.114.114.114;
- };
- };
- # 配置 / etc/named.rfc1912.zones
- zone "test.com" IN {
- type slave;
- file "slaves/test.com.zone";
- #设置主 dns 服务器的地址
- masters {
- 192.168.40.105;
- };
- allow-update {
- none;
- };
- };
- zone "40.168.192.in-addr.arpa" IN {
- type slave;
- file "slaves/40.168.192.in-addr.arpa.zone";
- masters {
- 192.168.40.105;
- };
- allow-update {
- none;
- };
- };
DNS 配置文件检查
- # 检查主配置文件
- named-checkconf
- # 检查域名配置文件
- named-checkzone test.com /var/named/test.com.zone
- # 测试正向解析
- dig -t A rhl.test.com @192.168.40.105
- # 测试反向解析
- dig -x 192.168.40.103 @192.168.40.105
作者: 秦伟 / 计宝满 / 任宏利
来源: http://blog.51cto.com/14159827/2432887