共计 8772 个字符,预计需要花费 22 分钟才能阅读完成。
为什么需要 DNS
域名解析服务 ,全称Domain Name Service,简称为 DNS。
DNS 是一项基础服务,那他 有什么用 呢?我们为什么需要他?
他最主要的作用是 将全称域名转换成 IP。
试想一下 ,假如上网的时候,在浏览器上面的网址都是 IP 会是什么样的一个状况?
可能我们就需要 像电话本一样,把他们都记录下来 ,需要访问的时候再查看。
因为他们都是 IP 地址数字,记录起来不像单词一样。
事实上也确实有这么做过,例如我们主机的hosts 文件。
[root@bc ~]# vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.2.201 node1 node1.bc.com
192.168.2.211 node1 node1.bc.com
192.168.2.221 node1 node1.bc.com
192.168.2.202 node2 node2.bc.com
192.168.2.212 node2 node2.bc.com
192.168.2.222 node2 node2.bc.com
192.168.2.203 node3 node3.bc.com
192.168.2.213 node3 node3.bc.com
192.168.2.223 node3 node3.bc.com
192.168.2.204 node4 node4.bc.com
192.168.2.214 node4 node4.bc.com
192.168.2.224 node4 node4.bc.com
这样我们在浏览器中输入 node1.bc.com
就会自动地转换成 192.168.2.201
这个地址。
这样的话,即使这个 IP 地址多么难记,我们要访问的时候只需要键入这个地址就可以了。
那我们有 hosts 文件了,为什么需要 DNS 服务呢?
因为 hosts 文件就像电话簿一样,是写死的。
如果有一天,对方的 IP 地址换了。我们键入同样的 域名就访问不了 了。
这个就跟别人换了电话号码,但是你的手机上的电话簿不会即时更新一样。
而 DNS 则是一个在线同步的电话簿,对方改了电话号码,我们也能够连通。
当我们在浏览器上键入网址,名称解析实际上做了什么?
1.首先,为了解析域名他回去才查找 本地的 hosts 文件 。
假如 hosts 文件中有对应的条目,直接就解析成对应的 IP 地址访问了。
2.当 hosts 文件中没有对应的记录 的时候,就会去 查找本地的 DNS 服务器 。
假如你家连的是电信网络,这个本地的 DNS 记录一般是由电信维护的。
你访问本地 DNS 服务器,DNS 服务器有记录并返回一个记录。这个叫 递归查询 。 当然,递归查询在 DNS 服务器中是可以关闭的。
3.当 本地 DNS 服务器中也没有的对应记录 的时候,就回去找 根服务器 。
根服务器是最顶级的域,总共有 13 个。
例如访问 www.example.com 的时候:
a.hosts 文件中没有记录
b. 本地 dns 服务器中也没有记录 。
c. 就会去找根服务器,从 13 个服务器中,从中找到管理 com. 域名的 DNS 服务器。
假如,管理 com. 的服务器告诉我们需要我们去找 ns1.example.comDNS 服务器。
最后 本地 dns 在 ns1.example.com 中查找到 www.example.com 的域名记录 。
这个过程,就叫做 迭代查询。
举个通俗的例子 ,学生问老师一个问题,老师告诉他答案。这叫递归查询。
假如老师也不知道答案,这时老师去问其他老师。这叫迭代查询。
DNS 服务器中的资源类型
SOA 记录:Start Of Authority,起始授权记录;
SOA 记录包含以下信息:(1) 当前区域的主 DNS 服务器的 FQDN,也可以使用当前区域的名字
(2) 当前区域管理员的邮箱地址
但地址中不能使用 @符号,一般用. 替换 @
如 bocai.example.com 代表 bocai@example.com
(3)主从服务协调属性的定义以及否定的答案的统一的 TTL
区域解析库有且仅能有一个 SOA 记录,而必须为解析库的第一条记录;
SOA 记录的一个示例:
bc.com. 86400 IN SOA ns1.bc.com. nsadmin.bc.com. (
2015042201 ; 序列号
2H ; 刷新时间
10M ; 重试时间
1W ; 过期时间
1D ; 否定答案的 TTL 值
)
A 记录 :internet Address
作用是 将全称域名解析成 IP 地址。
node1.bc.com. IN A 192.168.2.201
node2.bc.com. IN A 192.168.2.202
PTR 记录 : PoinTeR
作用是 将 IP 地址解析成全称域名。
4.3.2.1.in-addr.arpa. IN PTR www.bc.com
有特定格式,把 IP 地址反过来写,
1.2.3.4,要写作 4.3.2.1; 而有特定后缀:in-addr.arpa.,
所以完整写法为:4.3.2.1.in-addra.arpa.
NS 记录 : Name Server,
作用是 标明当前区域的 DNS 服务器
bc.com. IN NS ns1.bc.com.
bc.com. IN NS ns2.bc.com.
CNAME 记录 :Canonical Name,别名记录
作用是 将多个名字映射到同一台计算机。
web.bc.com. IN CNAME www.bc.com.
mail.bc.com. IN CNAME www.bc.com.
www.bc.com. IN A 1.1.1.1
这样的话,当在浏览器中键入 web.bc.com 或者 mail.bc.com 实际上都是访问 1.1.1.1
这样有利于修改的时候可以只修改一条 A 记录就达成目的。
MX 记录 : Mail eXchanger,邮件交换器
记录是邮件交换记录,它指向一个邮件服务器,
用于电子邮件系统发邮件时根据收信人的地址后缀来定位邮件服务器。
bc.com. IN MX 10 mx1.bc.com.
这个一般用来设置个性邮箱名字才使用的
例如你的个性域名是 user1@bc.com,实际上是交给了 mx1.bc.com 这个邮件服务器去处理。
搭建两个 DNS 服务器并配置主从复制
主机名 | 主机地址 | 角色 |
---|---|---|
node1 | 192.168.2.201 | 主 DNS 服务器 |
node2 | 192.168.2.202 | 从 DNS 服务器 |
以上节点均关闭了 iptables 和 selinux
一、修改配置文件:
1./etc/named.conf
这个配置文件用于设置全局配置
[root@node1 named]# vim /etc/named.conf
options {listen-on port 53 { 192.168.2.201;127.0.0.1;};
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;};
dnssec-enable no;
dnssec-validation no;
#可以用于防止 DNS 毒化,但是需要购买证书。}
#定义一个叫 bc.com 的域,也就是说这台 DNS 服务器可以解析这个域
#这里的 file 使用了相对路径,也就是需要在 /var/named/bc.com.zone 这个文件里面定义资源记录。
注意:listen-on port 写成 0.0.0.0 并不能监听在全部网址的 53 号端口上.
往后的相对路径全部都是相对于 directory 而言的。
2./etc/named.rfc1912.zones
用于设置服务器可以解析的域
zone "bc.com" IN {
type master;
file "bc.com.zone";
};
3. 定义资源记录
[root@node1 named]# vim /var/named/bc.com.zone
$TTL 86400
$ORIGIN bc.com.
@ IN SOA ns1.bc.com. admin.bc.com (
2016042201
1H
5M
7D
1D )
IN NS ns1
IN NS ns2
ns1 IN A 192.168.2.201
ns2 IN A 192.168.2.202
node1 IN A 192.168.2.201
node1 IN A 192.168.2.211
node1 IN A 192.168.2.221
node2 IN A 192.168.2.202
node2 IN A 192.168.2.212
node2 IN A 192.168.2.222
node3 IN A 192.168.2.203
node3 IN A 192.168.2.213
node3 IN A 192.168.2.223
node4 IN A 192.168.2.204
node4 IN A 192.168.2.214
node4 IN A 192.168.2.224
* IN A 192.168.2.201
检查脚本的语法错误(不检查逻辑上的错误)
[root@node1 named]# named-checkconf
假如没有问题的话,不会有任何输出。
下面我们删除一个分号再运行一次检查错误。
[root@node1 named]# named-checkconf
/etc/named.conf:57: missing ';' before '}'
没有问题,就可以重启服务了。
[root@node1 named]# service named restart
Redirecting to /bin/systemctl restart named.service
需要注意的是,DNS 的包名叫做 bind,服务器名字叫做 named
所以 yum install named 或者 yum install dns 也是没有办法安装服务的。
二、测试能否解析域名
[root@node1 named]# dig -t A node1.bc.com @192.168.2.201
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.201
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 12316
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;node1.bc.com. IN A
;; ANSWER SECTION:
node1.bc.com. 86400 IN A 192.168.2.211
node1.bc.com. 86400 IN A 192.168.2.221
node1.bc.com. 86400 IN A 192.168.2.201
;; AUTHORITY SECTION:
bc.com. 86400 IN NS ns2.bc.com.
bc.com. 86400 IN NS ns1.bc.com.
;; ADDITIONAL SECTION:
ns1.bc.com. 86400 IN A 192.168.2.201
ns2.bc.com. 86400 IN A 192.168.2.202
;; Query time: 0 msec
;; SERVER: 192.168.2.201#53(192.168.2.201)
;; WHEN: Wed Oct 05 03:20:59 EDT 2016
;; MSG SIZE rcvd: 157
在输出结果中,我们需要关注的几个字段:
;; ANSWER SECTION:
node1.bc.com. 86400 IN A 192.168.2.211
node1.bc.com. 86400 IN A 192.168.2.221
node1.bc.com. 86400 IN A 192.168.2.201
;; AUTHORITY SECTION:
bc.com. 86400 IN NS ns2.bc.com.
bc.com. 86400 IN NS ns1.bc.com.
;; ADDITIONAL SECTION:
ns1.bc.com. 86400 IN A 192.168.2.201
ns2.bc.com. 86400 IN A 192.168.2.202
首先我们的命令是向 192.168.2.201 这台主机查询 node1.bc.com 这个域名的 IP 地址。
dig -t A node1.bc.com @192.168.2.201
;; ANSWER SECTION:指的就是答案,也就是说查找得到的 A 记录,也就是 IP 地址。
;; AUTHORITY SECTION:指的是,负责解析这个域的 DNS 服务器。
;; ADDITIONAL SECTION:指的是负责解析的服务器的 A 记录,也就是 IP 地址。
三、配置 node2 为从服务器
从服务器安装 DNS 服务的软件包
[root@node2 ~]# yum install named -y
修改全局配置文件
[root@node2 ~]# vim /etc/named.conf
options {listen-on port 53 { 192.168.2.202;127.0.0.1;};
listen-on-v6 port 53 {::1;};
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;
dnssec-enable no;
dnssec-validation no;
}
修改区域配置文件
[root@node2 ~]# vim /etc/named.rfc1912.zones
zone "bc.com" IN {
type slave;
masters {192.168.2.201;};
file "slaves/named.bc.com.zone";
};
重启服务
[root@node2 ~]# service named restart
Redirecting to /bin/systemctl restart named.service
查看监听端口是否开启
[root@node2 ~]# ss -tnlp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 10 192.168.2.202:53 *:* users:(("named",4689,21))
LISTEN 0 10 127.0.0.1:53 *:* users:(("named",4689,20))
四、同步需要注意的几点
1. 主从的 时间必须同步 ,否则容易出错。
2.bind 程序的版本应该保持一致; 否则,应该 从高主低 ;
3.dnssec 功能 的开启会影响查询。
4.主服务器 一旦发生更改,主服务器会 通知 解析库中有 NS 记录的从服务器。
5. 防火墙徐璈开放 53 号端口 的 tcp 和 udp 连接,UDP 用于查询,TCP 用于同步。
6. 可以通过 手动修改 SOA 记录中的序列号 ,手动 +1,可以让主从同步。 也就是说,假如主从不同步,可以从这几个方面检查有没有设置好。
五、测试从服务器是否同步成功。
向 node2 查询 node1.bc.com 这个域名的 A 记录
[root@node1 named]# dig -t A node1.bc.com @192.168.2.202
; <<>> DiG 9.9.4-RedHat-9.9.4-29.el7_2.4 <<>> -t A node1.bc.com @192.168.2.202
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47173
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 3, AUTHORITY: 2, ADDITIONAL: 3
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;node1.bc.com. IN A
;; ANSWER SECTION:
node1.bc.com. 86400 IN A 192.168.2.221
node1.bc.com. 86400 IN A 192.168.2.211
node1.bc.com. 86400 IN A 192.168.2.201
;; AUTHORITY SECTION:
bc.com. 86400 IN NS ns2.bc.com.
bc.com. 86400 IN NS ns1.bc.com.
;; ADDITIONAL SECTION:
ns1.bc.com. 86400 IN A 192.168.2.201
ns2.bc.com. 86400 IN A 192.168.2.202
;; Query time: 1 msec
;; SERVER: 192.168.2.202#53(192.168.2.202)
;; WHEN: Fri Dec 30 14:37:18 CST 2016
;; MSG SIZE rcvd: 157
成功向 node2 这个 DNS 服务器查找到 node1 的 A 记录。
因为从服务器只配置了一个 zone,资源记录是空的。
如果没有从 master 同步到资源记录,是解析不了的。
查看 node2 是否同步到记录
[root@node2 ~]# vim /var/named/slaves/named.bc.com.zone
^@^@^@^B^@^@^@^AXeþ<86>^@^@^@^@^@^@^@^@^@^@^@^@^@^@^@S^@^A^@^F^@^@^@^AQ<80>^@^@^@^A^@^H^Bbc^Ccom^@^@5^Cns1^Bbc^Ccom^@^Eadmin^Bbc^Ccom^Bbc^Ccom^@x+<95>u^@^@^N^P^@^@^A,^@ :<80>^@^AQ<80>^@^@^@8^@^A^@^B^@^@^@^AQ<80>^@^@^@^B^@^H^Bbc^Ccom^@^@^L^Cns1^Bbc^Ccom^@^@^L^Cns2^Bbc^Ccom^@^@^@^@$^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@
^A*^Bbc^Ccom^@^@^DÀ¨^BÉ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode1^Bbc^Ccom^@^@^DÀ¨^BÉ^@^DÀ¨^BÓ^@^DÀ¨^BÝ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode2^Bbc^Ccom^@^@^DÀ¨^BÊ^@^DÀ¨^BÔ^@^DÀ¨^BÞ^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode3^Bbc^Ccom^@^@^DÀ¨^BË^@^DÀ¨^BÕ^@^DÀ¨^Bß^@^@^@4^@^A^@^A^@^@^@^AQ<80>^@^@^@^C^@^N^Enode4^Bbc^Ccom^@^@^DÀ¨^BÌ^@^DÀ¨^BÖ^@^DÀ¨^Bà^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns1^Bbc^Ccom^@^@^DÀ¨^BÉ^@^@^@&^@^A^@^A^@^@^@^AQ<80>^@^@^@^A^@^L^Cns2^Bbc^Ccom^@^@^DÀ¨^BÊ
` 如果不想是乱码,zone 可以定义成这样。
zone "bc.com" IN {
type slave;
masters {192.168.2.201;};
masterfile-format text;
file "slaves/named.bc.com.zone";
};
同步而来的 slave 文件,显得十分规范。
[root@node2 ~]# cat /var/named/slaves/named.bc.com.zone
$ORIGIN .
$TTL 86400 ; 1 day
bc.com IN SOA ns1.bc.com. admin.bc.com.bc.com. (
2016122230 ; serial
3600 ; refresh (1 hour)
300 ; retry (5 minutes)
604800 ; expire (1 week)
86400 ; minimum (1 day)
)
NS ns1.bc.com.
NS ns2.bc.com.
$ORIGIN bc.com.
* A 192.168.2.201
node1 A 192.168.2.201
A 192.168.2.211
A 192.168.2.221
node2 A 192.168.2.202
A 192.168.2.212
A 192.168.2.222
node3 A 192.168.2.203
A 192.168.2.213
A 192.168.2.223
node4 A 192.168.2.204
A 192.168.2.214
A 192.168.2.224
ns1 A 192.168.2.201
ns2 A 192.168.2.202
这样、我们就配置出一个简单的 DNS 主从服务器了。
由于篇幅的原因,域名服务器的 子域授权 以及 智能解析 见 http://www.linuxidc.com/Linux/2017-10/147595.htm
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-10/147596.htm