Linux 搭建 DNS 服务器
DNS(Domain Name System–域名系统)
,很多环境是需要内网通信的,全用 IP 有时候机器过多不好记。在没有内网 DNS
的情况,也可以使用 /etc/hosts
(Linux),来实现。Windows
也可以
实验平台:CentOS 7.7.1908
一、DNS 相关介绍
1.DNS
服务器的类型
- 主 DNS 服务器
这些服务器上存放了特定域名的配置文件,并且基于此权威地规定了特定域名的地址。主 DNS
服务器知道全部在它管辖范围的主机和子域名的地址。
- 辅助 DNS 服务器
这些服务器作为主 DNS
服务器的备份,也承担一定负载。主服务器知道辅助 DNS
服务器的存在,并且会向他们推送更新。
- 缓存 DNS 服务器
这些服务器上不存放特定域名的配置文件。当客户端请求缓存服务器来解析域名时,该服务器将首先检查其本地缓存。如果找不到匹配项便会询问主服务器。接着这条响应将被缓存起来。也可以轻松地将自己的系统用作缓存服务器。
2.DNS
名词解释
- 域和域名
DNS
树的每个节点代表一个域,通过这些节点,对整个域名空间进行划分,成为一个层次结构.
域名空间的每个域的名字,通过域名进行表示.
域名:通常由一个完全合格域名(FQDN)
标识. FQDN 能准确表示出其相对于 DNS
域树根的位置,也就是节点到 DNS
树根的完整表述方式,从节点到树根采用反向书写,并将每个节点用 “.”
分隔,对于 DNS
域 google
来说,其完全正式域名(FQDN)
为 google.com
.
eg:google
为 com
域的子域,其表示方法为 google.com
,而 www
为 google
域中的子域,可以使用www.google.com
表示
注意:通常,FQDN 有严格的命名限制,长度不能超过
256
字节,只允许使用字符a-z
,0-9
,A-Z
和减号(-)
.点号(.)
只允许在域名标志之间(例如“google.com
”)或者FQDN
的结尾使用.
域名不区分大小.由最顶层到下层,可以分成:根域、顶级域、二级域、子域.
Internet
域名空间的最顶层是根域(root)
,其记录着 Internet
的重要 DNS
信息,由 Internet
域名注册授权机构管理,该机构把域名空间各部分的管理责任分配给连接到 Internet
的各个组织.
- 全球有
13
个根(root)
服务器
DNS
根域下面是顶级域,也由 Internet
域名注册授权机构管理.共有 3
种类型的顶级域.
- 组织域
采用 3
个字符的代号,表示 DNS
域中所包含的组织的主要功能或活动.比如 com
为商业机构组织, edu
为教育机构组织, gov
为政府机构组织, mil
为军事机构组织, net
为网络机构组织, org
为非营利机构组织, int
为国际机构组织.
- 地址域
采用两个字符的国家或地区代号.如 cn
为中国, kr
为韩国, us
为美国.
- 反向域
这是个特殊域,名字为 in-addr
.arpa
,用于将 IP
地址映射到名字(反向查询).
对于顶级域的下级域,Internet
域名注册授权机构授权给 Internet
的各种组织.当一个组织获得了对域名空间某一部分的授权后,该组织就负责命名所分配的域及其子域,包括域中的计算机和其他设备,并管理分配域中主机名与 IP
地址的映射信息.
- 区(Zone)
区是 DNS
名称空间的一部分,其包含了一组存储在 DNS
服务器上的资源记录.
使用区的概念, DNS
服务器回答关于自己区中主机的查询,每个区都有自己的授权服务器.
-
DNS两种查询方式
-
递归查询
递归查询是一种 DNS
服务器的查询模式,在该模式下 DNS
服务器接收到客户机请求,必须使用一个准确的查询结果回复客户机.如果 DNS
服务器本地没有存储查询 DNS
信息,那么该服务器会询问其他服务器,并将返回的查询结果提交给客户机.
- 迭代查询
DNS
服务器另外一种查询方式为迭代查询,当客户机发送查询请求时,DNS
服务器并不直接回复查询结果,而是告诉客户机另一台DNS
服务器地址,客户机再向这台 DNS
服务器提交请求,依次循环直到返回查询的结果为止
二、安装 DNS
1.yum
安装
$ yum -y install bind
2.DNS
相关配置文件
/etc/named.conf: #主配置文件
/var/named/named.ca: #根域名配置服务器指向文件
/var/named/named.loopback: #localhost区反向解析文件
/var/named/named.localhost:#localhost区正向解析文件
/etc/named.rfc1912.zones: #区块设置文件
/var/named/named.ca: #根域名配置服务器指向文件
3.启动
$ systemctl enable named.service
#设置开机自启
$ systemctl start named
手动启动
4.配置 DNS
服务器
$ vim /etc/named.conf
options {
listen-on port 53 { any; }; #表示监听这台系统上面那个网络接口,默认是localhost,即只有本机可以对DNS服务进行查询
listen-on-v6 port 53 { ::1; };
directory "/var/named"; #定义 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";
recursing-file "/var/named/data/named.recursing";
secroots-file "/var/named/data/named.secroots";
allow-query { any; }; #表示允许哪些主机查询,改成any表示所有
#将监听地址和运行查询的地址都改为 any,分别表示服务器上的所有IP地址均可提供DNS域名解析服务,以及允许所有人对本服务器发送DNS查询请求。
recursion yes; #表示是否允许递归查询
forward first; #这个配置后,当客户端采用我们自己配置的内网 DNS 的 NS 服务器后,当访问别的网站,内网 NS 解析不了的就转发给 8.8.8.8 等的 DNS 服务器解析,保证能正常上网。
forwarders {
223.5.5.5; #阿里云的DNS服务器
223.6.6.6;
8.8.8.8;
8.8.4.4;
};
};
dnssec-enable yes;
dnssec-validation yes;
/* Path to ISC DLV key */
bindkeys-file "/etc/named.root.key";
managed-keys-directory "/var/named/dynamic";
pid-file "/run/named/named.pid";
session-keyfile "/run/named/session.key";
};
logging {
channel default_debug {
file "data/named.run";
severity dynamic;
};
};
zone "." IN {
type hint; #指定区域类型
file "named.ca"; #区域文件,需要手动创建。范例文件为named.localhost
};
include "/etc/named.rfc1912.zones";
include "/etc/named.root.key";
5.编辑修改区域配置文件
$ vim /etc/named.rfc1912.zones
zone "baidu.com" IN {
type master;
file "baidu.com.zone";
};
$ cp -rp /var/named/named.localhost /var/named/baidu.com.zone
#复制一份正向解析的模板文件
$ vim /var/named/baidu.com.zone
$TTL 1D #设置有效地址解析记录的默认缓存时间,默认为1天
baidu.com. IN SOA www.baidu.com. root.baidu.com. (
#baidu.com.也可以使用@,表示当前的域
#www.baidu.com.该域的主域名
#root.baidu.com.管理员邮件地址
0 ; serial
#更新序列号,用于标示数据库的变换,可以在10位以内。如果存在辅助DNS区域,建议每次更新完数据库,手动加1
1D ; refresh
#刷新时间,从域名服务器更新该地址数据库文件的间隔时间,默认为1天
1H ; retry
#重试延时,从域名服务器更新地址数据库失败后,等待多长时间,默认为1小时
1W ; expire
#到期失效时间,超过改时间人无法更新地址数据库,那么不再尝试,默认为1周
3H ) ; minimum
#无效地址解析记录默认缓存时间(该数据库中不存在的地址),默认为3小时
@ IN NS ns.baidu.com.
ns IN A 169.0.0.254
www IN A 10.10.12.4
test IN A 10.10.12.2
cname IN CNAME test.baidu.com.
6.验证修改
$ named-checkconf
#检查conf文件是否有错误
$ named-checkzone baidu.com /var/named/baidu.com.zone
#检查zone文件是否有错误
zone baidu.com/IN: loaded serial 0
OK
7.重启服务验证
$ systemctl restart named
或
$ rndc reload
#重载配置文件
三、验证
$ vim /etc/resolv.conf
nameserver 10.10.12.4
在测试机上配置 DNS 服务器
$ ping www.baidu.com
PING www.baidu.com (10.10.12.4) 56(84) bytes of data.
64 bytes from 10.10.12.4 (10.10.12.4): icmp_seq=1 ttl=64 time=0.290 ms
^C
$ ping test.baidu.com
PING test.baidu.com (10.10.12.2) 56(84) bytes of data.
64 bytes from gateway (10.10.12.2): icmp_seq=1 ttl=128 time=0.295 ms
^C
$ ping cname.baidu.com
PING test.baidu.com (10.10.12.2) 56(84) bytes of data.
64 bytes from gateway (10.10.12.2): icmp_seq=1 ttl=128 time=0.089 ms
$ nslookup test.baidu.com
Server: 10.10.12.4
Address: 10.10.12.4#53
Name: test.baidu.com
Address: 10.10.12.2
$ dig baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 57548
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 1, ADDITIONAL: 1
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;baidu.com. IN A
;; AUTHORITY SECTION:
baidu.com. 10800 IN SOA ns.baidu.com. root.baidu.com. 0 86400 3600 604800 10800
;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:39:42 CST 2020
;; MSG SIZE rcvd: 82
$ dig www.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> www.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 63477
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;www.baidu.com. IN A
;; ANSWER SECTION:
www.baidu.com. 86400 IN A 10.10.12.4
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS ns.baidu.com.
;; ADDITIONAL SECTION:
ns.baidu.com. 86400 IN A 169.0.0.254
;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:39:50 CST 2020
;; MSG SIZE rcvd: 91
$ dig cname.baidu.com
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> cname.baidu.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 59609
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;cname.baidu.com. IN A
;; ANSWER SECTION:
cname.baidu.com. 86400 IN CNAME test.baidu.com.
test.baidu.com. 86400 IN A 10.10.12.2
;; AUTHORITY SECTION:
baidu.com. 86400 IN NS ns.baidu.com.
;; ADDITIONAL SECTION:
ns.baidu.com. 86400 IN A 169.0.0.254
;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Wed Aug 05 09:40:06 CST 2020
;; MSG SIZE rcvd: 112
四、反向解析
反向解析是把 IP
地址解析成域名格式,因此在定义 zone(区域)
时应该要把IP地址反写,比如原来是 10.10.12.4
,反写后应该就是 4.12.10.10
,而且只需写出 IP
地址的网络位即可
1.定义区域文件
$ vim /etc/named.rfc1912.zones
zone "12.10.10.in-addr.arpa" IN {
type master;
file "10.10.12.zone";
};
2.使用原有模板
$ cp -rp /var/named/named.loopback /var/named/10.10.12.zone
3.编辑区域文件
$ vim /var/named/10.10.12.zone
$TTL 1D
@ IN SOA ns.baidu.com. root.baidu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.baidu.com.
2 IN PTR test.baidu.com.
254 IN PTR ns.baidu.com.
4 IN PTR www.baidu.com.
4.测试配置文件是否有误
$ named-checkconf
$ named-checkzone 10.10.12.zone /var/named/10.10.12.zone
5.重启服务
$ systemctl restart named
或
$ rndc reload
#重载配置文件
6.验证
$ dig -x 10.10.12.2
; <<>> DiG 9.11.4-P2-RedHat-9.11.4-16.P2.el7_8.6 <<>> -x 10.10.12.2
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 47269
;; flags: qr aa rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 1, ADDITIONAL: 2
;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;2.12.10.10.in-addr.arpa. IN PTR
;; ANSWER SECTION:
2.12.10.10.in-addr.arpa. 86400 IN PTR test.baidu.com.
;; AUTHORITY SECTION:
12.10.10.in-addr.arpa. 86400 IN NS ns.baidu.com.
;; ADDITIONAL SECTION:
ns.baidu.com. 86400 IN A 169.0.0.254
;; Query time: 0 msec
;; SERVER: 10.10.12.4#53(10.10.12.4)
;; WHEN: Mon Aug 10 01:59:38 CST 2020
;; MSG SIZE rcvd: 113
五、DNS
主从搭建
主从服务器好处是起到备份解析记录与负载均衡的作用,因此通过部署从服务器可以减轻主服务器的负载压力,还可以提升用户的查询效率
1.在从节点上安装 DNS
服务
$ yum -y install bind
$ systemctl enable named
$ systemctl start named
2.编辑主节点域文件
$ vim /etc/named.rfc1912.zones
zone "baidu.com" IN {
type master;
file "baidu.com.zone";
notify yes; #开启通告,有更新就会通告给从节点
also-notify { 10.10.12.5; }; #主动通知从域名服务器进行更新
allow-transfer { 10.10.12.5; }; #指定从节点 10.10.12.5 可以复制域文件
};
3.定义从节点域文件
$ vim /etc/named.rfc1912.zones
zone "baidu.com" IN {
type slave;
file "slave/baidu.com.zone";
masters { 10.10.12.4; };
allow-notify { 10.10.12.4; }; #定义了一个匹配列表并且只应用于从dns区域(slave zone)
};
zone "12.10.10.in-addr.arpa" IN {
typre slave;
file "slave/10.10.12.zone";
masters { 10.10.12.4; };
allow-notify { 10.10.12.4; };
};
4..重启从节点 DNS 服务器
$ systemctl restart named
会主动去 主节点上拉去对应的 域文件
$ ls -l /var/named/slaves/
total 8
-rw-r--r-- 1 named named 366 Aug 10 03:47 10.10.12.zone
-rw-r--r-- 1 named named 390 Aug 10 03:39 baidu.com.zone
5.验证测试
在主节点添加个记录
$ vim baidu.com.zone
$TTL 1D
baidu.com. IN SOA ns.baidu.com. root.baidu.com. (
0 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
@ IN NS ns.baidu.com.
@ IN NS ns2.baidu.com.
ns IN A 169.0.0.254
ns2 IN A 169.0.0.253
www IN A 10.10.12.4
test IN A 10.10.12.2
ftp IN A 10.10.12.254
cname IN CNAME test.baidu.com.
$ ping ftp.baidu.com
PING ftp.baidu.com (10.10.12.254) 56(84) bytes of data.
Over ~
版权协议须知!
本篇文章来源于 Uambiguous ,如本文章侵犯到任何版权问题,请立即告知本站,本站将及时予与删除并致以最深的歉意
1253 0 2020-08-05
博主卡片
运维时间
搭建这个平台,只为分享及记载自己所遇之事和难题。
现在时间 2025-01-31
今日天气
随机推荐
站点统计
- 文章总数:241篇
- 分类总数:29个
- 评论总数:14条
- 本站总访问量 370799 次
@svmuvwpuqi 真棒!
@smdxydrauu 博主太厉害了!
@xiaozi 最后的分享的镜像下载地址打不开 服务器没有开机吗?
@yuanyuan 为什么我的4b安装centos7.9 插上tf卡 显示不兼...
@Wong arrhenius 牛比
@MakerFace 厉害了!
@TongSir 老哥 更新下我的友链链接 https://blog.ton...